Exemple #1
0
def test_component_taupage_auto_scaling_group_user_data_with_lists_and_empty_dict():
    configuration = {
        'resources': ['A', {"Ref": "Res1"}],
        'ports': {}
    }

    expected_user_data = {'Fn::Join': ['', [
        '#taupage-ami-config\nports: {}\nresources:\n- A\n- ', {'Ref': 'Res1'}, '\n']]}

    assert expected_user_data == generate_user_data(configuration, 'region')
Exemple #2
0
def test_component_taupage_auto_scaling_group_user_data_with_lists_and_empty_dict():
    configuration = {
        'resources': ['A', {"Ref": "Res1"}],
        'ports': {}
    }

    expected_user_data = {'Fn::Join': ['', [
        '#taupage-ami-config\nports: {}\nresources:\n- A\n- ', {'Ref': 'Res1'}, '\n']]}

    assert expected_user_data == generate_user_data(configuration, 'region')
Exemple #3
0
def test_component_taupage_auto_scaling_group_user_data_without_ref():
    configuration = {
        'runtime': 'Docker',
        'environment': {
            'ENV3': "r3"
        }
    }

    expected_user_data = '#taupage-ami-config\nenvironment:\n  ENV3: r3\nruntime: Docker\n'

    assert expected_user_data == generate_user_data(configuration, 'region')
Exemple #4
0
def test_component_taupage_auto_scaling_group_user_data_without_ref():
    configuration = {
        'runtime': 'Docker',
        'environment': {
            'ENV3': "r3"
        }
    }

    expected_user_data = '#taupage-ami-config\nenvironment:\n  ENV3: r3\nruntime: Docker\n'

    assert expected_user_data == generate_user_data(configuration, 'region')
Exemple #5
0
def test_component_taupage_auto_scaling_group_user_data_with_ref():
    configuration = {
        'runtime': 'Docker',
        'source': {
            'Fn::Join': [
                '/',
                [
                    'pierone.stups.zalan.do', 'cool', {
                        'Fn::GetAtt': ['Obj1', 'Attr1']
                    }
                ]
            ]
        },
        'mint_bucket': {
            'Ref': 'REF1'
        },
        'environment': {
            'ENV1': {
                'Fn::GetAtt': ['Obj2', 'Attr2']
            },
            'ENV2': {
                'Ref': 'REF2'
            },
            'ENV3': "r3"
        }
    }

    expected_user_data = {
        'Fn::Join': [
            '',
            [
                '#taupage-ami-config\nenvironment:\n  ENV1: ', {
                    'Fn::GetAtt': ['Obj2', 'Attr2']
                }, '\n  ENV2: ', {
                    'Ref': 'REF2'
                }, '\n  ENV3: r3\nmint_bucket: ', {
                    'Ref': 'REF1'
                }, '\nruntime: Docker\nsource: ', {
                    'Fn::Join': [
                        '/',
                        [
                            'pierone.stups.zalan.do', 'cool', {
                                'Fn::GetAtt': ['Obj1', 'Attr1']
                            }
                        ]
                    ]
                }, '\n'
            ]
        ]
    }

    assert expected_user_data == generate_user_data(configuration)
Exemple #6
0
def extract_user_data(configuration, elastigroup_config, info: dict, force,
                      account_info):
    """
    This function converts a classic TaupageConfig into a base64 encoded value for the
    compute.launchSpecification.userData
    See https://api.spotinst.com/elastigroup/amazon-web-services/create/#compute.launchSpecification.userData
    Any existing TaupageConfig will _always_ overwrite the userData for the Elastigroup
    """
    elastigroup_config = ensure_keys(elastigroup_config, "compute",
                                     "launchSpecification")
    taupage_config = configuration.get("TaupageConfig", None)
    if taupage_config:
        if 'notify_cfn' not in taupage_config:
            taupage_config['notify_cfn'] = {
                'stack': '{}-{}'.format(info["StackName"],
                                        info["StackVersion"]),
                'resource': configuration['Name']
            }

        if 'application_id' not in taupage_config:
            taupage_config['application_id'] = info['StackName']

        if 'application_version' not in taupage_config:
            taupage_config['application_version'] = info['StackVersion']

        check_application_id(taupage_config['application_id'])
        check_application_version(taupage_config['application_version'])

        runtime = taupage_config.get('runtime')
        if runtime != 'Docker':
            raise click.UsageError(
                'Taupage only supports the "Docker" runtime currently')

        source = taupage_config.get('source')
        if not source:
            raise click.UsageError(
                'The "source" property of TaupageConfig must be specified')

        docker_image = pierone.api.DockerImage.parse(source)

        if not force and docker_image.registry:
            check_docker_image_exists(docker_image)

        user_data = base64.urlsafe_b64encode(
            generate_user_data(taupage_config,
                               account_info.Region).encode('utf-8'))
        elastigroup_config["compute"]["launchSpecification"][
            "userData"] = user_data.decode('utf-8')
Exemple #7
0
def test_component_taupage_auto_scaling_group_user_data_with_ref():
    configuration = {
        'runtime': 'Docker',
        'source': {'Fn::Join': ['/', ['pierone.stups.zalan.do', 'cool', {'Fn::GetAtt': ['Obj1', 'Attr1']}]]},
        'mint_bucket': {'Ref': 'REF1'},
        'environment': {
            'ENV1': {'Fn::GetAtt': ['Obj2', 'Attr2']},
            'ENV2': {'Ref': 'REF2'},
            'ENV3': "r3"
        }
    }

    expected_user_data = {
        'Fn::Join': ['', [
            '#taupage-ami-config\nenvironment:\n  ENV1: ', {'Fn::GetAtt': ['Obj2', 'Attr2']},
            '\n  ENV2: ', {'Ref': 'REF2'}, '\n  ENV3: r3\nmint_bucket: ', {'Ref': 'REF1'},
            '\nruntime: Docker\nsource: ', {'Fn::Join': ['/', ['pierone.stups.zalan.do', 'cool',
                                                         {'Fn::GetAtt': ['Obj1', 'Attr1']}]]}, '\n']]}

    assert expected_user_data == generate_user_data(configuration, 'region')
Exemple #8
0
def extract_user_data(configuration, elastigroup_config, info: dict, force, account_info):
    """
    This function converts a classic TaupageConfig into a base64 encoded value for the
    compute.launchSpecification.userData
    See https://api.spotinst.com/elastigroup/amazon-web-services/create/#compute.launchSpecification.userData
    Any existing TaupageConfig will _always_ overwrite the userData for the Elastigroup
    """
    elastigroup_config = ensure_keys(elastigroup_config, "compute", "launchSpecification")
    taupage_config = configuration.get("TaupageConfig", None)
    if taupage_config:
        if 'notify_cfn' not in taupage_config:
            taupage_config['notify_cfn'] = {'stack': '{}-{}'.format(info["StackName"], info["StackVersion"]),
                                            'resource': configuration['Name']}

        if 'application_id' not in taupage_config:
            taupage_config['application_id'] = info['StackName']

        if 'application_version' not in taupage_config:
            taupage_config['application_version'] = info['StackVersion']

        check_application_id(taupage_config['application_id'])
        check_application_version(taupage_config['application_version'])

        runtime = taupage_config.get('runtime')
        if runtime != 'Docker':
            raise click.UsageError('Taupage only supports the "Docker" runtime currently')

        source = taupage_config.get('source')
        if not source:
            raise click.UsageError('The "source" property of TaupageConfig must be specified')

        docker_image = pierone.api.DockerImage.parse(source)

        if not force and docker_image.registry:
            check_docker_image_exists(docker_image)

        user_data = base64.urlsafe_b64encode(generate_user_data(taupage_config, account_info.Region).encode('utf-8'))
        elastigroup_config["compute"]["launchSpecification"]["userData"] = user_data.decode('utf-8')