Merge "Fix provider_net resource update"

This commit is contained in:
Jenkins 2016-01-13 22:40:38 +00:00 committed by Gerrit Code Review
commit 11f46fc920
2 changed files with 35 additions and 23 deletions

View File

@ -11,8 +11,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import six
from heat.common import exception
from heat.common.i18n import _
from heat.engine import attributes
@ -105,13 +103,19 @@ class ProviderNet(net.Net):
props['provider:' + key] = props.pop(key)
@staticmethod
def prepare_provider_properties(self, props):
self.add_provider_extension(props, self.PROVIDER_NETWORK_TYPE)
self.add_provider_extension(props, self.PROVIDER_PHYSICAL_NETWORK)
if self.PROVIDER_SEGMENTATION_ID in six.iterkeys(props):
self.add_provider_extension(props, self.PROVIDER_SEGMENTATION_ID)
def prepare_provider_properties(props):
if ProviderNet.PROVIDER_NETWORK_TYPE in props:
ProviderNet.add_provider_extension(
props,
ProviderNet.PROVIDER_NETWORK_TYPE)
if ProviderNet.PROVIDER_PHYSICAL_NETWORK in props:
ProviderNet.add_provider_extension(
props,
ProviderNet.PROVIDER_PHYSICAL_NETWORK)
if ProviderNet.PROVIDER_SEGMENTATION_ID in props:
ProviderNet.add_provider_extension(
props,
ProviderNet.PROVIDER_SEGMENTATION_ID)
def handle_create(self):
"""Creates the resource with provided properties.
@ -122,7 +126,7 @@ class ProviderNet(net.Net):
self.properties,
self.physical_resource_name())
self.prepare_provider_properties(self, props)
ProviderNet.prepare_provider_properties(props)
prov_net = self.client().create_network({'network': props})['network']
self.resource_id_set(prov_net['id'])
@ -132,11 +136,13 @@ class ProviderNet(net.Net):
Adds 'provider:' extension to the required properties during update.
"""
props = self.prepare_update_properties(json_snippet)
self.prepare_provider_properties(self, props)
self.client().update_network(self.resource_id, {'network': props})
if prop_diff:
ProviderNet.prepare_provider_properties(prop_diff)
if (self.NAME in prop_diff and
prop_diff[self.NAME] is None):
prop_diff[self.NAME] = self.physical_resource_name()
self.client().update_network(self.resource_id,
{'network': prop_diff})
def resource_mapping():

View File

@ -150,14 +150,17 @@ class NeutronProviderNetTest(common.HeatTestCase):
neutronclient.Client.update_network(
'fc68ea2c-b60b-4b4f-bd82-94ec81110766',
{'network': {
'shared': True,
'name': 'prov_net',
'admin_state_up': True,
'provider:network_type': 'vlan',
'provider:physical_network': 'physnet_1',
'provider:segmentation_id': '102'
}}).AndReturn(None)
neutronclient.Client.update_network(
'fc68ea2c-b60b-4b4f-bd82-94ec81110766',
{'network': {
'name': utils.PhysName('test_stack', 'provider_net')
}}).AndReturn(None)
self.m.ReplayAll()
rsrc.validate()
@ -165,15 +168,18 @@ class NeutronProviderNetTest(common.HeatTestCase):
scheduler.TaskRunner(rsrc.create)()
self.assertEqual((rsrc.CREATE, rsrc.COMPLETE), rsrc.state)
props = {
"name": "prov_net",
"shared": True,
"admin_state_up": True,
prop_diff = {
"network_type": "vlan",
"physical_network": "physnet_1",
"segmentation_id": "102"
}
update_snippet = rsrc_defn.ResourceDefinition(rsrc.name, rsrc.type(),
props)
prop_diff)
self.assertIsNone(rsrc.handle_update(update_snippet, {}, prop_diff))
# name=None
self.assertIsNone(rsrc.handle_update(update_snippet, {},
{'name': None}))
# no prop_diff
self.assertIsNone(rsrc.handle_update(update_snippet, {}, {}))
self.m.VerifyAll()