Merge "Change the DB create procedure of capsule create"

This commit is contained in:
Zuul 2018-05-14 11:32:21 +00:00 committed by Gerrit Code Review
commit c714b11fdd
3 changed files with 28 additions and 18 deletions

View File

@ -30,9 +30,11 @@ from zun.common.i18n import _
from zun.common import name_generator
from zun.common import policy
from zun.common import utils
import zun.conf
from zun import objects
from zun.volume import cinder_api as cinder
CONF = zun.conf.CONF
LOG = logging.getLogger(__name__)
@ -179,13 +181,17 @@ class CapsuleController(base.Controller):
sandbox_container.user_id = context.user_id
name = self._generate_name_for_capsule_sandbox(new_capsule)
sandbox_container.name = name
sandbox_container.capsule_uuid = new_capsule.id
sandbox_container.capsule_id = new_capsule.id
sandbox_container.image = CONF.sandbox_image
sandbox_container.image_driver = CONF.sandbox_image_driver
sandbox_container.image_pull_policy = \
CONF.sandbox_image_pull_policy
sandbox_container.status = consts.CREATING
sandbox_container.create(context)
new_capsule.containers_uuids = [sandbox_container.uuid]
container_num = len(containers_spec)
for k in range(container_num):
container_dict = containers_spec[k]
for container_spec in containers_spec:
container_dict = container_spec
container_dict['project_id'] = context.project_id
container_dict['user_id'] = context.user_id
name = self._generate_name_for_capsule_container(new_capsule)

View File

@ -1056,7 +1056,6 @@ class Manager(periodic_task.PeriodicTasks):
containers = objects.Container.list(ctx)
self.driver.update_containers_states(ctx, containers)
capsules = objects.Capsule.list(ctx)
for capsule in capsules:
container = objects.Container.get_by_uuid(
@ -1088,38 +1087,42 @@ class Manager(periodic_task.PeriodicTasks):
:param requested_volumes: the volume that capsule need
:param limits: no use field now.
"""
capsule.containers[0].image = CONF.sandbox_image
capsule.containers[0].image_driver = CONF.sandbox_image_driver
capsule.containers[0].image_pull_policy = \
CONF.sandbox_image_pull_policy
capsule.containers[0].save(context)
# NOTE(kevinz): Here create the sandbox container for the
# first function container --> capsule.containers[1].
# capsule.containers[0] will only be used as recording the
# the sandbox_container info, and the sandbox_id of this contianer
# is itself.
sandbox = self._create_sandbox(context,
capsule.containers[0],
requested_networks)
sandbox_id = capsule.containers[0].get_sandbox_id()
capsule.containers[0].task_state = None
capsule.containers[0].status = consts.RUNNING
sandbox_id = capsule.containers[0].get_sandbox_id()
capsule.containers[0].container_id = sandbox_id
capsule.containers[0].set_sandbox_id(sandbox_id)
capsule.containers[0].save(context)
capsule.addresses = capsule.containers[0].addresses
capsule.save(context)
count = len(capsule.containers)
for k in range(1, count):
for container in capsule.containers[1:]:
container_requested_volumes = []
capsule.containers[k].set_sandbox_id(sandbox_id)
capsule.containers[k].addresses = capsule.containers[0].addresses
container_name = capsule.containers[k].name
container.set_sandbox_id(sandbox_id)
container.addresses = capsule.containers[0].addresses
container_name = container.name
for volume in requested_volumes:
if volume.get(container_name, None):
container_requested_volumes.append(
volume.get(container_name))
self._attach_volumes(context, capsule.containers[k],
self._attach_volumes(context, container,
container_requested_volumes)
# Make sure the sandbox_id is set into meta. If not,
# when container delete, it will delete container network
# without considering sandbox.
container.save(context)
# Add volume assignment
created_container = \
self._do_container_create_base(context,
capsule.containers[k],
container,
requested_networks,
container_requested_volumes,
sandbox=sandbox,

View File

@ -270,6 +270,7 @@ class Container(base.ZunPersistentObject, base.ZunObject):
self.meta = {'sandbox_id': sandbox_id}
else:
self.meta['sandbox_id'] = sandbox_id
self._changed_fields.add('meta')
def obj_load_attr(self, attrname):
if attrname not in CONTAINER_OPTIONAL_ATTRS: