コード例 #1
0
ファイル: plan.py プロジェクト: matbu/tripleo-common
    def run(self):
        swift = self.get_object_client()
        mistral = self.get_workflow_client()
        env_data = {
            'name': self.container,
        }

        if not pattern_validator(constants.PLAN_NAME_PATTERN, self.container):
            message = ("Unable to create plan. The plan name must "
                       "only contain letters, numbers or dashes")
            return mistral_workflow_utils.Result(error=message)

        # Check to see if an environment with that name already exists
        try:
            mistral.environments.get(self.container)
        except mistralclient_base.APIException:
            # The environment doesn't exist, as expected. Proceed.
            pass
        else:
            message = ("Unable to create plan. The Mistral environment "
                       "already exists")
            return mistral_workflow_utils.Result(error=message)

        # Get plan environment from Swift
        try:
            plan_env_dict, plan_env_missing = self.get_plan_env_dict(
                swift, self.container)
        except exception.PlanOperationError as err:
            return mistral_workflow_utils.Result(error=six.text_type(err))

        # Create mistral environment
        env_data['variables'] = json.dumps(plan_env_dict, sort_keys=True)
        try:
            mistral.environments.create(**env_data)
        except Exception as err:
            message = "Error occurred creating plan: %s" % err
            return mistral_workflow_utils.Result(error=message)

        # Delete the plan environment file from Swift, as it is no long needed.
        # (If we were to leave the environment file behind, we would have to
        # take care to keep it in sync with the actual contents of the Mistral
        # environment. To avoid that, we simply delete it.)
        # TODO(akrivoka): Once the 'Deployment plan management changes' spec
        # (https://review.openstack.org/#/c/438918/) is implemented, we will no
        # longer use Mistral environments for holding the plan data, so this
        # code can go away.
        if not plan_env_missing:
            try:
                swift.delete_object(self.container, constants.PLAN_ENVIRONMENT)
            except swiftexceptions.ClientException as err:
                message = "Error deleting file from container: %s" % err
                return mistral_workflow_utils.Result(error=message)
コード例 #2
0
ファイル: plan.py プロジェクト: allenjseb/tripleo-common
    def run(self, context):
        oc = self.get_object_client(context)

        # checks to see if a container has a valid name
        if not pattern_validator(constants.PLAN_NAME_PATTERN, self.container):
            message = ("Unable to create plan. The plan name must "
                       "only contain letters, numbers or dashes")
            return actions.Result(error=message)

        # checks to see if a container with that name exists
        if self.container in [container["name"] for container in
                              oc.get_account()[1]]:
            result_string = ("A container with the name %s already"
                             " exists.") % self.container
            return actions.Result(error=result_string)
        oc.put_container(self.container, headers=default_container_headers)
コード例 #3
0
ファイル: plan.py プロジェクト: openstack/tripleo-common
    def run(self, context):
        oc = self.get_object_client(context)

        # checks to see if a container has a valid name
        if not pattern_validator(constants.PLAN_NAME_PATTERN, self.container):
            message = ("Unable to create plan. The plan name must "
                       "only contain letters, numbers or dashes")
            return actions.Result(error=message)

        # checks to see if a container with that name exists
        if self.container in [container["name"] for container in
                              oc.get_account()[1]]:
            result_string = ("A container with the name %s already"
                             " exists.") % self.container
            return actions.Result(error=result_string)
        oc.put_container(self.container, headers=default_container_headers)
コード例 #4
0
 def test_invalid_patterns(self):
     self.assertFalse(validations.pattern_validator("^$", "foo"))
     self.assertFalse(
         validations.pattern_validator(PLAN_NAME_PATTERN, "foo_1"))
コード例 #5
0
 def test_valid_patterns(self):
     self.assertTrue(validations.pattern_validator("^$", ""))
     self.assertTrue(validations.pattern_validator(PLAN_NAME_PATTERN,
                                                   "foo"))
     self.assertTrue(
         validations.pattern_validator(PLAN_NAME_PATTERN, "Foo-1"))
コード例 #6
0
 def test_invalid_patterns(self):
     self.assertFalse(
         validations.pattern_validator("^$", "foo"))
     self.assertFalse(
         validations.pattern_validator(PLAN_NAME_PATTERN, "foo_1"))
コード例 #7
0
 def test_valid_patterns(self):
     self.assertTrue(validations.pattern_validator("^$", ""))
     self.assertTrue(
         validations.pattern_validator(PLAN_NAME_PATTERN, "foo"))
     self.assertTrue(
         validations.pattern_validator(PLAN_NAME_PATTERN, "Foo-1"))