diff options
| author | Naveed Massjouni <naveedm9@gmail.com> | 2012-02-14 19:46:19 +0000 |
|---|---|---|
| committer | Naveed Massjouni <naveedm9@gmail.com> | 2012-02-18 00:35:28 +0000 |
| commit | 0e1ceb4d753f2b4cd3b6aaee5e3f68caaf424c57 (patch) | |
| tree | fb68c89c50f9f8d80c745b314cb12e3ac8a46bb3 /nova/compute | |
| parent | 63c0677b0fe937ab565322cd719c3bbb39ff0a56 (diff) | |
| download | nova-0e1ceb4d753f2b4cd3b6aaee5e3f68caaf424c57.tar.gz nova-0e1ceb4d753f2b4cd3b6aaee5e3f68caaf424c57.tar.xz nova-0e1ceb4d753f2b4cd3b6aaee5e3f68caaf424c57.zip | |
Setting access ip values on server create.
Change-Id: Id67c5e9d7bb00227e88ecbc2ffb0e772fcd69066
Diffstat (limited to 'nova/compute')
| -rw-r--r-- | nova/compute/api.py | 1 | ||||
| -rw-r--r-- | nova/compute/manager.py | 29 |
2 files changed, 30 insertions, 0 deletions
diff --git a/nova/compute/api.py b/nova/compute/api.py index bf03cb10b..edadf1978 100644 --- a/nova/compute/api.py +++ b/nova/compute/api.py @@ -565,6 +565,7 @@ class API(base.Base): "admin_password": admin_password, "injected_files": injected_files, "requested_networks": requested_networks, + "is_first_time": True, "filter_properties": filter_properties}}) def _check_create_policies(self, context, availability_zone, diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 74f9af3f9..f31a0d2e4 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -405,6 +405,7 @@ class ComputeManager(manager.SchedulerDependentManager): requested_networks=None, injected_files=[], admin_password=None, + is_first_time=False, **kwargs): """Launch a new instance with specified options.""" context = context.elevated() @@ -425,6 +426,10 @@ class ComputeManager(manager.SchedulerDependentManager): with utils.save_and_reraise_exception(): self._deallocate_network(context, instance) + if (is_first_time and not instance['access_ip_v4'] + and not instance['access_ip_v6']): + self._update_access_ip(context, instance, network_info) + self._notify_about_instance_usage(instance, "create.end", network_info=network_info) @@ -440,6 +445,30 @@ class ComputeManager(manager.SchedulerDependentManager): with utils.save_and_reraise_exception(): self._set_instance_error_state(context, instance_uuid) + def _update_access_ip(self, context, instance, nw_info): + """Update the access ip values for a given instance. + + If FLAGS.default_access_ip_network_name is set, this method will + grab the corresponding network and set the access ip values + accordingly. Note that when there are multiple ips to choose from, + an arbitrary one will be chosen. + """ + + network_name = FLAGS.default_access_ip_network_name + if not network_name: + return + + update_info = {} + for vif in nw_info: + if vif['network']['label'] == network_name: + for ip in vif.fixed_ips(): + if ip['version'] == 4: + update_info['access_ip_v4'] = ip['address'] + if ip['version'] == 6: + update_info['access_ip_v6'] = ip['address'] + if update_info: + self.db.instance_update(context, instance.uuid, update_info) + def _check_instance_not_already_created(self, context, instance): """Ensure an instance with the same name is not already present.""" if self.driver.instance_exists(instance['name']): |
