diff --git a/template/capsule/capsule-volume.yaml b/template/capsule/capsule-volume.yaml index 208805969..ae9d5ceea 100644 --- a/template/capsule/capsule-volume.yaml +++ b/template/capsule/capsule-volume.yaml @@ -6,6 +6,7 @@ metadata: labels: foo: bar restartPolicy: always +availabilityZone: nova spec: containers: - image: test diff --git a/template/capsule/capsule.yaml b/template/capsule/capsule.yaml index c5a1d5455..251448940 100644 --- a/template/capsule/capsule.yaml +++ b/template/capsule/capsule.yaml @@ -7,6 +7,7 @@ metadata: app: web app1: web1 restartPolicy: always +availabilityZone: nova spec: containers: - image: ubuntu diff --git a/zun/api/controllers/v1/capsules.py b/zun/api/controllers/v1/capsules.py index d5efa1f3a..4d14dcadc 100644 --- a/zun/api/controllers/v1/capsules.py +++ b/zun/api/controllers/v1/capsules.py @@ -167,6 +167,11 @@ class CapsuleController(base.Controller): new_capsule.meta_name = metadata_info.get('name', None) new_capsule.meta_labels = metadata_info.get('labels', None) + extra_spec = {} + az_info = template_json.get('availabilityZone') + if az_info: + extra_spec['availability_zone'] = az_info + # Generate Object for infra container sandbox_container = objects.Container(context) sandbox_container.project_id = context.project_id @@ -245,7 +250,7 @@ class CapsuleController(base.Controller): new_capsule.memory = str(capsule_need_memory) + 'M' new_capsule.save(context) compute_api.capsule_create(context, new_capsule, requested_networks, - requested_volumes) + requested_volumes, extra_spec) # Set the HTTP Location Header pecan.response.location = link.build_url('capsules', new_capsule.uuid) diff --git a/zun/api/validation/parameter_types.py b/zun/api/validation/parameter_types.py index 9c2e866ed..e219d3534 100644 --- a/zun/api/validation/parameter_types.py +++ b/zun/api/validation/parameter_types.py @@ -472,6 +472,7 @@ capsule_template = { "metadata": capsule_metadata, "restartPolicy": capsule_restart_policy, "spec": capsule_spec, + "availabilityZone": availability_zone, }, "additionalProperties": False, "required": ['kind', 'spec', 'metadata'] diff --git a/zun/compute/api.py b/zun/compute/api.py index f4c210315..da4c8f846 100644 --- a/zun/compute/api.py +++ b/zun/compute/api.py @@ -187,8 +187,8 @@ class API(object): return self.rpcapi.image_search(context, image, image_driver, exact_match, *args) - def capsule_create(self, context, new_capsule, requested_networks=None, - requested_volumes=None, extra_spec=None): + def capsule_create(self, context, new_capsule, requested_networks, + requested_volumes, extra_spec): try: host_state = self._schedule_container(context, new_capsule, extra_spec)