コード例 #1
0
    def __130_updating_initialized_project_is_successful(self):

        with self.spy_decorator(
                resource_manager.hook.HookContext.call_module_handlers
        ) as mock_call_module_handlers:

            self.lmbr_aws('project', 'update-framework-version',
                          '--confirm-aws-usage', '--confirm-security-change',
                          '--confirm-resource-deletion')

            mock_call_module_handlers.assert_any_call(
                'resource-manager-code/update.py',
                'before_framework_version_updated',
                kwargs={
                    'from_version': Version('1.1.2'),
                    'to_version': self.CURRENT_FRAMEWORK_VERSION
                })

            mock_call_module_handlers.assert_any_call(
                'resource-manager-code/update.py',
                'after_framework_version_updated',
                kwargs={
                    'from_version': Version('1.1.2'),
                    'to_version': self.CURRENT_FRAMEWORK_VERSION
                })
コード例 #2
0
    def __do_lmbr_gems_create(self, lmbr_exe_path_override, gem_name,
                              relative_directory_path, asset_only, version):
        gems_file_content = self.__get_gems_file_content()
        gem_names = []
        for gem in gems_file_content.get('Gems', []):
            if gem.get('_comment', ''):
                gem_names.append(gem['_comment'])
        if gem_name in gem_names:
            raise HandledError(
                'Cloud gems named {} exists in the project. Cloud gems must have unique names within a project.'
                .format(gem_name))

        if relative_directory_path is None:
            relative_directory_path = os.path.join(
                gem_name, 'v' + str(Version(version).major))

        full_directory_path = os.path.join(
            self.__context.config.root_directory_path, 'Gems',
            relative_directory_path)

        lmbr_exe_path = self.__get_lmbr_exe_path(lmbr_exe_path_override)
        args = [
            lmbr_exe_path, 'gems', 'create', gem_name, '-version', version,
            '-out-folder', relative_directory_path
        ]
        if asset_only:
            args.append('-asset-only')

        try:
            self.__execute(args)
        except Exception as e:
            raise HandledError('Gem creation failed. {}'.format(e.message))

        return full_directory_path
コード例 #3
0
    def test_cmp(self):
        v = Version("2.2.2")

        self.assertTrue(v == "2.2.2")
        self.assertTrue(v == Version("2.2.2"))

        self.assertTrue(v != "1.2.2")
        self.assertTrue(v != "2.1.2")
        self.assertTrue(v != "2.2.1")

        self.assertTrue(v > "2.2.1")
        self.assertTrue(v > "2.1.2")
        self.assertTrue(v > "2.0.0")
        self.assertTrue(v > "1.2.2")

        self.assertTrue(v < "2.2.3")
        self.assertTrue(v < "2.3.2")
        self.assertTrue(v < "3.2.2")
コード例 #4
0
def parse_interface_id(interface_id):
    '''Returns a typle with three values: resource-group-name, interface-name, and interface-version'''
    try:
        parts = interface_id.split('_')
        if len(parts) != 5:
            raise RuntimeError()
        return parts[0], parts[1], Version('.'.join(parts[2:5]))
    except:
        raise RuntimeError(
            'Could not parse interface id: {}. Expecting GemName_InterfaceName_Major_Minor_Revision.'
            .format(interface_id))
コード例 #5
0
    def test_is_compatible_with(self):
        v = Version("2.2.2")

        self.assertTrue(v.is_compatible_with("2.2.2"))
        self.assertTrue(v.is_compatible_with("2.2.1"))
        self.assertTrue(v.is_compatible_with("2.1.2"))
        self.assertTrue(v.is_compatible_with("2.0.0"))

        self.assertFalse(v.is_compatible_with("2.2.3"))
        self.assertFalse(v.is_compatible_with("2.3.2"))
        self.assertFalse(v.is_compatible_with("3.2.2"))
        self.assertFalse(v.is_compatible_with("1.2.2"))

        self.assertTrue(v.is_compatible_with(Version("2.2.2")))
コード例 #6
0
    def test_parse_interface_id_with_valid_id(self):

        expected_gem_name = 'TestGemName'
        expected_interface_name = 'TestInterfaceName'
        expected_interface_version = Version('1.2.3')

        interface_id = expected_gem_name + '_' + expected_interface_name + '_' + str(expected_interface_version).replace('.', '_')

        actual_gem_name, actual_interface_name, actual_interface_version = swagger_processor.interface.parse_interface_id(interface_id)

        self.assertEquals(actual_gem_name, expected_gem_name)
        self.assertEquals(actual_interface_name, expected_interface_name)
        self.assertEquals(actual_interface_version, expected_interface_version)
コード例 #7
0
    def __set_up_context(capabilities=None, framework_version: str = '1.1.5'):
        """
        Set up the Context object that drives everything from a CloudCanvas POV

        :param capabilities: A list of CloudFormation capabilities to mock
        :param framework_version: The framework version to set
        :return: A context object that can be configured in the test
        """
        if capabilities is None:
            capabilities = []

        context = mock.MagicMock()
        context.config = mock.MagicMock()
        context.stack = mock.MagicMock()
        context.stack.confirm_stack_operation.return_value = capabilities

        context.config.local_project_settings = mock.MagicMock()

        context.config.framework_version = Version(framework_version)
        context.config.project_template_aggregator = mock.MagicMock()
        context.config.project_template_aggregator.effective_template = {}
        return context
コード例 #8
0
ファイル: update.py プロジェクト: leafyoung88/lumberyard
                'InviteMessageTemplate': {
                    'EmailMessage': email_invite_message,
                    'EmailSubject': email_invite_subject
                },
                "AllowAdminCreateUserOnly": True
            },
            AutoVerifiedAttributes=['email'])
        context.view._output_message(
            "The Cloud Gem Portal URL has been written to the Cognito user email template successfully."
        )
    except ClientError:
        return


# version constants
V_1_0_0 = Version('1.0.0')
V_1_1_0 = Version('1.1.0')
V_1_1_1 = Version('1.1.1')
V_1_1_2 = Version('1.1.2')
V_1_1_3 = Version('1.1.3')
V_1_1_4 = Version('1.1.4')


def add_framework_version_update_writable_files(hook, from_version, to_version,
                                                writable_file_paths, **kwargs):

    # Repeat this pattern to add more upgrade processing:
    #
    # if from_version < VERSION_CHANGE_WAS_INTRODUCED:
    #     add files that may be written to
コード例 #9
0
                'InviteMessageTemplate': {
                    'EmailMessage': email_invite_message,
                    'EmailSubject': email_invite_subject
                },
                "AllowAdminCreateUserOnly": True
            },
            AutoVerifiedAttributes=['email'])
        context.view._output_message(
            "The Cloud Gem Portal URL has been written to the Cognito user email template successfully."
        )
    except ClientError:
        return


# version constants
V_1_0_0 = Version('1.0.0')
V_1_1_0 = Version('1.1.0')
V_1_1_1 = Version('1.1.1')
V_1_1_2 = Version('1.1.2')
V_1_1_3 = Version('1.1.3')
V_1_1_4 = Version('1.1.4')
V_1_1_5 = Version('1.1.5')  # Version without CloudGemPortal


def add_framework_version_update_writable_files(hook, from_version, to_version,
                                                writable_file_paths, **kwargs):

    # Repeat this pattern to add more upgrade processing:
    #
    # if from_version < VERSION_CHANGE_WAS_INTRODUCED:
    #     add files that may be written to
コード例 #10
0
 def version(self):
     if self.__version is None:
         self.__version = Version(
             self.__gem_file_object.get('Version', '0.0.0'))
     return self.__version
コード例 #11
0
 def test_init(self):
     v = Version("1.2.3")
     self.assertEqual(v.major, 1)
     self.assertEqual(v.minor, 2)
     self.assertEqual(v.revision, 3)
コード例 #12
0
ファイル: project.py プロジェクト: Mu-L/lumberyard
def create_stack(context, args):
    """Implements the lmbr_aws initialize-project command."""

    # Supported region?
    supported_regions = __get_region_list()
    if args.region not in supported_regions:
        raise HandledError('Region {} is not supported.'.format(args.region))

    # Initialize AWS directory if needed.
    context.config.initialize_aws_directory()
    if args.files_only:
        return

    # Already initialized?
    if context.config.local_project_settings.project_stack_exists():
        raise HandledError(
            'The project has already been initialized and is using the {} AWS Cloud Formation stack.'
            .format(context.config.project_stack_id))

    # Project settings writable?
    context.config.validate_writable(
        context.config.local_project_settings.path)

    # Check if optional admin roles are being created
    context.config.set_project_admin_roles(
        args.create_admin_roles if args.
        create_admin_roles is not None else False)

    # Check whether the custom domain for API Gateway is specified
    context.config.set_custom_domain_name(
        args.custom_domain_name if args.custom_domain_name else '')

    # Check if framework should try to deploy the CloudGemPortal
    portal_supported = context.config.framework_version < Version('1.1.5')
    context.config.set_deploy_cloud_gem_portal(
        args.deploy_cfp if args.deploycgp is not None else portal_supported)

    # Is it ok to do this?
    pending_resource_status = __get_pending_resource_status(context)
    if not re.match('^[a-z](?:[a-z0-9]*[\-]?[a-z0-9]+)*$', args.stack_name,
                    re.I):
        raise HandledError(
            'Project stack name can only consist of letters, numbers, non-repeating hyphens and must start with a letter: {}'
            .format(args.stack_name))

    capabilities = context.stack.confirm_stack_operation(
        context.config.get_pending_project_stack_id(
        ),  # may be None, which is ok
        'project',
        args,
        pending_resource_status)

    # Skip creating the stack if we have already done so.
    if not context.config.get_pending_project_stack_id():

        # Use game directory name as stack name by default.
        if args.stack_name is None:
            args.stack_name = context.config.game_directory_name

        # Does a stack with the name already exist?
        if context.stack.name_exists(args.stack_name, args.region):
            message = 'An AWS Cloud Formation stack with the name {} already exists in region {}. Use the --stack-name option to provide a different name.'.format(
                args.stack_name, args.region)
            raise HandledError(message)

        # Is the stack name valid?
        util.validate_stack_name(args.stack_name)

        # Ensure new stacks always has this set
        parameters = {
            CREATE_ADMIN_ROLE_PARAM_NAME:
            "true" if args.create_admin_roles else "false"
        }
        parameters[
            constant.
            CUSTOM_DOMAIN_NAME] = args.custom_domain_name if args.custom_domain_name else ''

        # Create stack using the bootstrapping template.
        context.stack.create_using_template(
            args.stack_name,
            bootstrap_template,
            args.region,
            created_callback=lambda id: context.config.
            set_pending_project_stack_id(id),
            capabilities=capabilities,
            timeout_in_minutes=30,
            tags=[{
                'Key': constant.PROJECT_NAME_TAG,
                'Value': args.stack_name
            }],
            parameters=parameters)

    # Create initial project settings.
    context.config.init_project_settings()

    # Temporarily set the config's project_stack_id property to the pending stack
    # id so the project uploader can find it later.
    # context.config.project_stack_id = context.config.get_pending_project_stack_id()

    # Do the initial update...
    __update_project_stack(context, pending_resource_status, capabilities,
                           args)