コード例 #1
0
ファイル: test_core.py プロジェクト: ajd3000/bossimage
def test_load_config_syntax_error():
    filename = 'tests/resources/boss-badsyntax.yml'

    with assert_raises(bc.ConfigurationError) as r:
        bc.load_config(filename)

    expected = "expected token 'end of print statement', got ':', line 4"
    assert_true(expected in r.exception.message)
コード例 #2
0
ファイル: test_core.py プロジェクト: ajd3000/bossimage
def test_load_config_not_found():
    nosuchfile = random_alphanum(100)

    with assert_raises(bc.ConfigurationError) as r:
        bc.load_config(nosuchfile)

    assert_equal(r.exception.message,
                 'Error loading {}: not found'.format(nosuchfile))
コード例 #3
0
ファイル: test_core.py プロジェクト: ajd3000/bossimage
def test_load_config_validation_error1():
    filename = 'tests/resources/boss-bad1.yml'

    with assert_raises(bc.ConfigurationError) as r:
        bc.load_config(filename)

    expected = "required key not provided @ data['platforms'][0]['name']"
    assert_true(expected in r.exception.message)
コード例 #4
0
ファイル: test_core.py プロジェクト: cloudboss/bossimage
def test_load_config_validation_error2():
    filename = 'tests/resources/boss-bad2.yml'

    with assert_raises(bc.ConfigurationError) as r:
        bc.load_config(filename)

    expected = "Error validating {}: expected bool"
    assert_true(expected.format(filename) in r.exception.message)
コード例 #5
0
ファイル: test_core.py プロジェクト: ajd3000/bossimage
def test_load_config_validation_error2():
    filename = 'tests/resources/boss-bad2.yml'

    with assert_raises(bc.ConfigurationError) as r:
        bc.load_config(filename)

    expected = "Error validating {}: expected bool"
    assert_true(expected.format(filename) in r.exception.message)
コード例 #6
0
ファイル: test_core.py プロジェクト: cloudboss/bossimage
def test_load_config_validation_error1():
    filename = 'tests/resources/boss-bad1.yml'

    with assert_raises(bc.ConfigurationError) as r:
        bc.load_config(filename)

    expected = "required key not provided @ data['platforms'][0]['name']"
    assert_true(expected in r.exception.message)
コード例 #7
0
ファイル: test_core.py プロジェクト: cloudboss/bossimage
def test_load_config_syntax_error():
    filename = 'tests/resources/boss-badsyntax.yml'

    with assert_raises(bc.ConfigurationError) as r:
        bc.load_config(filename)

    expected = "expected token 'end of print statement', got ':', line 4"
    assert_true(expected in r.exception.message)
コード例 #8
0
ファイル: test_core.py プロジェクト: cloudboss/bossimage
def test_load_config_not_found():
    nosuchfile = random_alphanum(100)

    with assert_raises(bc.ConfigurationError) as r:
        bc.load_config(nosuchfile)

    assert_equal(
        r.exception.message,
        'Error loading {}: not found'.format(nosuchfile)
    )
コード例 #9
0
ファイル: test_core.py プロジェクト: ajd3000/bossimage
def test_config_env_vars():
    default_user = '******'
    override_user = '******'

    with mock.patch('os.environ', {}):
        c1 = bc.load_config('tests/resources/boss-env.yml')
    assert_equal(c1['amz-2015092-default']['build']['username'], default_user)

    with mock.patch('os.environ', {'BI_USERNAME': override_user}):
        c2 = bc.load_config('tests/resources/boss-env.yml')
    assert_equal(c2['amz-2015092-default']['build']['username'], override_user)
コード例 #10
0
ファイル: test_core.py プロジェクト: cloudboss/bossimage
def test_config_env_vars():
    default_user = '******'
    override_user = '******'

    with mock.patch('os.environ', {}):
        c1 = bc.load_config('tests/resources/boss-env.yml')
    assert_equal(c1['amz-2015092-default']['build']['username'], default_user)

    with mock.patch('os.environ', {'BI_USERNAME': override_user}):
        c2 = bc.load_config('tests/resources/boss-env.yml')
    assert_equal(c2['amz-2015092-default']['build']['username'], override_user)
コード例 #11
0
def test_load_config_validation_error2():
    filename = 'tests/resources/boss-bad2.yml'

    with assert_raises(bc.ConfigurationError) as r:
        bc.load_config(filename)

    expected = "Error validating {}: expected bool for dictionary value @ data['win-2012r2-default']['become']"
    assert_equal(
        r.exception.message,
        expected.format(filename)
    )
コード例 #12
0
def test_env_vars():
    default_user = '******'
    override_user = '******'

    if 'BI_USERNAME' in os.environ: del(os.environ['BI_USERNAME'])

    c1 = bc.load_config('tests/resources/boss-env.yml')
    assert_equal(c1['amz-2015092-default']['username'], default_user)

    os.environ['BI_USERNAME'] = override_user
    c2 = bc.load_config('tests/resources/boss-env.yml')
    assert_equal(c2['amz-2015092-default']['username'], override_user)
コード例 #13
0
ファイル: cli.py プロジェクト: AbhijitBhoite/bossimage
def ensure_current():
    url = 'https://github.com/cloudboss/bossimage'
    is_old = False
    try:
        bc.load_config()
        click.echo(
            'Please update your .boss.yml. Instructions are on {}.'.format(
                url),
            err=True)
        is_old = True
    except:
        pass
    if is_old:
        raise click.Abort()
コード例 #14
0
ファイル: test_core.py プロジェクト: cloudboss/bossimage
def test_make_test():
    config = bc.load_config('tests/resources/boss.yml')
    instance = 'amz-2015092-default'
    ec2 = ec2_connect()

    with assert_raises(bc.StateError) as r:
        bc.make_test(ec2, instance, config[instance]['test'], 1)
        assert_equal(
            r.exception.message,
            'Cannot run `make test` before `make image`'
        )

    bc.make_build(ec2, instance, config[instance]['build'], 1)

    # Should get another StateError because `make image` has not been run
    with assert_raises(bc.StateError) as r:
        bc.make_test(ec2, instance, config[instance]['test'], 1)
        assert_equal(
            r.exception.message,
            'Cannot run `make test` before `make image`'
        )

    bc.make_image(ec2, instance, config[instance]['image'], True)

    reset_probes(['create_instance', 'run_ansible'])
    bc.make_test(ec2, instance, config[instance]['test'], 1)
    assert_equal(probe.called, ['create_instance', 'run_ansible'])

    # As with `build`, a second run should create no new resources
    reset_probes(['create_instance', 'run_ansible'])
    bc.make_test(ec2, instance, config[instance]['test'], 1)
    assert_equal(probe.called, ['run_ansible'])

    for f in bc.instance_files(instance).values():
        os.unlink(f)
コード例 #15
0
ファイル: cli.py プロジェクト: cloudboss/bossimage
def load_config():
    try:
        c = bc.load_config()
        yield c
    except bc.ConfigurationError as e:
        click.echo(e, err=True)
        raise click.Abort()
コード例 #16
0
ファイル: test_core.py プロジェクト: cloudboss/bossimage
def test_userdata():
    c = bc.load_config('tests/resources/boss-userdata.yml')

    win_2012r2 = c['win-2012r2-default']['build']
    win_2012r2_user_data = '''<powershell>
winrm qc -q
winrm set winrm/config \'@{MaxTimeoutms="1800000"}\'
winrm set winrm/config/service \'@{AllowUnencrypted="true"}\'
winrm set winrm/config/service/auth \'@{Basic="true"}\'
Set-Item wsman:localhost\\client\\trustedhosts -value * -force
Get-NetFirewallProfile | Set-NetFirewallProfile -Enabled False\n</powershell>
'''
    assert_equal(bc.user_data(win_2012r2), win_2012r2_user_data)

    amz_2015092 = c['amz-2015092-default']['build']
    amz_2015092_user_data = '''#!/bin/sh
pip install ansible
'''
    assert_equal(bc.user_data(amz_2015092), amz_2015092_user_data)

    centos_6 = c['centos-6-default']['build']
    centos_6_user_data = '''#cloud-config
system_info:
  default_user:
    name: ec2-user
'''
    assert_equal(bc.user_data(centos_6), centos_6_user_data)

    centos_7 = c['centos-7-default']['build']
    assert_equal(bc.user_data(centos_7), '')
コード例 #17
0
ファイル: test_core.py プロジェクト: ajd3000/bossimage
def test_make_test():
    config = bc.load_config('tests/resources/boss.yml')
    instance = 'amz-2015092-default'
    ec2 = ec2_connect()

    with assert_raises(bc.StateError) as r:
        bc.make_test(ec2, instance, config[instance]['test'], 1)
        assert_equal(r.exception.message,
                     'Cannot run `make test` before `make image`')

    bc.make_build(ec2, instance, config[instance]['build'], 1)

    # Should get another StateError because `make image` has not been run
    with assert_raises(bc.StateError) as r:
        bc.make_test(ec2, instance, config[instance]['test'], 1)
        assert_equal(r.exception.message,
                     'Cannot run `make test` before `make image`')

    bc.make_image(ec2, instance, config[instance]['image'], True)

    reset_probes(['create_instance', 'run_ansible'])
    bc.make_test(ec2, instance, config[instance]['test'], 1)
    assert_equal(probe.called, ['create_instance', 'run_ansible'])

    # As with `build`, a second run should create no new resources
    reset_probes(['create_instance', 'run_ansible'])
    bc.make_test(ec2, instance, config[instance]['test'], 1)
    assert_equal(probe.called, ['run_ansible'])

    for f in bc.instance_files(instance).values():
        os.unlink(f)
コード例 #18
0
ファイル: cli.py プロジェクト: cloudboss/bossimage
def load_config():
    try:
        c = bc.load_config()
        yield c
    except bc.ConfigurationError as e:
        click.echo(e, err=True)
        raise click.Abort()
コード例 #19
0
ファイル: test_core.py プロジェクト: ajd3000/bossimage
def test_userdata():
    c = bc.load_config('tests/resources/boss-userdata.yml')

    win_2012r2 = c['win-2012r2-default']['build']
    win_2012r2_user_data = '''<powershell>
winrm qc -q
winrm set winrm/config \'@{MaxTimeoutms="1800000"}\'
winrm set winrm/config/service \'@{AllowUnencrypted="true"}\'
winrm set winrm/config/service/auth \'@{Basic="true"}\'
Set-Item wsman:localhost\\client\\trustedhosts -value * -force
Get-NetFirewallProfile | Set-NetFirewallProfile -Enabled False\n</powershell>
'''
    assert_equal(bc.user_data(win_2012r2), win_2012r2_user_data)

    amz_2015092 = c['amz-2015092-default']['build']
    amz_2015092_user_data = '''#!/bin/sh
pip install ansible
'''
    assert_equal(bc.user_data(amz_2015092), amz_2015092_user_data)

    centos_6 = c['centos-6-default']['build']
    centos_6_user_data = '''#cloud-config
system_info:
  default_user:
    name: ec2-user
'''
    assert_equal(bc.user_data(centos_6), centos_6_user_data)

    centos_7 = c['centos-7-default']['build']
    assert_equal(bc.user_data(centos_7), '')
コード例 #20
0
def test_merge_config():
    expected = {
        'amz-2015092-default': {
            'ami_name': '%(role)s-%(profile)s-%(version)s-%(platform)s',
            'associate_public_ip_address': True,
            'become': True,
            'block_device_mappings': [{
                'device_name': '/dev/sdf',
                'ebs': {
                    'delete_on_termination': True,
                    'volume_size': 100,
                    'volume_type': 'gp2'
                }
            }],
            'connection': 'ssh',
            'connection_timeout': 600,
            'extra_vars': {},
            'instance_type': 't2.micro',
            'platform': 'amz-2015092',
            'port': 22,
            'profile': 'default',
            'security_groups': [],
            'source_ami': 'amzn-ami-hvm-2015.09.2.x86_64-gp2',
            'subnet': '',
            'username': '******',
            'user_data': '',
            'tags': {
                'Name': 'hello',
                'Description': 'A description',
            },
         },
        'win-2012r2-default': {
            'ami_name': 'ami-00000000',
            'associate_public_ip_address': True,
            'become': False,
            'block_device_mappings': [],
            'connection': 'winrm',
            'connection_timeout': 300,
            'extra_vars': {},
            'instance_type': 'm3.medium',
            'platform': 'win-2012r2',
            'port': 5985,
            'profile': 'default',
            'security_groups': [],
            'source_ami': 'Windows_Server-2012-R2_RTM-English-64Bit-Base-2016.02.10',
            'subnet': '',
            'username': '******',
            'user_data': '',
            'tags': {},
       }
    }

    c = bc.load_config('tests/resources/boss-good.yml')

    assert_equal(c, expected)
コード例 #21
0
ファイル: test_core.py プロジェクト: ajd3000/bossimage
def test_load_config_minimal():
    c = bc.load_config('tests/resources/boss-minimal.yml')
    expected_transformation = {
        'amz-2015092-default': {
            'platform': 'amz-2015092',
            'profile': 'default',
            'build': {
                'associate_public_ip_address': True,
                'become': True,
                'block_device_mappings': [],
                'connection': 'ssh',
                'connection_timeout': 600,
                'extra_vars': {},
                'iam_instance_profile': '',
                'instance_type': 't2.micro',
                'platform': 'amz-2015092',
                'port': 22,
                'profile': 'default',
                'security_groups': [],
                'source_ami': 'amzn-ami-hvm-2015.09.2.x86_64-gp2',
                'subnet': '',
                'tags': {},
                'user_data': '',
                'username': '******',
            },
            'test': {
                'associate_public_ip_address': True,
                'block_device_mappings': [],
                'connection': 'ssh',
                'connection_timeout': 600,
                'iam_instance_profile': '',
                'instance_type': 't2.micro',
                'playbook': 'tests/test.yml',
                'port': 22,
                'security_groups': [],
                'subnet': '',
                'tags': {},
                'user_data': '',
                'username': '******',
            },
            'image': {
                'ami_name':
                '%(role)s.%(profile)s.%(platform)s.%(vtype)s.%(arch)s.%(version)s',  # noqa
                'platform': 'amz-2015092',
                'profile': 'default',
            },
        },
    }
    assert_equal(c, expected_transformation)
コード例 #22
0
ファイル: test_core.py プロジェクト: ajd3000/bossimage
def test_make_image_no_wait():
    config = bc.load_config('tests/resources/boss.yml')
    instance = 'amz-2015092-default'
    ec2 = ec2_connect()
    wait = False

    bc.make_build(ec2, instance, config[instance]['build'], 1)

    reset_probes(['wait_for_image'])
    bc.make_image(ec2, instance, config[instance]['image'], wait)
    assert_equal(probe.called, [])

    reset_probes(['wait_for_image'])
    bc.make_image(ec2, instance, config[instance]['image'], wait)
    assert_equal(probe.called, [])
コード例 #23
0
ファイル: test_core.py プロジェクト: ajd3000/bossimage
def test_create_instance_tags():
    config = bc.load_config('tests/resources/boss.yml')
    ec2 = ec2_connect()

    # win-2012r2 config has no tags
    reset_probes(['create_instances', 'create_tags'])
    bc.create_instance(ec2, config['win-2012r2-default']['build'],
                       'ami-00000000', 'mykey')
    assert_equal(probe.called, ['create_instances'])

    # amz-2015092 config has tags
    reset_probes(['create_instances', 'create_tags'])
    bc.create_instance(ec2, config['amz-2015092-default']['build'],
                       'ami-00000000', 'mykey')
    assert_equal(probe.called, ['create_instances', 'create_tags'])
コード例 #24
0
ファイル: test_core.py プロジェクト: cloudboss/bossimage
def test_make_image_no_wait():
    config = bc.load_config('tests/resources/boss.yml')
    instance = 'amz-2015092-default'
    ec2 = ec2_connect()
    wait = False

    bc.make_build(ec2, instance, config[instance]['build'], 1)

    reset_probes(['wait_for_image'])
    bc.make_image(ec2, instance, config[instance]['image'], wait)
    assert_equal(probe.called, [])

    reset_probes(['wait_for_image'])
    bc.make_image(ec2, instance, config[instance]['image'], wait)
    assert_equal(probe.called, [])
コード例 #25
0
ファイル: test_core.py プロジェクト: cloudboss/bossimage
def test_load_config_minimal():
    c = bc.load_config('tests/resources/boss-minimal.yml')
    expected_transformation = {
        'amz-2015092-default': {
            'platform': 'amz-2015092',
            'profile': 'default',
            'build': {
                'associate_public_ip_address': True,
                'become': True,
                'block_device_mappings': [],
                'connection': 'ssh',
                'connection_timeout': 600,
                'extra_vars': {},
                'iam_instance_profile': '',
                'instance_type': 't2.micro',
                'platform': 'amz-2015092',
                'port': 22,
                'profile': 'default',
                'security_groups': [],
                'source_ami': 'amzn-ami-hvm-2015.09.2.x86_64-gp2',
                'subnet': '',
                'tags': {},
                'user_data': '',
                'username': '******',
            },
            'test': {
                'associate_public_ip_address': True,
                'block_device_mappings': [],
                'connection': 'ssh',
                'connection_timeout': 600,
                'iam_instance_profile': '',
                'instance_type': 't2.micro',
                'playbook': 'tests/test.yml',
                'port': 22,
                'security_groups': [],
                'subnet': '',
                'tags': {},
                'user_data': '',
                'username': '******',
            },
            'image': {
                'ami_name': '%(role)s.%(profile)s.%(platform)s.%(vtype)s.%(arch)s.%(version)s', # noqa
                'platform': 'amz-2015092',
                'profile': 'default',
            },
        },
    }
    assert_equal(c, expected_transformation)
コード例 #26
0
ファイル: test_core.py プロジェクト: ajd3000/bossimage
def test_make_build():
    config = bc.load_config('tests/resources/boss.yml')
    instance = 'amz-2015092-default'
    ec2 = ec2_connect()

    reset_probes(
        ['create_keypair', 'create_instance', 'write_playbook', 'run_ansible'])
    bc.make_build(ec2, instance, config[instance]['build'], 1)
    assert_equal(
        probe.called,
        ['create_keypair', 'create_instance', 'write_playbook', 'run_ansible'])

    # Ensure that a second run only runs ansible without creating new resources
    reset_probes(
        ['create_keypair', 'create_instance', 'write_playbook', 'run_ansible'])
    bc.make_build(ec2, instance, config[instance]['build'], 1)
    assert_equal(probe.called, ['run_ansible'])
コード例 #27
0
ファイル: test_core.py プロジェクト: cloudboss/bossimage
def test_create_instance_tags():
    config = bc.load_config('tests/resources/boss.yml')
    ec2 = ec2_connect()

    # win-2012r2 config has no tags
    reset_probes(['create_instances', 'create_tags'])
    bc.create_instance(
        ec2, config['win-2012r2-default']['build'], 'ami-00000000', 'mykey'
    )
    assert_equal(probe.called, ['create_instances'])

    # amz-2015092 config has tags
    reset_probes(['create_instances', 'create_tags'])
    bc.create_instance(
        ec2, config['amz-2015092-default']['build'], 'ami-00000000', 'mykey'
    )
    assert_equal(probe.called, ['create_instances', 'create_tags'])
コード例 #28
0
ファイル: test_core.py プロジェクト: cloudboss/bossimage
def test_make_build():
    config = bc.load_config('tests/resources/boss.yml')
    instance = 'amz-2015092-default'
    ec2 = ec2_connect()

    reset_probes([
        'create_keypair', 'create_instance',
        'write_playbook', 'run_ansible'
    ])
    bc.make_build(ec2, instance, config[instance]['build'], 1)
    assert_equal(probe.called, [
        'create_keypair', 'create_instance', 'write_playbook', 'run_ansible'
    ])

    # Ensure that a second run only runs ansible without creating new resources
    reset_probes([
        'create_keypair', 'create_instance', 'write_playbook', 'run_ansible'
    ])
    bc.make_build(ec2, instance, config[instance]['build'], 1)
    assert_equal(probe.called, ['run_ansible'])
コード例 #29
0
ファイル: test_core.py プロジェクト: ajd3000/bossimage
def test_make_image_wait():
    config = bc.load_config('tests/resources/boss.yml')
    instance = 'amz-2015092-default'
    ec2 = ec2_connect()
    wait = True

    bc.make_build(ec2, instance, config[instance]['build'], 1)

    reset_probes(['wait_for_image'])
    bc.make_image(ec2, instance, config[instance]['image'], wait)
    assert_equal(probe.called, ['wait_for_image'])

    reset_probes(['wait_for_image'])
    bc.make_image(ec2, instance, config[instance]['image'], wait)
    assert_equal(probe.called, [])

    wait = False
    reset_probes(['wait_for_image'])
    bc.make_image(ec2, instance, config[instance]['image'], wait)
    assert_equal(probe.called, [])

    for f in bc.instance_files(instance).values():
        os.unlink(f)
コード例 #30
0
ファイル: test_core.py プロジェクト: cloudboss/bossimage
def test_make_image_wait():
    config = bc.load_config('tests/resources/boss.yml')
    instance = 'amz-2015092-default'
    ec2 = ec2_connect()
    wait = True

    bc.make_build(ec2, instance, config[instance]['build'], 1)

    reset_probes(['wait_for_image'])
    bc.make_image(ec2, instance, config[instance]['image'], wait)
    assert_equal(probe.called, ['wait_for_image'])

    reset_probes(['wait_for_image'])
    bc.make_image(ec2, instance, config[instance]['image'], wait)
    assert_equal(probe.called, [])

    wait = False
    reset_probes(['wait_for_image'])
    bc.make_image(ec2, instance, config[instance]['image'], wait)
    assert_equal(probe.called, [])

    for f in bc.instance_files(instance).values():
        os.unlink(f)
コード例 #31
0
ファイル: test_core.py プロジェクト: cloudboss/bossimage
def test_merge_config():
    expected = {
        'win-2012r2-default': {
            'platform': 'win-2012r2',
            'profile': 'default',
            'build': {
                'username': '******',
                'subnet': '',
                'source_ami': 'Windows_Server-2012-R2_RTM-English-64Bit-Base-2016.02.10', # noqa
                'tags': {},
                'extra_vars': {},
                'iam_instance_profile': '',
                'user_data': '',
                'instance_type': 'm3.medium',
                'connection': 'winrm',
                'profile': 'default',
                'platform': 'win-2012r2',
                'associate_public_ip_address': True,
                'become': False,
                'connection_timeout': 300,
                'port': 5985,
                'security_groups': [],
                'block_device_mappings': [],
            },
            'test': {
                'username': '******',
                'subnet': '',
                'tags': {},
                'iam_instance_profile': '',
                'user_data': '',
                'instance_type': 'm3.medium',
                'connection': 'winrm',
                'playbook': 'tests/test.yml',
                'associate_public_ip_address': True,
                'connection_timeout': 300,
                'port': 5985,
                'security_groups': [],
                'block_device_mappings': [],
            },
            'image': {
                'profile': 'default',
                'platform': 'win-2012r2',
                'ami_name': 'ami-00000000'
            },
        },
        'amz-2015092-default': {
            'platform': 'amz-2015092',
            'profile': 'default',
            'test': {
                'username': '******',
                'subnet': '',
                'tags': {
                    'Name': 'hello',
                    'Description': 'A description'
                },
                'iam_instance_profile': '',
                'user_data': '',
                'instance_type': 't2.micro',
                'connection': 'ssh',
                'playbook': 'tests/test.yml',
                'associate_public_ip_address': True,
                'connection_timeout': 600,
                'port': 22,
                'security_groups': [],
                'block_device_mappings': [{
                    'ebs': {
                        'volume_size': 100,
                        'delete_on_termination': True,
                        'volume_type': 'gp2'
                    },
                    'device_name': '/dev/sdf'
                }]
            },
            'image': {
                'profile': 'default',
                'platform': 'amz-2015092',
                'ami_name': '%(role)s-%(profile)s-%(version)s-%(platform)s'
            },
            'build': {
                'username': '******',
                'subnet': '',
                'source_ami': 'amzn-ami-hvm-2015.09.2.x86_64-gp2',
                'tags': {
                    'Name': 'hello',
                    'Description': 'A description'
                },
                'extra_vars': {},
                'iam_instance_profile': '',
                'user_data': '',
                'instance_type': 't2.micro',
                'connection': 'ssh',
                'profile': 'default',
                'platform': 'amz-2015092',
                'associate_public_ip_address': True,
                'become': True,
                'connection_timeout': 600,
                'port': 22,
                'security_groups': [],
                'block_device_mappings': [{
                    'ebs': {
                        'volume_size': 100,
                        'delete_on_termination': True,
                        'volume_type': 'gp2'
                    },
                    'device_name': '/dev/sdf'
                }]
            }
        }
    }

    c = bc.load_config('tests/resources/boss-good.yml')
    print(c)

    assert_equal(c, expected)