Modify k8s template to support removal policy
Add a parameter 'minions_to_remove' that lists resources to be removed on stack update. The value will be passed to removal_policy of the 'kube_minions' resource group. Change-Id: I65a9473789742fdf8d05deaa229a6b8e4a9884e3 Partially-Implements: blueprint magnum-smart-bay-scale-down
This commit is contained in:
parent
8d9649bc1f
commit
2d153fc83d
|
@ -117,6 +117,9 @@ class OutputMapping(object):
|
||||||
self.heat_output = heat_output
|
self.heat_output = heat_output
|
||||||
|
|
||||||
def set_output(self, stack, bay):
|
def set_output(self, stack, bay):
|
||||||
|
if self.bay_attr is None:
|
||||||
|
return
|
||||||
|
|
||||||
for output in stack.outputs:
|
for output in stack.outputs:
|
||||||
if output['output_key'] == self.heat_output:
|
if output['output_key'] == self.heat_output:
|
||||||
setattr(bay, self.bay_attr, output['output_value'])
|
setattr(bay, self.bay_attr, output['output_value'])
|
||||||
|
@ -320,6 +323,8 @@ class AtomicK8sTemplateDefinition(BaseTemplateDefinition):
|
||||||
|
|
||||||
self.add_output('kube_master',
|
self.add_output('kube_master',
|
||||||
bay_attr='api_address')
|
bay_attr='api_address')
|
||||||
|
self.add_output('kube_minions',
|
||||||
|
bay_attr=None)
|
||||||
self.add_output('kube_minions_external',
|
self.add_output('kube_minions_external',
|
||||||
bay_attr='node_addresses')
|
bay_attr='node_addresses')
|
||||||
|
|
||||||
|
|
|
@ -94,6 +94,15 @@ parameters:
|
||||||
storage
|
storage
|
||||||
default: 25
|
default: 25
|
||||||
|
|
||||||
|
minions_to_remove:
|
||||||
|
type: comma_delimited_list
|
||||||
|
description: >
|
||||||
|
List of minions to be removed when doing an update. Individual minion may
|
||||||
|
be referenced several ways: (1) The resource name (e.g. ['1', '3']),
|
||||||
|
(2) The private IP address ['10.0.0.4', '10.0.0.6']. Note: the list should
|
||||||
|
be empty when doing an create.
|
||||||
|
default: []
|
||||||
|
|
||||||
resources:
|
resources:
|
||||||
|
|
||||||
master_wait_handle:
|
master_wait_handle:
|
||||||
|
@ -328,6 +337,7 @@ resources:
|
||||||
- extrouter_inside
|
- extrouter_inside
|
||||||
properties:
|
properties:
|
||||||
count: {get_param: number_of_minions}
|
count: {get_param: number_of_minions}
|
||||||
|
removal_policies: [{resource_list: {get_param: minions_to_remove}}]
|
||||||
resource_def:
|
resource_def:
|
||||||
type: kubenode-coreos.yaml
|
type: kubenode-coreos.yaml
|
||||||
properties:
|
properties:
|
||||||
|
@ -353,4 +363,3 @@ outputs:
|
||||||
|
|
||||||
kube_minions_external:
|
kube_minions_external:
|
||||||
value: {get_attr: [kube_minions, kube_node_external_ip]}
|
value: {get_attr: [kube_minions, kube_node_external_ip]}
|
||||||
|
|
||||||
|
|
|
@ -73,6 +73,15 @@ parameters:
|
||||||
constraints:
|
constraints:
|
||||||
- allowed_values: ["true", "false"]
|
- allowed_values: ["true", "false"]
|
||||||
|
|
||||||
|
minions_to_remove:
|
||||||
|
type: comma_delimited_list
|
||||||
|
description: >
|
||||||
|
List of minions to be removed when doing an update. Individual minion may
|
||||||
|
be referenced several ways: (1) The resource name (e.g. ['1', '3']),
|
||||||
|
(2) The private IP address ['10.0.0.4', '10.0.0.6']. Note: the list should
|
||||||
|
be empty when doing an create.
|
||||||
|
default: []
|
||||||
|
|
||||||
resources:
|
resources:
|
||||||
|
|
||||||
######################################################################
|
######################################################################
|
||||||
|
@ -207,6 +216,7 @@ resources:
|
||||||
depends_on: kube_master
|
depends_on: kube_master
|
||||||
properties:
|
properties:
|
||||||
count: {get_param: number_of_minions}
|
count: {get_param: number_of_minions}
|
||||||
|
removal_policies: [{resource_list: {get_param: minions_to_remove}}]
|
||||||
resource_def:
|
resource_def:
|
||||||
type: kubenode-fedora-ironic.yaml
|
type: kubenode-fedora-ironic.yaml
|
||||||
properties:
|
properties:
|
||||||
|
@ -227,4 +237,4 @@ outputs:
|
||||||
value: {get_attr: [kube_minions, kube_node_ip]}
|
value: {get_attr: [kube_minions, kube_node_ip]}
|
||||||
|
|
||||||
kube_minions_external:
|
kube_minions_external:
|
||||||
value: {get_attr: [kube_minions, kube_node_external_ip]}
|
value: {get_attr: [kube_minions, kube_node_external_ip]}
|
||||||
|
|
|
@ -87,10 +87,19 @@ parameters:
|
||||||
|
|
||||||
wait_condition_timeout:
|
wait_condition_timeout:
|
||||||
type: number
|
type: number
|
||||||
description : >
|
description: >
|
||||||
timeout for the Wait Conditions
|
timeout for the Wait Conditions
|
||||||
default: 6000
|
default: 6000
|
||||||
|
|
||||||
|
minions_to_remove:
|
||||||
|
type: comma_delimited_list
|
||||||
|
description: >
|
||||||
|
List of minions to be removed when doing an update. Individual minion may
|
||||||
|
be referenced several ways: (1) The resource name (e.g. ['1', '3']),
|
||||||
|
(2) The private IP address ['10.0.0.4', '10.0.0.6']. Note: the list should
|
||||||
|
be empty when doing an create.
|
||||||
|
default: []
|
||||||
|
|
||||||
resources:
|
resources:
|
||||||
|
|
||||||
master_wait_handle:
|
master_wait_handle:
|
||||||
|
@ -307,6 +316,7 @@ resources:
|
||||||
- master_wait_condition
|
- master_wait_condition
|
||||||
properties:
|
properties:
|
||||||
count: {get_param: number_of_minions}
|
count: {get_param: number_of_minions}
|
||||||
|
removal_policies: [{resource_list: {get_param: minions_to_remove}}]
|
||||||
resource_def:
|
resource_def:
|
||||||
type: kubeminion.yaml
|
type: kubeminion.yaml
|
||||||
properties:
|
properties:
|
||||||
|
|
|
@ -221,5 +221,9 @@ outputs:
|
||||||
|
|
||||||
kube_minion_ip:
|
kube_minion_ip:
|
||||||
value: {get_attr: [kube_minion_eth0, fixed_ips, 0, ip_address]}
|
value: {get_attr: [kube_minion_eth0, fixed_ips, 0, ip_address]}
|
||||||
|
|
||||||
kube_minion_external_ip:
|
kube_minion_external_ip:
|
||||||
value: {get_attr: [kube_minion_floating, floating_ip_address]}
|
value: {get_attr: [kube_minion_floating, floating_ip_address]}
|
||||||
|
|
||||||
|
OS::stack_id:
|
||||||
|
value: {get_attr: [kube_minion_eth0, fixed_ips, 0, ip_address]}
|
||||||
|
|
|
@ -249,3 +249,5 @@ outputs:
|
||||||
kube_node_external_ip:
|
kube_node_external_ip:
|
||||||
value: {get_attr: [kube_node_floating, floating_ip_address]}
|
value: {get_attr: [kube_node_floating, floating_ip_address]}
|
||||||
|
|
||||||
|
OS::stack_id:
|
||||||
|
value: {get_attr: [kube_node_eth0, fixed_ips, 0, ip_address]}
|
||||||
|
|
|
@ -173,3 +173,5 @@ outputs:
|
||||||
kube_node_external_ip:
|
kube_node_external_ip:
|
||||||
value: {get_attr: [kube_node_floating, floating_ip_address]}
|
value: {get_attr: [kube_node_floating, floating_ip_address]}
|
||||||
|
|
||||||
|
OS::stack_id:
|
||||||
|
value: {get_attr: [kube_node, networks, private, 0]}
|
||||||
|
|
|
@ -284,7 +284,10 @@ class TestBayConductorWithK8s(base.TestCase):
|
||||||
"output_key": "kube_minions_external"},
|
"output_key": "kube_minions_external"},
|
||||||
{"output_value": expected_api_address,
|
{"output_value": expected_api_address,
|
||||||
"description": "No description given",
|
"description": "No description given",
|
||||||
"output_key": "kube_master"}
|
"output_key": "kube_master"},
|
||||||
|
{"output_value": ['any', 'output'],
|
||||||
|
"description": "No description given",
|
||||||
|
"output_key": "kube_minions"}
|
||||||
]
|
]
|
||||||
mock_stack = mock.MagicMock()
|
mock_stack = mock.MagicMock()
|
||||||
mock_stack.outputs = outputs
|
mock_stack.outputs = outputs
|
||||||
|
|
Loading…
Reference in New Issue