Commit 21aa683f authored by k8s-merge-robot's avatar k8s-merge-robot

Merge pull request #18974 from pmorie/config-env

Auto commit by PR queue bot
parents 68a61474 17c8c8f9
...@@ -14762,13 +14762,31 @@ ...@@ -14762,13 +14762,31 @@
"v1.EnvVarSource": { "v1.EnvVarSource": {
"id": "v1.EnvVarSource", "id": "v1.EnvVarSource",
"description": "EnvVarSource represents a source for the value of an EnvVar.", "description": "EnvVarSource represents a source for the value of an EnvVar.",
"required": [
"fieldRef"
],
"properties": { "properties": {
"fieldRef": { "fieldRef": {
"$ref": "v1.ObjectFieldSelector", "$ref": "v1.ObjectFieldSelector",
"description": "Selects a field of the pod. Only name and namespace are supported." "description": "Selects a field of the pod; only name and namespace are supported."
},
"configMapKeyRef": {
"$ref": "v1.ConfigMapKeySelector",
"description": "Selects a key of a ConfigMap."
}
}
},
"v1.ConfigMapKeySelector": {
"id": "v1.ConfigMapKeySelector",
"description": "Selects a key from a ConfigMap.",
"required": [
"key"
],
"properties": {
"name": {
"type": "string",
"description": "Name of the referent. More info: http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names"
},
"key": {
"type": "string",
"description": "The key to select."
} }
} }
}, },
......
...@@ -4852,13 +4852,31 @@ ...@@ -4852,13 +4852,31 @@
"v1.EnvVarSource": { "v1.EnvVarSource": {
"id": "v1.EnvVarSource", "id": "v1.EnvVarSource",
"description": "EnvVarSource represents a source for the value of an EnvVar.", "description": "EnvVarSource represents a source for the value of an EnvVar.",
"required": [
"fieldRef"
],
"properties": { "properties": {
"fieldRef": { "fieldRef": {
"$ref": "v1.ObjectFieldSelector", "$ref": "v1.ObjectFieldSelector",
"description": "Selects a field of the pod. Only name and namespace are supported." "description": "Selects a field of the pod; only name and namespace are supported."
},
"configMapKeyRef": {
"$ref": "v1.ConfigMapKeySelector",
"description": "Selects a key of a ConfigMap."
}
}
},
"v1.ConfigMapKeySelector": {
"id": "v1.ConfigMapKeySelector",
"description": "Selects a key from a ConfigMap.",
"required": [
"key"
],
"properties": {
"name": {
"type": "string",
"description": "Name of the referent. More info: http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names"
},
"key": {
"type": "string",
"description": "The key to select."
} }
} }
}, },
......
...@@ -3077,11 +3077,18 @@ Populated by the system when a graceful deletion is requested. Read-only. More i ...@@ -3077,11 +3077,18 @@ Populated by the system when a graceful deletion is requested. Read-only. More i
<tbody> <tbody>
<tr> <tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">fieldRef</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">fieldRef</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Selects a field of the pod. Only name and namespace are supported.</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Selects a field of the pod; only name and namespace are supported.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">true</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_v1_objectfieldselector">v1.ObjectFieldSelector</a></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_v1_objectfieldselector">v1.ObjectFieldSelector</a></p></td>
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">configMapKeyRef</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Selects a key of a ConfigMap.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_v1_configmapkeyselector">v1.ConfigMapKeySelector</a></p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
</tbody> </tbody>
</table> </table>
...@@ -4068,6 +4075,47 @@ Populated by the system when a graceful deletion is requested. Read-only. More i ...@@ -4068,6 +4075,47 @@ Populated by the system when a graceful deletion is requested. Read-only. More i
</div> </div>
<div class="sect2"> <div class="sect2">
<h3 id="_v1_configmapkeyselector">v1.ConfigMapKeySelector</h3>
<div class="paragraph">
<p>Selects a key from a ConfigMap.</p>
</div>
<table class="tableblock frame-all grid-all" style="width:100%; ">
<colgroup>
<col style="width:20%;">
<col style="width:20%;">
<col style="width:20%;">
<col style="width:20%;">
<col style="width:20%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Name</th>
<th class="tableblock halign-left valign-top">Description</th>
<th class="tableblock halign-left valign-top">Required</th>
<th class="tableblock halign-left valign-top">Schema</th>
<th class="tableblock halign-left valign-top">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Name of the referent. More info: <a href="http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names">http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">key</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The key to select.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">true</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="_v1_handler">v1.Handler</h3> <h3 id="_v1_handler">v1.Handler</h3>
<div class="paragraph"> <div class="paragraph">
<p>Handler defines a specific action that should be taken</p> <p>Handler defines a specific action that should be taken</p>
...@@ -4477,7 +4525,7 @@ Populated by the system when a graceful deletion is requested. Read-only. More i ...@@ -4477,7 +4525,7 @@ Populated by the system when a graceful deletion is requested. Read-only. More i
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2016-01-06 14:06:54 UTC Last updated 2016-01-14 15:18:11 UTC
</div> </div>
</div> </div>
</body> </body>
......
...@@ -2613,11 +2613,18 @@ The resulting set of endpoints can be viewed as:<br> ...@@ -2613,11 +2613,18 @@ The resulting set of endpoints can be viewed as:<br>
<tbody> <tbody>
<tr> <tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">fieldRef</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">fieldRef</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Selects a field of the pod. Only name and namespace are supported.</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Selects a field of the pod; only name and namespace are supported.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">true</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_v1_objectfieldselector">v1.ObjectFieldSelector</a></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_v1_objectfieldselector">v1.ObjectFieldSelector</a></p></td>
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">configMapKeyRef</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Selects a key of a ConfigMap.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><a href="#_v1_configmapkeyselector">v1.ConfigMapKeySelector</a></p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
</tbody> </tbody>
</table> </table>
...@@ -6557,6 +6564,47 @@ The resulting set of endpoints can be viewed as:<br> ...@@ -6557,6 +6564,47 @@ The resulting set of endpoints can be viewed as:<br>
</div> </div>
<div class="sect2"> <div class="sect2">
<h3 id="_v1_containerstatewaiting">v1.ContainerStateWaiting</h3>
<div class="paragraph">
<p>ContainerStateWaiting is a waiting state of a container.</p>
</div>
<table class="tableblock frame-all grid-all" style="width:100%; ">
<colgroup>
<col style="width:20%;">
<col style="width:20%;">
<col style="width:20%;">
<col style="width:20%;">
<col style="width:20%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Name</th>
<th class="tableblock halign-left valign-top">Description</th>
<th class="tableblock halign-left valign-top">Required</th>
<th class="tableblock halign-left valign-top">Schema</th>
<th class="tableblock halign-left valign-top">Default</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">reason</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">(brief) reason the container is not yet running.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">message</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Message regarding why the container is not yet running.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
</tbody>
</table>
</div>
<div class="sect2">
<h3 id="_unversioned_status">unversioned.Status</h3> <h3 id="_unversioned_status">unversioned.Status</h3>
<div class="paragraph"> <div class="paragraph">
<p>Status is a return value for calls that don&#8217;t return other objects.</p> <p>Status is a return value for calls that don&#8217;t return other objects.</p>
...@@ -6640,9 +6688,9 @@ The resulting set of endpoints can be viewed as:<br> ...@@ -6640,9 +6688,9 @@ The resulting set of endpoints can be viewed as:<br>
</div> </div>
<div class="sect2"> <div class="sect2">
<h3 id="_v1_containerstatewaiting">v1.ContainerStateWaiting</h3> <h3 id="_v1_configmapkeyselector">v1.ConfigMapKeySelector</h3>
<div class="paragraph"> <div class="paragraph">
<p>ContainerStateWaiting is a waiting state of a container.</p> <p>Selects a key from a ConfigMap.</p>
</div> </div>
<table class="tableblock frame-all grid-all" style="width:100%; "> <table class="tableblock frame-all grid-all" style="width:100%; ">
<colgroup> <colgroup>
...@@ -6663,16 +6711,16 @@ The resulting set of endpoints can be viewed as:<br> ...@@ -6663,16 +6711,16 @@ The resulting set of endpoints can be viewed as:<br>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">reason</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">name</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">(brief) reason the container is not yet running.</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Name of the referent. More info: <a href="http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names">http://releases.k8s.io/HEAD/docs/user-guide/identifiers.md#names</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr> <tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">message</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">key</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Message regarding why the container is not yet running.</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The key to select.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">true</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
...@@ -7049,7 +7097,7 @@ The resulting set of endpoints can be viewed as:<br> ...@@ -7049,7 +7097,7 @@ The resulting set of endpoints can be viewed as:<br>
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2016-01-08 09:05:37 UTC Last updated 2016-01-14 15:17:59 UTC
</div> </div>
</div> </div>
</body> </body>
......
...@@ -39,6 +39,7 @@ func init() { ...@@ -39,6 +39,7 @@ func init() {
deepCopy_api_ComponentCondition, deepCopy_api_ComponentCondition,
deepCopy_api_ComponentStatus, deepCopy_api_ComponentStatus,
deepCopy_api_ComponentStatusList, deepCopy_api_ComponentStatusList,
deepCopy_api_ConfigMapKeySelector,
deepCopy_api_Container, deepCopy_api_Container,
deepCopy_api_ContainerImage, deepCopy_api_ContainerImage,
deepCopy_api_ContainerPort, deepCopy_api_ContainerPort,
...@@ -295,6 +296,14 @@ func deepCopy_api_ComponentStatusList(in ComponentStatusList, out *ComponentStat ...@@ -295,6 +296,14 @@ func deepCopy_api_ComponentStatusList(in ComponentStatusList, out *ComponentStat
return nil return nil
} }
func deepCopy_api_ConfigMapKeySelector(in ConfigMapKeySelector, out *ConfigMapKeySelector, c *conversion.Cloner) error {
if err := deepCopy_api_LocalObjectReference(in.LocalObjectReference, &out.LocalObjectReference, c); err != nil {
return err
}
out.Key = in.Key
return nil
}
func deepCopy_api_Container(in Container, out *Container, c *conversion.Cloner) error { func deepCopy_api_Container(in Container, out *Container, c *conversion.Cloner) error {
out.Name = in.Name out.Name = in.Name
out.Image = in.Image out.Image = in.Image
...@@ -682,6 +691,15 @@ func deepCopy_api_EnvVarSource(in EnvVarSource, out *EnvVarSource, c *conversion ...@@ -682,6 +691,15 @@ func deepCopy_api_EnvVarSource(in EnvVarSource, out *EnvVarSource, c *conversion
} else { } else {
out.FieldRef = nil out.FieldRef = nil
} }
if in.ConfigMapKeyRef != nil {
in, out := in.ConfigMapKeyRef, &out.ConfigMapKeyRef
*out = new(ConfigMapKeySelector)
if err := deepCopy_api_ConfigMapKeySelector(*in, *out, c); err != nil {
return err
}
} else {
out.ConfigMapKeyRef = nil
}
return nil return nil
} }
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -715,9 +715,12 @@ type EnvVar struct { ...@@ -715,9 +715,12 @@ type EnvVar struct {
} }
// EnvVarSource represents a source for the value of an EnvVar. // EnvVarSource represents a source for the value of an EnvVar.
// Only one of its fields may be set.
type EnvVarSource struct { type EnvVarSource struct {
// Required: Selects a field of the pod; only name and namespace are supported. // Selects a field of the pod; only name and namespace are supported.
FieldRef *ObjectFieldSelector `json:"fieldRef"` FieldRef *ObjectFieldSelector `json:"fieldRef,omitempty"`
// Selects a key of a ConfigMap.
ConfigMapKeyRef *ConfigMapKeySelector `json:"configMapKeyRef,omitempty"`
} }
// ObjectFieldSelector selects an APIVersioned field of an object. // ObjectFieldSelector selects an APIVersioned field of an object.
...@@ -730,6 +733,14 @@ type ObjectFieldSelector struct { ...@@ -730,6 +733,14 @@ type ObjectFieldSelector struct {
FieldPath string `json:"fieldPath"` FieldPath string `json:"fieldPath"`
} }
// Selects a key from a ConfigMap.
type ConfigMapKeySelector struct {
// The ConfigMap to select from.
LocalObjectReference `json:",inline"`
// The key to select.
Key string `json:"key"`
}
// HTTPGetAction describes an action based on HTTP Get requests. // HTTPGetAction describes an action based on HTTP Get requests.
type HTTPGetAction struct { type HTTPGetAction struct {
// Optional: Path to access on the HTTP server. // Optional: Path to access on the HTTP server.
......
...@@ -203,6 +203,21 @@ func Convert_api_ComponentStatusList_To_v1_ComponentStatusList(in *api.Component ...@@ -203,6 +203,21 @@ func Convert_api_ComponentStatusList_To_v1_ComponentStatusList(in *api.Component
return autoConvert_api_ComponentStatusList_To_v1_ComponentStatusList(in, out, s) return autoConvert_api_ComponentStatusList_To_v1_ComponentStatusList(in, out, s)
} }
func autoConvert_api_ConfigMapKeySelector_To_v1_ConfigMapKeySelector(in *api.ConfigMapKeySelector, out *ConfigMapKeySelector, s conversion.Scope) error {
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
defaulting.(func(*api.ConfigMapKeySelector))(in)
}
if err := Convert_api_LocalObjectReference_To_v1_LocalObjectReference(&in.LocalObjectReference, &out.LocalObjectReference, s); err != nil {
return err
}
out.Key = in.Key
return nil
}
func Convert_api_ConfigMapKeySelector_To_v1_ConfigMapKeySelector(in *api.ConfigMapKeySelector, out *ConfigMapKeySelector, s conversion.Scope) error {
return autoConvert_api_ConfigMapKeySelector_To_v1_ConfigMapKeySelector(in, out, s)
}
func autoConvert_api_Container_To_v1_Container(in *api.Container, out *Container, s conversion.Scope) error { func autoConvert_api_Container_To_v1_Container(in *api.Container, out *Container, s conversion.Scope) error {
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
defaulting.(func(*api.Container))(in) defaulting.(func(*api.Container))(in)
...@@ -698,6 +713,15 @@ func autoConvert_api_EnvVarSource_To_v1_EnvVarSource(in *api.EnvVarSource, out * ...@@ -698,6 +713,15 @@ func autoConvert_api_EnvVarSource_To_v1_EnvVarSource(in *api.EnvVarSource, out *
} else { } else {
out.FieldRef = nil out.FieldRef = nil
} }
// unable to generate simple pointer conversion for api.ConfigMapKeySelector -> v1.ConfigMapKeySelector
if in.ConfigMapKeyRef != nil {
out.ConfigMapKeyRef = new(ConfigMapKeySelector)
if err := Convert_api_ConfigMapKeySelector_To_v1_ConfigMapKeySelector(in.ConfigMapKeyRef, out.ConfigMapKeyRef, s); err != nil {
return err
}
} else {
out.ConfigMapKeyRef = nil
}
return nil return nil
} }
...@@ -3392,6 +3416,21 @@ func Convert_v1_ComponentStatusList_To_api_ComponentStatusList(in *ComponentStat ...@@ -3392,6 +3416,21 @@ func Convert_v1_ComponentStatusList_To_api_ComponentStatusList(in *ComponentStat
return autoConvert_v1_ComponentStatusList_To_api_ComponentStatusList(in, out, s) return autoConvert_v1_ComponentStatusList_To_api_ComponentStatusList(in, out, s)
} }
func autoConvert_v1_ConfigMapKeySelector_To_api_ConfigMapKeySelector(in *ConfigMapKeySelector, out *api.ConfigMapKeySelector, s conversion.Scope) error {
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
defaulting.(func(*ConfigMapKeySelector))(in)
}
if err := Convert_v1_LocalObjectReference_To_api_LocalObjectReference(&in.LocalObjectReference, &out.LocalObjectReference, s); err != nil {
return err
}
out.Key = in.Key
return nil
}
func Convert_v1_ConfigMapKeySelector_To_api_ConfigMapKeySelector(in *ConfigMapKeySelector, out *api.ConfigMapKeySelector, s conversion.Scope) error {
return autoConvert_v1_ConfigMapKeySelector_To_api_ConfigMapKeySelector(in, out, s)
}
func autoConvert_v1_Container_To_api_Container(in *Container, out *api.Container, s conversion.Scope) error { func autoConvert_v1_Container_To_api_Container(in *Container, out *api.Container, s conversion.Scope) error {
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
defaulting.(func(*Container))(in) defaulting.(func(*Container))(in)
...@@ -3887,6 +3926,15 @@ func autoConvert_v1_EnvVarSource_To_api_EnvVarSource(in *EnvVarSource, out *api. ...@@ -3887,6 +3926,15 @@ func autoConvert_v1_EnvVarSource_To_api_EnvVarSource(in *EnvVarSource, out *api.
} else { } else {
out.FieldRef = nil out.FieldRef = nil
} }
// unable to generate simple pointer conversion for v1.ConfigMapKeySelector -> api.ConfigMapKeySelector
if in.ConfigMapKeyRef != nil {
out.ConfigMapKeyRef = new(api.ConfigMapKeySelector)
if err := Convert_v1_ConfigMapKeySelector_To_api_ConfigMapKeySelector(in.ConfigMapKeyRef, out.ConfigMapKeyRef, s); err != nil {
return err
}
} else {
out.ConfigMapKeyRef = nil
}
return nil return nil
} }
...@@ -6292,6 +6340,7 @@ func init() { ...@@ -6292,6 +6340,7 @@ func init() {
autoConvert_api_ComponentCondition_To_v1_ComponentCondition, autoConvert_api_ComponentCondition_To_v1_ComponentCondition,
autoConvert_api_ComponentStatusList_To_v1_ComponentStatusList, autoConvert_api_ComponentStatusList_To_v1_ComponentStatusList,
autoConvert_api_ComponentStatus_To_v1_ComponentStatus, autoConvert_api_ComponentStatus_To_v1_ComponentStatus,
autoConvert_api_ConfigMapKeySelector_To_v1_ConfigMapKeySelector,
autoConvert_api_ContainerImage_To_v1_ContainerImage, autoConvert_api_ContainerImage_To_v1_ContainerImage,
autoConvert_api_ContainerPort_To_v1_ContainerPort, autoConvert_api_ContainerPort_To_v1_ContainerPort,
autoConvert_api_ContainerStateRunning_To_v1_ContainerStateRunning, autoConvert_api_ContainerStateRunning_To_v1_ContainerStateRunning,
...@@ -6413,6 +6462,7 @@ func init() { ...@@ -6413,6 +6462,7 @@ func init() {
autoConvert_v1_ComponentCondition_To_api_ComponentCondition, autoConvert_v1_ComponentCondition_To_api_ComponentCondition,
autoConvert_v1_ComponentStatusList_To_api_ComponentStatusList, autoConvert_v1_ComponentStatusList_To_api_ComponentStatusList,
autoConvert_v1_ComponentStatus_To_api_ComponentStatus, autoConvert_v1_ComponentStatus_To_api_ComponentStatus,
autoConvert_v1_ConfigMapKeySelector_To_api_ConfigMapKeySelector,
autoConvert_v1_ContainerImage_To_api_ContainerImage, autoConvert_v1_ContainerImage_To_api_ContainerImage,
autoConvert_v1_ContainerPort_To_api_ContainerPort, autoConvert_v1_ContainerPort_To_api_ContainerPort,
autoConvert_v1_ContainerStateRunning_To_api_ContainerStateRunning, autoConvert_v1_ContainerStateRunning_To_api_ContainerStateRunning,
......
...@@ -184,6 +184,14 @@ func deepCopy_v1_ComponentStatusList(in ComponentStatusList, out *ComponentStatu ...@@ -184,6 +184,14 @@ func deepCopy_v1_ComponentStatusList(in ComponentStatusList, out *ComponentStatu
return nil return nil
} }
func deepCopy_v1_ConfigMapKeySelector(in ConfigMapKeySelector, out *ConfigMapKeySelector, c *conversion.Cloner) error {
if err := deepCopy_v1_LocalObjectReference(in.LocalObjectReference, &out.LocalObjectReference, c); err != nil {
return err
}
out.Key = in.Key
return nil
}
func deepCopy_v1_Container(in Container, out *Container, c *conversion.Cloner) error { func deepCopy_v1_Container(in Container, out *Container, c *conversion.Cloner) error {
out.Name = in.Name out.Name = in.Name
out.Image = in.Image out.Image = in.Image
...@@ -533,6 +541,14 @@ func deepCopy_v1_EnvVarSource(in EnvVarSource, out *EnvVarSource, c *conversion. ...@@ -533,6 +541,14 @@ func deepCopy_v1_EnvVarSource(in EnvVarSource, out *EnvVarSource, c *conversion.
} else { } else {
out.FieldRef = nil out.FieldRef = nil
} }
if in.ConfigMapKeyRef != nil {
out.ConfigMapKeyRef = new(ConfigMapKeySelector)
if err := deepCopy_v1_ConfigMapKeySelector(*in.ConfigMapKeyRef, out.ConfigMapKeyRef, c); err != nil {
return err
}
} else {
out.ConfigMapKeyRef = nil
}
return nil return nil
} }
...@@ -2463,6 +2479,7 @@ func init() { ...@@ -2463,6 +2479,7 @@ func init() {
deepCopy_v1_ComponentCondition, deepCopy_v1_ComponentCondition,
deepCopy_v1_ComponentStatus, deepCopy_v1_ComponentStatus,
deepCopy_v1_ComponentStatusList, deepCopy_v1_ComponentStatusList,
deepCopy_v1_ConfigMapKeySelector,
deepCopy_v1_Container, deepCopy_v1_Container,
deepCopy_v1_ContainerImage, deepCopy_v1_ContainerImage,
deepCopy_v1_ContainerPort, deepCopy_v1_ContainerPort,
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -843,8 +843,10 @@ type EnvVar struct { ...@@ -843,8 +843,10 @@ type EnvVar struct {
// EnvVarSource represents a source for the value of an EnvVar. // EnvVarSource represents a source for the value of an EnvVar.
type EnvVarSource struct { type EnvVarSource struct {
// Selects a field of the pod. Only name and namespace are supported. // Selects a field of the pod; only name and namespace are supported.
FieldRef *ObjectFieldSelector `json:"fieldRef"` FieldRef *ObjectFieldSelector `json:"fieldRef,omitempty"`
// Selects a key of a ConfigMap.
ConfigMapKeyRef *ConfigMapKeySelector `json:"configMapKeyRef,omitempty"`
} }
// ObjectFieldSelector selects an APIVersioned field of an object. // ObjectFieldSelector selects an APIVersioned field of an object.
...@@ -855,6 +857,14 @@ type ObjectFieldSelector struct { ...@@ -855,6 +857,14 @@ type ObjectFieldSelector struct {
FieldPath string `json:"fieldPath"` FieldPath string `json:"fieldPath"`
} }
// Selects a key from a ConfigMap.
type ConfigMapKeySelector struct {
// The ConfigMap to select from.
LocalObjectReference `json:",inline"`
// The key to select.
Key string `json:"key"`
}
// HTTPGetAction describes an action based on HTTP Get requests. // HTTPGetAction describes an action based on HTTP Get requests.
type HTTPGetAction struct { type HTTPGetAction struct {
// Path to access on the HTTP server. // Path to access on the HTTP server.
......
...@@ -115,6 +115,15 @@ func (ComponentStatusList) SwaggerDoc() map[string]string { ...@@ -115,6 +115,15 @@ func (ComponentStatusList) SwaggerDoc() map[string]string {
return map_ComponentStatusList return map_ComponentStatusList
} }
var map_ConfigMapKeySelector = map[string]string{
"": "Selects a key from a ConfigMap.",
"key": "The key to select.",
}
func (ConfigMapKeySelector) SwaggerDoc() map[string]string {
return map_ConfigMapKeySelector
}
var map_Container = map[string]string{ var map_Container = map[string]string{
"": "A single application container that you want to run within a pod.", "": "A single application container that you want to run within a pod.",
"name": "Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated.", "name": "Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated.",
...@@ -335,8 +344,9 @@ func (EnvVar) SwaggerDoc() map[string]string { ...@@ -335,8 +344,9 @@ func (EnvVar) SwaggerDoc() map[string]string {
} }
var map_EnvVarSource = map[string]string{ var map_EnvVarSource = map[string]string{
"": "EnvVarSource represents a source for the value of an EnvVar.", "": "EnvVarSource represents a source for the value of an EnvVar.",
"fieldRef": "Selects a field of the pod. Only name and namespace are supported.", "fieldRef": "Selects a field of the pod; only name and namespace are supported.",
"configMapKeyRef": "Selects a key of a ConfigMap.",
} }
func (EnvVarSource) SwaggerDoc() map[string]string { func (EnvVarSource) SwaggerDoc() map[string]string {
......
...@@ -968,6 +968,9 @@ func validateEnvVarValueFrom(ev api.EnvVar, fldPath *field.Path) field.ErrorList ...@@ -968,6 +968,9 @@ func validateEnvVarValueFrom(ev api.EnvVar, fldPath *field.Path) field.ErrorList
case ev.ValueFrom.FieldRef != nil: case ev.ValueFrom.FieldRef != nil:
numSources++ numSources++
allErrs = append(allErrs, validateObjectFieldSelector(ev.ValueFrom.FieldRef, &validFieldPathExpressionsEnv, fldPath.Child("fieldRef"))...) allErrs = append(allErrs, validateObjectFieldSelector(ev.ValueFrom.FieldRef, &validFieldPathExpressionsEnv, fldPath.Child("fieldRef"))...)
case ev.ValueFrom.ConfigMapKeyRef != nil:
numSources++
allErrs = append(allErrs, validateConfigMapKeySelector(ev.ValueFrom.ConfigMapKeyRef, fldPath.Child("configMapKeyRef"))...)
} }
if len(ev.Value) != 0 && numSources != 0 { if len(ev.Value) != 0 && numSources != 0 {
...@@ -996,6 +999,21 @@ func validateObjectFieldSelector(fs *api.ObjectFieldSelector, expressions *sets. ...@@ -996,6 +999,21 @@ func validateObjectFieldSelector(fs *api.ObjectFieldSelector, expressions *sets.
return allErrs return allErrs
} }
func validateConfigMapKeySelector(s *api.ConfigMapKeySelector, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{}
if len(s.Name) == 0 {
allErrs = append(allErrs, field.Required(fldPath.Child("name"), ""))
}
if len(s.Key) == 0 {
allErrs = append(allErrs, field.Required(fldPath.Child("key"), ""))
} else if !IsSecretKey(s.Key) {
allErrs = append(allErrs, field.Invalid(fldPath.Child("key"), s.Key, fmt.Sprintf("must have at most %d characters and match regex %s", validation.DNS1123SubdomainMaxLength, SecretKeyFmt)))
}
return allErrs
}
func validateVolumeMounts(mounts []api.VolumeMount, volumes sets.String, fldPath *field.Path) field.ErrorList { func validateVolumeMounts(mounts []api.VolumeMount, volumes sets.String, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{} allErrs := field.ErrorList{}
......
...@@ -87,6 +87,14 @@ func deepCopy_api_CinderVolumeSource(in api.CinderVolumeSource, out *api.CinderV ...@@ -87,6 +87,14 @@ func deepCopy_api_CinderVolumeSource(in api.CinderVolumeSource, out *api.CinderV
return nil return nil
} }
func deepCopy_api_ConfigMapKeySelector(in api.ConfigMapKeySelector, out *api.ConfigMapKeySelector, c *conversion.Cloner) error {
if err := deepCopy_api_LocalObjectReference(in.LocalObjectReference, &out.LocalObjectReference, c); err != nil {
return err
}
out.Key = in.Key
return nil
}
func deepCopy_api_Container(in api.Container, out *api.Container, c *conversion.Cloner) error { func deepCopy_api_Container(in api.Container, out *api.Container, c *conversion.Cloner) error {
out.Name = in.Name out.Name = in.Name
out.Image = in.Image out.Image = in.Image
...@@ -239,6 +247,14 @@ func deepCopy_api_EnvVarSource(in api.EnvVarSource, out *api.EnvVarSource, c *co ...@@ -239,6 +247,14 @@ func deepCopy_api_EnvVarSource(in api.EnvVarSource, out *api.EnvVarSource, c *co
} else { } else {
out.FieldRef = nil out.FieldRef = nil
} }
if in.ConfigMapKeyRef != nil {
out.ConfigMapKeyRef = new(api.ConfigMapKeySelector)
if err := deepCopy_api_ConfigMapKeySelector(*in.ConfigMapKeyRef, out.ConfigMapKeyRef, c); err != nil {
return err
}
} else {
out.ConfigMapKeyRef = nil
}
return nil return nil
} }
...@@ -1661,6 +1677,7 @@ func init() { ...@@ -1661,6 +1677,7 @@ func init() {
deepCopy_api_Capabilities, deepCopy_api_Capabilities,
deepCopy_api_CephFSVolumeSource, deepCopy_api_CephFSVolumeSource,
deepCopy_api_CinderVolumeSource, deepCopy_api_CinderVolumeSource,
deepCopy_api_ConfigMapKeySelector,
deepCopy_api_Container, deepCopy_api_Container,
deepCopy_api_ContainerPort, deepCopy_api_ContainerPort,
deepCopy_api_DownwardAPIVolumeFile, deepCopy_api_DownwardAPIVolumeFile,
......
...@@ -116,6 +116,21 @@ func Convert_api_CinderVolumeSource_To_v1_CinderVolumeSource(in *api.CinderVolum ...@@ -116,6 +116,21 @@ func Convert_api_CinderVolumeSource_To_v1_CinderVolumeSource(in *api.CinderVolum
return autoConvert_api_CinderVolumeSource_To_v1_CinderVolumeSource(in, out, s) return autoConvert_api_CinderVolumeSource_To_v1_CinderVolumeSource(in, out, s)
} }
func autoConvert_api_ConfigMapKeySelector_To_v1_ConfigMapKeySelector(in *api.ConfigMapKeySelector, out *v1.ConfigMapKeySelector, s conversion.Scope) error {
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
defaulting.(func(*api.ConfigMapKeySelector))(in)
}
if err := Convert_api_LocalObjectReference_To_v1_LocalObjectReference(&in.LocalObjectReference, &out.LocalObjectReference, s); err != nil {
return err
}
out.Key = in.Key
return nil
}
func Convert_api_ConfigMapKeySelector_To_v1_ConfigMapKeySelector(in *api.ConfigMapKeySelector, out *v1.ConfigMapKeySelector, s conversion.Scope) error {
return autoConvert_api_ConfigMapKeySelector_To_v1_ConfigMapKeySelector(in, out, s)
}
func autoConvert_api_Container_To_v1_Container(in *api.Container, out *v1.Container, s conversion.Scope) error { func autoConvert_api_Container_To_v1_Container(in *api.Container, out *v1.Container, s conversion.Scope) error {
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
defaulting.(func(*api.Container))(in) defaulting.(func(*api.Container))(in)
...@@ -319,6 +334,15 @@ func autoConvert_api_EnvVarSource_To_v1_EnvVarSource(in *api.EnvVarSource, out * ...@@ -319,6 +334,15 @@ func autoConvert_api_EnvVarSource_To_v1_EnvVarSource(in *api.EnvVarSource, out *
} else { } else {
out.FieldRef = nil out.FieldRef = nil
} }
// unable to generate simple pointer conversion for api.ConfigMapKeySelector -> v1.ConfigMapKeySelector
if in.ConfigMapKeyRef != nil {
out.ConfigMapKeyRef = new(v1.ConfigMapKeySelector)
if err := Convert_api_ConfigMapKeySelector_To_v1_ConfigMapKeySelector(in.ConfigMapKeyRef, out.ConfigMapKeyRef, s); err != nil {
return err
}
} else {
out.ConfigMapKeyRef = nil
}
return nil return nil
} }
...@@ -1279,6 +1303,21 @@ func Convert_v1_CinderVolumeSource_To_api_CinderVolumeSource(in *v1.CinderVolume ...@@ -1279,6 +1303,21 @@ func Convert_v1_CinderVolumeSource_To_api_CinderVolumeSource(in *v1.CinderVolume
return autoConvert_v1_CinderVolumeSource_To_api_CinderVolumeSource(in, out, s) return autoConvert_v1_CinderVolumeSource_To_api_CinderVolumeSource(in, out, s)
} }
func autoConvert_v1_ConfigMapKeySelector_To_api_ConfigMapKeySelector(in *v1.ConfigMapKeySelector, out *api.ConfigMapKeySelector, s conversion.Scope) error {
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
defaulting.(func(*v1.ConfigMapKeySelector))(in)
}
if err := Convert_v1_LocalObjectReference_To_api_LocalObjectReference(&in.LocalObjectReference, &out.LocalObjectReference, s); err != nil {
return err
}
out.Key = in.Key
return nil
}
func Convert_v1_ConfigMapKeySelector_To_api_ConfigMapKeySelector(in *v1.ConfigMapKeySelector, out *api.ConfigMapKeySelector, s conversion.Scope) error {
return autoConvert_v1_ConfigMapKeySelector_To_api_ConfigMapKeySelector(in, out, s)
}
func autoConvert_v1_Container_To_api_Container(in *v1.Container, out *api.Container, s conversion.Scope) error { func autoConvert_v1_Container_To_api_Container(in *v1.Container, out *api.Container, s conversion.Scope) error {
if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found { if defaulting, found := s.DefaultingInterface(reflect.TypeOf(*in)); found {
defaulting.(func(*v1.Container))(in) defaulting.(func(*v1.Container))(in)
...@@ -1482,6 +1521,15 @@ func autoConvert_v1_EnvVarSource_To_api_EnvVarSource(in *v1.EnvVarSource, out *a ...@@ -1482,6 +1521,15 @@ func autoConvert_v1_EnvVarSource_To_api_EnvVarSource(in *v1.EnvVarSource, out *a
} else { } else {
out.FieldRef = nil out.FieldRef = nil
} }
// unable to generate simple pointer conversion for v1.ConfigMapKeySelector -> api.ConfigMapKeySelector
if in.ConfigMapKeyRef != nil {
out.ConfigMapKeyRef = new(api.ConfigMapKeySelector)
if err := Convert_v1_ConfigMapKeySelector_To_api_ConfigMapKeySelector(in.ConfigMapKeyRef, out.ConfigMapKeyRef, s); err != nil {
return err
}
} else {
out.ConfigMapKeyRef = nil
}
return nil return nil
} }
...@@ -4456,6 +4504,7 @@ func init() { ...@@ -4456,6 +4504,7 @@ func init() {
autoConvert_api_Capabilities_To_v1_Capabilities, autoConvert_api_Capabilities_To_v1_Capabilities,
autoConvert_api_CephFSVolumeSource_To_v1_CephFSVolumeSource, autoConvert_api_CephFSVolumeSource_To_v1_CephFSVolumeSource,
autoConvert_api_CinderVolumeSource_To_v1_CinderVolumeSource, autoConvert_api_CinderVolumeSource_To_v1_CinderVolumeSource,
autoConvert_api_ConfigMapKeySelector_To_v1_ConfigMapKeySelector,
autoConvert_api_ContainerPort_To_v1_ContainerPort, autoConvert_api_ContainerPort_To_v1_ContainerPort,
autoConvert_api_Container_To_v1_Container, autoConvert_api_Container_To_v1_Container,
autoConvert_api_DownwardAPIVolumeFile_To_v1_DownwardAPIVolumeFile, autoConvert_api_DownwardAPIVolumeFile_To_v1_DownwardAPIVolumeFile,
...@@ -4546,6 +4595,7 @@ func init() { ...@@ -4546,6 +4595,7 @@ func init() {
autoConvert_v1_Capabilities_To_api_Capabilities, autoConvert_v1_Capabilities_To_api_Capabilities,
autoConvert_v1_CephFSVolumeSource_To_api_CephFSVolumeSource, autoConvert_v1_CephFSVolumeSource_To_api_CephFSVolumeSource,
autoConvert_v1_CinderVolumeSource_To_api_CinderVolumeSource, autoConvert_v1_CinderVolumeSource_To_api_CinderVolumeSource,
autoConvert_v1_ConfigMapKeySelector_To_api_ConfigMapKeySelector,
autoConvert_v1_ContainerPort_To_api_ContainerPort, autoConvert_v1_ContainerPort_To_api_ContainerPort,
autoConvert_v1_Container_To_api_Container, autoConvert_v1_Container_To_api_Container,
autoConvert_v1_DownwardAPIVolumeFile_To_api_DownwardAPIVolumeFile, autoConvert_v1_DownwardAPIVolumeFile_To_api_DownwardAPIVolumeFile,
......
...@@ -123,6 +123,14 @@ func deepCopy_v1_CinderVolumeSource(in v1.CinderVolumeSource, out *v1.CinderVolu ...@@ -123,6 +123,14 @@ func deepCopy_v1_CinderVolumeSource(in v1.CinderVolumeSource, out *v1.CinderVolu
return nil return nil
} }
func deepCopy_v1_ConfigMapKeySelector(in v1.ConfigMapKeySelector, out *v1.ConfigMapKeySelector, c *conversion.Cloner) error {
if err := deepCopy_v1_LocalObjectReference(in.LocalObjectReference, &out.LocalObjectReference, c); err != nil {
return err
}
out.Key = in.Key
return nil
}
func deepCopy_v1_Container(in v1.Container, out *v1.Container, c *conversion.Cloner) error { func deepCopy_v1_Container(in v1.Container, out *v1.Container, c *conversion.Cloner) error {
out.Name = in.Name out.Name = in.Name
out.Image = in.Image out.Image = in.Image
...@@ -275,6 +283,14 @@ func deepCopy_v1_EnvVarSource(in v1.EnvVarSource, out *v1.EnvVarSource, c *conve ...@@ -275,6 +283,14 @@ func deepCopy_v1_EnvVarSource(in v1.EnvVarSource, out *v1.EnvVarSource, c *conve
} else { } else {
out.FieldRef = nil out.FieldRef = nil
} }
if in.ConfigMapKeyRef != nil {
out.ConfigMapKeyRef = new(v1.ConfigMapKeySelector)
if err := deepCopy_v1_ConfigMapKeySelector(*in.ConfigMapKeyRef, out.ConfigMapKeyRef, c); err != nil {
return err
}
} else {
out.ConfigMapKeyRef = nil
}
return nil return nil
} }
...@@ -1704,6 +1720,7 @@ func init() { ...@@ -1704,6 +1720,7 @@ func init() {
deepCopy_v1_Capabilities, deepCopy_v1_Capabilities,
deepCopy_v1_CephFSVolumeSource, deepCopy_v1_CephFSVolumeSource,
deepCopy_v1_CinderVolumeSource, deepCopy_v1_CinderVolumeSource,
deepCopy_v1_ConfigMapKeySelector,
deepCopy_v1_Container, deepCopy_v1_Container,
deepCopy_v1_ContainerPort, deepCopy_v1_ContainerPort,
deepCopy_v1_DownwardAPIVolumeFile, deepCopy_v1_DownwardAPIVolumeFile,
......
...@@ -39,6 +39,7 @@ import ( ...@@ -39,6 +39,7 @@ import (
"k8s.io/kubernetes/pkg/api/resource" "k8s.io/kubernetes/pkg/api/resource"
"k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/api/validation" "k8s.io/kubernetes/pkg/api/validation"
apiextensions "k8s.io/kubernetes/pkg/apis/extensions"
"k8s.io/kubernetes/pkg/client/cache" "k8s.io/kubernetes/pkg/client/cache"
"k8s.io/kubernetes/pkg/client/record" "k8s.io/kubernetes/pkg/client/record"
client "k8s.io/kubernetes/pkg/client/unversioned" client "k8s.io/kubernetes/pkg/client/unversioned"
...@@ -1365,9 +1366,11 @@ func (kl *Kubelet) makeEnvironmentVariables(pod *api.Pod, container *api.Contain ...@@ -1365,9 +1366,11 @@ func (kl *Kubelet) makeEnvironmentVariables(pod *api.Pod, container *api.Contain
// b. If a source is defined for an environment variable, resolve the source // b. If a source is defined for an environment variable, resolve the source
// 2. Create the container's environment in the order variables are declared // 2. Create the container's environment in the order variables are declared
// 3. Add remaining service environment vars // 3. Add remaining service environment vars
var (
tmpEnv := make(map[string]string) tmpEnv = make(map[string]string)
mappingFunc := expansion.MappingFuncFor(tmpEnv, serviceEnv) configMaps = make(map[string]*apiextensions.ConfigMap)
mappingFunc = expansion.MappingFuncFor(tmpEnv, serviceEnv)
)
for _, envVar := range container.Env { for _, envVar := range container.Env {
// Accesses apiserver+Pods. // Accesses apiserver+Pods.
// So, the master may set service env vars, or kubelet may. In case both are doing // So, the master may set service env vars, or kubelet may. In case both are doing
...@@ -1380,11 +1383,28 @@ func (kl *Kubelet) makeEnvironmentVariables(pod *api.Pod, container *api.Contain ...@@ -1380,11 +1383,28 @@ func (kl *Kubelet) makeEnvironmentVariables(pod *api.Pod, container *api.Contain
if runtimeVal != "" { if runtimeVal != "" {
// Step 1a: expand variable references // Step 1a: expand variable references
runtimeVal = expansion.Expand(runtimeVal, mappingFunc) runtimeVal = expansion.Expand(runtimeVal, mappingFunc)
} else if envVar.ValueFrom != nil && envVar.ValueFrom.FieldRef != nil { } else if envVar.ValueFrom != nil {
// Step 1b: resolve alternate env var sources // Step 1b: resolve alternate env var sources
runtimeVal, err = kl.podFieldSelectorRuntimeValue(envVar.ValueFrom.FieldRef, pod) switch {
if err != nil { case envVar.ValueFrom.FieldRef != nil:
return result, err runtimeVal, err = kl.podFieldSelectorRuntimeValue(envVar.ValueFrom.FieldRef, pod)
if err != nil {
return result, err
}
case envVar.ValueFrom.ConfigMapKeyRef != nil:
name := envVar.ValueFrom.ConfigMapKeyRef.Name
key := envVar.ValueFrom.ConfigMapKeyRef.Key
configMap, ok := configMaps[name]
if !ok {
configMap, err = kl.kubeClient.Extensions().ConfigMaps(pod.Namespace).Get(name)
if err != nil {
return result, err
}
}
runtimeVal, ok = configMap.Data[key]
if !ok {
return result, fmt.Errorf("Couldn't find key %v in ConfigMap %v/%v", key, pod.Namespace, name)
}
} }
} }
......
/*
Copyright 2014 The Kubernetes Authors All rights reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package e2e
import (
"fmt"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/apis/extensions"
"k8s.io/kubernetes/pkg/util"
. "github.com/onsi/ginkgo"
)
var _ = Describe("ConfigMap", func() {
f := NewFramework("configmap")
It("should be consumable via environment variable [Conformance]", func() {
name := "configmap-test-" + string(util.NewUUID())
configMap := &extensions.ConfigMap{
ObjectMeta: api.ObjectMeta{
Namespace: f.Namespace.Name,
Name: name,
},
Data: map[string]string{
"data-1": "value-1",
"data-2": "value-2",
"data-3": "value-3",
},
}
By(fmt.Sprintf("Creating configMap %v/%v", f.Namespace.Name, configMap.Name))
defer func() {
By("Cleaning up the configMap")
if err := f.Client.Extensions().ConfigMaps(f.Namespace.Name).Delete(configMap.Name); err != nil {
Failf("unable to delete configMap %v: %v", configMap.Name, err)
}
}()
var err error
if configMap, err = f.Client.Extensions().ConfigMaps(f.Namespace.Name).Create(configMap); err != nil {
Failf("unable to create test configMap %s: %v", configMap.Name, err)
}
pod := &api.Pod{
ObjectMeta: api.ObjectMeta{
Name: "pod-configmaps-" + string(util.NewUUID()),
},
Spec: api.PodSpec{
Containers: []api.Container{
{
Name: "env-test",
Image: "gcr.io/google_containers/busybox",
Command: []string{"sh", "-c", "env"},
Env: []api.EnvVar{
{
Name: "CONFIG_DATA_1",
ValueFrom: &api.EnvVarSource{
ConfigMapKeyRef: &api.ConfigMapKeySelector{
LocalObjectReference: api.LocalObjectReference{
Name: name,
},
Key: "data-1",
},
},
},
},
},
},
RestartPolicy: api.RestartPolicyNever,
},
}
testContainerOutput("consume configMaps", f.Client, pod, 0, []string{
"CONFIG_DATA_1=value-1",
}, f.Namespace.Name)
})
})
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment