Merge "Don't call neutron when there is no prop_diff"
This commit is contained in:
@@ -112,7 +112,7 @@ class Subnet(neutron.NeutronResource):
|
||||
),
|
||||
VALUE_SPECS: properties.Schema(
|
||||
properties.Schema.MAP,
|
||||
_('Extra parameters to include in the creation request.'),
|
||||
_('Extra parameters to include in the request.'),
|
||||
default={},
|
||||
update_allowed=True
|
||||
),
|
||||
@@ -345,12 +345,17 @@ class Subnet(neutron.NeutronResource):
|
||||
return self.client().show_subnet(self.resource_id)['subnet']
|
||||
|
||||
def handle_update(self, json_snippet, tmpl_diff, prop_diff):
|
||||
props = self.prepare_update_properties(json_snippet)
|
||||
if (self.ALLOCATION_POOLS in prop_diff and
|
||||
self.ALLOCATION_POOLS not in props):
|
||||
props[self.ALLOCATION_POOLS] = []
|
||||
self.client().update_subnet(
|
||||
self.resource_id, {'subnet': props})
|
||||
if prop_diff:
|
||||
if self.VALUE_SPECS in prop_diff:
|
||||
self.merge_value_specs(prop_diff)
|
||||
if (self.ALLOCATION_POOLS in prop_diff and
|
||||
prop_diff[self.ALLOCATION_POOLS] is None):
|
||||
prop_diff[self.ALLOCATION_POOLS] = []
|
||||
if (self.NAME in prop_diff and
|
||||
prop_diff[self.NAME] is None):
|
||||
prop_diff[self.NAME] = self.physical_resource_name()
|
||||
self.client().update_subnet(
|
||||
self.resource_id, {'subnet': prop_diff})
|
||||
|
||||
|
||||
def resource_mapping():
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import copy
|
||||
import mox
|
||||
from neutronclient.common import exceptions as qe
|
||||
from neutronclient.neutron import v2_0 as neutronV20
|
||||
@@ -137,6 +138,8 @@ class NeutronSubnetTest(common.HeatTestCase):
|
||||
'None',
|
||||
cmd_resource=None,
|
||||
).AndReturn('None')
|
||||
neutronclient.Client.update_subnet(
|
||||
'91e47a57-7508-46fe-afc9-fc454e8580e1', update_props)
|
||||
stack = utils.parse_stack(t)
|
||||
rsrc = self.create_subnet(t, stack, 'sub_net')
|
||||
self.m.ReplayAll()
|
||||
@@ -155,26 +158,93 @@ class NeutronSubnetTest(common.HeatTestCase):
|
||||
|
||||
self.assertIn(stack['port'], stack.dependencies[stack['sub_net']])
|
||||
self.assertIn(stack['port2'], stack.dependencies[stack['sub_net']])
|
||||
props = {
|
||||
"name": 'mysubnet',
|
||||
"network_id": cfn_funcs.ResourceRef(stack, "get_resource", "net"),
|
||||
"tenant_id": "c1210485b2424d48804aad5d39c61b8f",
|
||||
"ip_version": 4,
|
||||
"cidr": "10.0.3.0/24",
|
||||
"allocation_pools": [
|
||||
{"start": "10.0.3.20", "end": "10.0.3.100"},
|
||||
{"start": "10.0.3.110", "end": "10.0.3.200"}],
|
||||
"dns_nameservers": ["8.8.8.8", "192.168.1.254"],
|
||||
"host_routes": [
|
||||
{"destination": "192.168.1.0/24", "nexthop": "194.168.1.2"}
|
||||
]
|
||||
|
||||
|
||||
}
|
||||
update_snippet = rsrc_defn.ResourceDefinition(rsrc.name, rsrc.type(),
|
||||
props)
|
||||
# rsrc.handle_update(update_snippet, {}, {})
|
||||
scheduler.TaskRunner(rsrc.update, update_snippet)()
|
||||
update_props['subnet'])
|
||||
rsrc.handle_update(update_snippet, {}, update_props['subnet'])
|
||||
|
||||
# with name None
|
||||
del update_props['subnet']['name']
|
||||
rsrc.handle_update(update_snippet, {}, update_props['subnet'])
|
||||
|
||||
# with no prop_diff
|
||||
rsrc.handle_update(update_snippet, {}, {})
|
||||
|
||||
self.assertIsNone(scheduler.TaskRunner(rsrc.delete)())
|
||||
rsrc.state_set(rsrc.CREATE, rsrc.COMPLETE, 'to delete again')
|
||||
self.assertIsNone(scheduler.TaskRunner(rsrc.delete)())
|
||||
self.m.VerifyAll()
|
||||
|
||||
def test_update_subnet_with_value_specs(self):
|
||||
update_props = {'subnet': {
|
||||
'name': 'mysubnet',
|
||||
'value_specs': {
|
||||
'enable_dhcp': True,
|
||||
}
|
||||
}}
|
||||
update_props_merged = copy.deepcopy(update_props)
|
||||
update_props_merged['subnet']['enable_dhcp'] = True
|
||||
del update_props_merged['subnet']['value_specs']
|
||||
|
||||
t = self._test_subnet(u_props=update_props_merged)
|
||||
neutronV20.find_resourceid_by_name_or_id(
|
||||
mox.IsA(neutronclient.Client),
|
||||
'network',
|
||||
'None',
|
||||
cmd_resource=None,
|
||||
).AndReturn('None')
|
||||
stack = utils.parse_stack(t)
|
||||
rsrc = self.create_subnet(t, stack, 'sub_net')
|
||||
self.m.ReplayAll()
|
||||
scheduler.TaskRunner(rsrc.create)()
|
||||
self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state)
|
||||
rsrc.validate()
|
||||
ref_id = rsrc.FnGetRefId()
|
||||
self.assertEqual('91e47a57-7508-46fe-afc9-fc454e8580e1', ref_id)
|
||||
self.assertIsNone(rsrc.FnGetAtt('network_id'))
|
||||
self.assertEqual('fc68ea2c-b60b-4b4f-bd82-94ec81110766',
|
||||
rsrc.FnGetAtt('network_id'))
|
||||
self.assertEqual('8.8.8.8', rsrc.FnGetAtt('dns_nameservers')[0])
|
||||
|
||||
update_snippet = rsrc_defn.ResourceDefinition(rsrc.name, rsrc.type(),
|
||||
update_props['subnet'])
|
||||
rsrc.handle_update(update_snippet, {}, update_props['subnet'])
|
||||
|
||||
self.assertIsNone(scheduler.TaskRunner(rsrc.delete)())
|
||||
rsrc.state_set(rsrc.CREATE, rsrc.COMPLETE, 'to delete again')
|
||||
self.assertIsNone(scheduler.TaskRunner(rsrc.delete)())
|
||||
self.m.VerifyAll()
|
||||
|
||||
def test_update_subnet_with_no_name(self):
|
||||
update_props = {'subnet': {
|
||||
'name': None,
|
||||
}}
|
||||
update_props_name = {'subnet': {
|
||||
'name': utils.PhysName('test_stack', 'test_subnet'),
|
||||
}}
|
||||
t = self._test_subnet(u_props=update_props_name)
|
||||
neutronV20.find_resourceid_by_name_or_id(
|
||||
mox.IsA(neutronclient.Client),
|
||||
'network',
|
||||
'None',
|
||||
cmd_resource=None,
|
||||
).AndReturn('None')
|
||||
|
||||
stack = utils.parse_stack(t)
|
||||
rsrc = self.create_subnet(t, stack, 'sub_net')
|
||||
self.m.ReplayAll()
|
||||
scheduler.TaskRunner(rsrc.create)()
|
||||
self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state)
|
||||
rsrc.validate()
|
||||
ref_id = rsrc.FnGetRefId()
|
||||
self.assertEqual('91e47a57-7508-46fe-afc9-fc454e8580e1', ref_id)
|
||||
self.assertIsNone(rsrc.FnGetAtt('network_id'))
|
||||
self.assertEqual('fc68ea2c-b60b-4b4f-bd82-94ec81110766',
|
||||
rsrc.FnGetAtt('network_id'))
|
||||
self.assertEqual('8.8.8.8', rsrc.FnGetAtt('dns_nameservers')[0])
|
||||
|
||||
update_snippet = rsrc_defn.ResourceDefinition(rsrc.name, rsrc.type(),
|
||||
update_props['subnet'])
|
||||
rsrc.handle_update(update_snippet, {}, update_props['subnet'])
|
||||
|
||||
self.assertIsNone(scheduler.TaskRunner(rsrc.delete)())
|
||||
rsrc.state_set(rsrc.CREATE, rsrc.COMPLETE, 'to delete again')
|
||||
|
||||
Reference in New Issue
Block a user