Example #1
0
def run(provfile_path, server_name, password, extra_options):
    module_name = provyfile_module_from(provfile_path)
    prov = import_module(module_name)
    servers = get_servers_for(prov, server_name)

    build_prompt_options(servers, extra_options)

    for server in servers:
        provision_server(server, provfile_path, password, prov)
Example #2
0
    def imports_a_module_with_simple_notation(self):
        class foo_module:
            pass

        with patch('__builtin__.__import__') as import_:
            import_.return_value = foo_module

            module = import_module('foo_module')

            self.assertEqual(module, foo_module)
Example #3
0
    def imports_a_module_with_dotted_notation(self):
        class foo_package:
            class bar_package:
                class baz_module:
                    pass

        with patch('__builtin__.__import__') as import_:
            import_.return_value = foo_package

            module = import_module('foo_package.bar_package.baz_module')

            self.assertEqual(module, foo_package.bar_package.baz_module)
Example #4
0
def run(provfile_path, server_name, password, extra_options):
    module_path = provfile_path.replace(sep, '.')
    prov = import_module(module_path)
    servers = get_servers_for(prov, server_name)

    for server in servers:
        if 'options' in server:
            for option_name, option in server['options'].iteritems():
                if isinstance(option, AskFor):
                    if option.key in extra_options:
                        value = extra_options[option.key]
                    else:
                        value = option.get_value(server)
                    server['options'][option_name] = value

    for server in servers:
        host_string = "%s@%s" % (server['user'], server['address'].strip())

        context = {
            'abspath': dirname(abspath(provfile_path)),
            'path': dirname(provfile_path),
            'owner': server['user'],
            'cleanup': [],
            'registered_loaders': []
        }

        if 'options' in server and server['options']:
            for key, value in server['options'].iteritems():
                context[key] = value

        loader = ChoiceLoader([
            FileSystemLoader(join(context['abspath'], 'files'))
        ])
        context['loader'] = loader

        msg = "Provisioning %s..." % host_string
        print
        print "*" * len(msg)
        print msg
        print "*" * len(msg)

        settings_dict = dict(host_string=host_string, password=password)
        if 'ssh_key' in server and server['ssh_key']:
            settings_dict['key_filename'] = server['ssh_key']

        with _settings(**settings_dict):
            context['host'] = server['address']
            context['user'] = server['user']
            role_instances = []

            try:
                for role in server['roles']:
                    context['role'] = role
                    instance = role(prov, context)
                    role_instances.append(instance)
                    instance.provision()
            finally:
                for role in role_instances:
                    role.cleanup()

                for role in context['cleanup']:
                    role.cleanup()

        msg = "%s provisioned!" % host_string
        print
        print "*" * len(msg)
        print msg
        print "*" * len(msg)
        print
Example #5
0
def run(provfile_path, server_name, password, extra_options):
    module_path = provfile_path.replace(sep, '.')
    prov = import_module(module_path)
    servers = get_servers_for(prov, server_name)

    for server in servers:
        if 'options' in server:
            for option_name, option in server['options'].iteritems():
                if isinstance(option, AskFor):
                    if option.key in extra_options:
                        value = extra_options[option.key]
                    else:
                        value = option.get_value(server)
                    server['options'][option_name] = value

    for server in servers:
        host_string = "%s@%s" % (server['user'], server['address'])

        context = {
            'abspath': dirname(abspath(provfile_path)),
            'path': dirname(provfile_path),
            'owner': server['user'],
            'cleanup': [],
            'registered_loaders': []
        }

        if 'options' in server and server['options']:
            for key, value in server['options'].iteritems():
                context[key] = value

        loader = ChoiceLoader(
            [FileSystemLoader(join(context['abspath'], 'files'))])
        context['loader'] = loader

        msg = "Provisioning %s..." % host_string
        print
        print "*" * len(msg)
        print msg
        print "*" * len(msg)
        with _settings(host_string=host_string, password=password):
            context['host'] = server['address']
            context['user'] = server['user']
            role_instances = []

            try:
                for role in server['roles']:
                    context['role'] = role
                    instance = role(prov, context)
                    role_instances.append(instance)
                    instance.provision()
            finally:
                for role in role_instances:
                    role.cleanup()

                for role in context['cleanup']:
                    role.cleanup()

        msg = "%s provisioned!" % host_string
        print
        print "*" * len(msg)
        print msg
        print "*" * len(msg)
        print