Exemple #1
0
 def __init__(self, verbose_level=0, playbook_name=''):
     self.playbook_name = playbook_name
     self.playbook_path = os.path.join(get_kolla_ansible_home(), 'ansible/',
                                       self.playbook_name)
     self.playbook = AnsiblePlaybook()
     self.playbook.verbose_level = verbose_level
     self.playbook.playbook_path = self.playbook_path
Exemple #2
0
def destroy_hosts(hostnames,
                  destroy_type,
                  verbose_level=1,
                  include_data=False,
                  remove_images=False):
    '''destroy containers on a set of hosts.

    The containers on the specified hosts will be stopped
    or killed.
    '''
    playbook = AnsiblePlaybook()
    playbook_name = 'destroy.yml'

    LOG.info(u._LI('Please be patient as this may take a while.'))
    kolla_home = get_kolla_ansible_home()
    playbook.playbook_path = os.path.join(kolla_home,
                                          'ansible/' + playbook_name)

    # 'hosts' is defined as 'all' in the playbook yml code, but inventory
    # filtering will subset that down to the hosts in playbook.hosts.
    playbook.hosts = hostnames
    if remove_images:
        playbook.extra_vars = 'destroy_include_images=yes'
    if verbose_level <= 1:
        playbook.print_output = False
    playbook.verbose_level = verbose_level
    job = playbook.run()
    return job
Exemple #3
0
def deploy(hostnames=[], serial_flag=False, verbose_level=1, servicenames=[]):
    playbook = AnsiblePlaybook()
    kolla_home = get_kolla_ansible_home()
    playbook.playbook_path = os.path.join(kolla_home, 'ansible/site.yml')
    playbook.extra_vars = 'action=deploy'
    playbook.hosts = hostnames
    playbook.serial = serial_flag
    playbook.verbose_level = verbose_level
    playbook.services = servicenames

    _run_deploy_rules(playbook)

    job = playbook.run()
    return job
Exemple #4
0
def upgrade(verbose_level=1, servicenames=[]):
    playbook = AnsiblePlaybook()
    kolla_home = get_kolla_ansible_home()
    playbook.playbook_path = os.path.join(kolla_home, 'ansible/site.yml')
    playbook.extra_vars = 'action=upgrade'
    playbook.print_output = True
    playbook.verbose_level = verbose_level
    playbook.services = servicenames

    job = playbook.run()
    return job
Exemple #5
0
def precheck(hostnames, verbose_level=1):
    '''run check playbooks on a set of hosts'''
    playbook_name = 'prechecks_preinstall.yml'
    kolla_home = get_kolla_ansible_home()
    playbook = AnsiblePlaybook()
    playbook.playbook_path = os.path.join(kolla_home,
                                          'ansible/' + playbook_name)

    # define 'hosts' to be all, but inventory filtering will subset
    # that down to the hosts in playbook.hosts.
    playbook.extra_vars = 'hosts=all'
    playbook.hosts = hostnames
    playbook.print_output = True
    playbook.verbose_level = verbose_level

    job = playbook.run()
    return job
Exemple #6
0
def pull(verbose_level=1):
    '''run pull action against all hosts'''
    playbook = AnsiblePlaybook()
    kolla_home = get_kolla_ansible_home()
    playbook.playbook_path = os.path.join(kolla_home, 'ansible/site.yml')
    playbook.extra_vars = 'action=pull'
    playbook.verbose_level = verbose_level

    job = playbook.run()
    return job
Exemple #7
0
def certificate_init(verbose_level=1):
    '''Creates a self-signed certificate'''
    playbook = AnsiblePlaybook()
    playbook_name = 'certificates.yml'

    kolla_home = get_kolla_ansible_home()
    playbook.playbook_path = os.path.join(kolla_home,
                                          'ansible/' + playbook_name)
    playbook.verbose_level = verbose_level
    playbook.local_only = True
    playbook.become_user = get_admin_user()

    job = playbook.run()
    return job
Exemple #8
0
def reconfigure(verbose_level=1):
    playbook = AnsiblePlaybook()
    kolla_home = get_kolla_ansible_home()
    playbook.playbook_path = os.path.join(kolla_home, 'ansible/site.yml')
    playbook.extra_vars = 'action=reconfigure'
    playbook.verbose_level = verbose_level

    _run_deploy_rules(playbook)

    job = playbook.run()
    return job
Exemple #9
0
def stop_hosts(hostnames=[], verbose_level=1):
    '''stop containers on a set of hosts.

    The containers on the specified hosts will be stopped
    or killed if the stop takes over 20 seconds.
    '''
    playbook = AnsiblePlaybook()
    playbook_name = 'stop.yml'
    LOG.info(u._LI('Please be patient as this may take a while.'))
    kolla_home = get_kolla_ansible_home()
    playbook.playbook_path = os.path.join(kolla_home,
                                          'ansible/' + playbook_name)

    # 'hosts' is defined as 'all' in the playbook yml code, but inventory
    # filtering will subset that down to the hosts in playbook.hosts.
    playbook.hosts = hostnames
    if verbose_level <= 1:
        playbook.print_output = False
    playbook.verbose_level = verbose_level
    job = playbook.run()
    return job
Exemple #10
0
class KollaAction(object):
    """Kolla Action."""
    def __init__(self, verbose_level=0, playbook_name=''):
        self.playbook_name = playbook_name
        self.playbook_path = os.path.join(get_kolla_ansible_home(), 'ansible/',
                                          self.playbook_name)
        self.playbook = AnsiblePlaybook()
        self.playbook.verbose_level = verbose_level
        self.playbook.playbook_path = self.playbook_path

    def certificate_init(self):
        '''Creates a self-signed certificate'''

        self.playbook.local_only = True
        self.playbook.become_user = get_admin_user()
        job = self.playbook.run()
        return job

    def deploy(self, hostnames=[], serial_flag=False, servicenames=[]):
        '''Deploy and start all kolla containers.'''

        self.playbook.hosts = hostnames
        self.playbook.serial = serial_flag
        self.playbook.services = servicenames
        self.playbook.extra_vars = 'kolla_action=deploy'

        self._run_deploy_rules(self.playbook)

        job = self.playbook.run()
        return job

    def reconfigure(self, hostnames=[], servicenames=[]):
        '''Reconfigure OpenStack service.'''

        self.playbook.hosts = hostnames
        self.playbook.services = servicenames
        self.playbook.extra_vars = 'kolla_action=reconfigure'

        self._run_deploy_rules(self.playbook)

        job = self.playbook.run()
        return job

    def postdeploy(self):
        '''Do post deploy on deploy node.'''

        self.playbook.local_only = True
        self.playbook.become_user = get_admin_user()
        job = self.playbook.run()
        return job

    def destroy_hosts(self,
                      hostnames,
                      destroy_type,
                      include_data=False,
                      remove_images=False):
        '''destroy containers on a set of hosts.

        The containers on the specified hosts will be stopped
        or killed.
        '''

        LOG.info(u._LI('Please be patient as this may take a while.'))
        # 'hosts' is defined as 'all' in the playbook yml code, but inventory
        # filtering will subset that down to the hosts in playbook.hosts.
        self.playbook.hosts = hostnames
        if remove_images:
            self.playbook.extra_vars = 'destroy_include_images=yes'
        if self.playbook.verbose_level <= 1:
            self.playbook.print_output = False
        job = self.playbook.run()
        return job

    def stop(self, hostnames=[], servicenames=[]):
        '''stop containers on a set of hosts.

        The containers on the specified hosts will be stopped
        or killed if the stop takes over 20 seconds.
        '''

        LOG.info(u._LI('Please be patient as this may take a while.'))
        # 'hosts' is defined as 'all' in the playbook yml code, but inventory
        # filtering will subset that down to the hosts in playbook.hosts.
        self.playbook.hosts = hostnames
        self.playbook.services = servicenames
        self.playbook.extra_vars = 'kolla_action=stop'
        if self.playbook.verbose_level <= 1:
            self.playbook.print_output = False
        job = self.playbook.run()
        return job

    def precheck(self, hostnames=[], servicenames=[]):
        '''run check playbooks on a set of hosts'''

        # check that password file has no empty password values
        empty_keys = get_empty_password_values()
        if empty_keys:
            raise InvalidConfiguration(
                u._('password check failed. There are empty password values '
                    'in {etc}passwords.yml. '
                    'Please run kolla-cli password init or '
                    'kolla-cli password set(key) to correct them. '
                    '\nEmpty passwords: '
                    '{keys}').format(etc=get_kolla_etc(), keys=empty_keys))

        # define 'hosts' to be all, but inventory filtering will subset
        # that down to the hosts in playbook.hosts.
        self.playbook.hosts = hostnames
        self.playbook.services = servicenames
        self.playbook.extra_vars = 'kolla_action=precheck'
        self.playbook.print_output = True
        job = self.playbook.run()
        return job

    def pull(self, hostnames=[], servicenames=[]):
        '''run pull action against all hosts'''

        self.playbook.hosts = hostnames
        self.playbook.services = servicenames
        self.playbook.extra_vars = 'kolla_action=pull'
        self.playbook.print_output = True
        job = self.playbook.run()
        return job

    def upgrade(self, hostnames=[], servicenames=[]):
        '''Upgrades existing OpenStack Environment.'''

        self.playbook.hosts = hostnames
        self.playbook.services = servicenames
        self.playbook.extra_vars = 'kolla_action=upgrade'
        self.playbook.print_output = True
        job = self.playbook.run()
        return job

    def genconfig(self, hostnames=[], servicenames=[]):
        '''Generate configuration files for enabled OpenStack services'''

        self.playbook.hosts = hostnames
        self.playbook.services = servicenames
        self.playbook.extra_vars = 'kolla_action=config'
        self.playbook.print_output = True
        job = self.playbook.run()
        return job

    def check(self, hostnames=[], servicenames=[]):
        '''Do post-deployment smoke tests.'''

        self.playbook.hosts = hostnames
        self.playbook.services = servicenames
        self.playbook.extra_vars = 'kolla_action=check'
        self.playbook.print_output = True
        job = self.playbook.run()
        return job

    def _run_deploy_rules(self, playbook):
        properties = AnsibleProperties()
        inventory = Inventory.load()

        # cannot have both groups and hosts
        if playbook.hosts and playbook.groups:
            raise InvalidArgument(
                u._('Hosts and Groups arguments cannot '
                    'both be present at the same time.'))

        # verify that all services exists
        if playbook.services:
            for service in playbook.services:
                valid_service = inventory.get_service(service)
                if not valid_service:
                    raise NotInInventory(u._('Service'), service)

        # check that every group with enabled services
        # has hosts associated to it
        group_services = inventory.get_group_services()
        failed_groups = []
        failed_services = []
        if group_services:
            for (groupname, servicenames) in group_services.items():
                group = inventory.get_group(groupname)
                hosts = group.get_hostnames()

                group_needs_host = False
                if not hosts:
                    for servicename in servicenames:
                        if self._is_service_enabled(servicename, inventory,
                                                    properties):
                            group_needs_host = True
                            failed_services.append(servicename)
                    if group_needs_host:
                        failed_groups.append(groupname)

            if len(failed_groups) > 0:
                raise InvalidConfiguration(
                    u._('Deploy failed. '
                        'Groups: {groups} with enabled '
                        'services : {services} '
                        'have no associated hosts').format(
                            groups=failed_groups, services=failed_services))

    def _is_service_enabled(self, servicename, inventory, properties):
        service = inventory.get_service(servicename)
        if service is not None:
            enabled_property = 'enable_' + servicename.replace('-', '_')
            is_enabled = properties.get_property_value(enabled_property)
            if type(is_enabled) is str:
                is_enabled = is_string_true(is_enabled)
        return is_enabled