Exemple #1
0
    def register_image(self):
        """
        trove images for ubuntu
        http://tarballs.openstack.org/trove/images/ubuntu/

        building guest images
        http://docs.openstack.org/developer/trove/dev/building_guest_images.html

        ```
        git clone https://github.com/openstack/trove-integration
        git clone https://github.com/openstack/tripleo-image-elements.git

        export PATH_TRIPLEO_ELEMENTS=$PWD/tripleo-image-elements
        export REDSTACK_SCRIPTS=$PWD/trove-integration/scripts
        export DIB_CLOUD_INIT_DATASOURCES="ConfigDrive"
        export ELEMENTS_PATH=$REDSTACK_SCRIPTS/files/elements:$PATH_TRIPLEO_ELEMENTS/elements

        disk-image-create -a amd64 -o ./ubuntu-percona.qemu ubuntu vm heat-cfntools \
            cloud-init-datasources ubuntu-guest ubuntu-mysql
        ```
        """
        glance = Glance()
        image_id = glance.create_image(
            'trove_mysql',
            'http://tarballs.openstack.org/trove/images/ubuntu/mysql.qcow2')

        sudo("/opt/trove/bin/trove-manage --config-file /etc/trove/trove.conf datastore_update mysql ''")  # noqa
        sudo("/opt/trove/bin/trove-manage --config-file /etc/trove/trove.conf datastore_version_update mysql mysql-5.6 mysql {0} '' 1".format(image_id))  # noqa
Exemple #2
0
 def setup_prepare(self):
     if self.is_tag('package'):
         if env.node['package_manager'] == 'yum':
             filer.template('/etc/yum.repos.d/mariadb.repo')
         self.init_package_manager()
         self.install_packages()
     sudo('setenforce 0')
Exemple #3
0
def touch(dest, is_local=False, owner='root:root', mode='775'):
    cmd_touch = 't={0} && touch $t'.format(dest)
    if is_local or env.is_local:
        cmd(cmd_touch)
    else:
        sudo('{0} && chmod {1} $t && chown {2} $t'.format(
            cmd_touch, mode, owner))
Exemple #4
0
    def setup(self):
        data = self.init()

        if self.is_tag('package'):
            self.python.setup()
            self.python.setup_package(**self.package)

        if self.is_tag('conf'):
            # setup conf files
            filer.template(
                '/etc/rally/rally.conf',
                src='{0}/rally.conf.j2'.format(data['version']),
                data=data,
            )

            filer.template(
                '/etc/rally/rally-existing.json',
                src='{0}/rally-existing.json.j2'.format(data['version']),
                data=data,
            )

        if self.is_tag('data') and env.host == env.hosts[0]:
            sudo('rally deployment list | grep {0} || '
                 'rally deployment create --file=/etc/rally/rally-existing.json --name={0}'.format(
                     env.cluster['keystone']['service_region']))
Exemple #5
0
 def enable_nova_services(self):
     result = sudo("nova-manage service list 2>/dev/null | grep disabled | awk '{print $1,$2}'")
     services = result.split('\r\n')
     services = map(lambda s: s.split(' '), services)
     for service in services:
         sudo("nova-manage service enable --service {0} --host {1}".format(
             service[0], service[1]))
Exemple #6
0
    def install(self, option=''):
        with api.warn_only():
            if env.node['package_manager'] == 'yum':
                self.result = run('rpm -q {0}'.format(self.package_name))
                if not self.result.return_code == 0:
                    if self.path:
                        self.result = sudo('yum install {0} -y {1}'.format(self.path, option))
                    else:
                        self.result = sudo('yum install {0} -y {1}'.format(
                            self.package_name, option))

            elif env.node['package_manager'] == 'apt':
                self.result = run('dpkg -l {0} | grep "^ii "'.format(self.package_name))
                if not self.result.return_code == 0:
                    if self.path:
                        self.result = sudo('apt-get install {0} -y {1}'.format(self.path, option))
                    else:
                        self.result = sudo('apt-get install {0} -y {1}'.format(
                            self.package_name, option))
            else:
                self.unsupport()

        print self.result
        if self.result.return_code != 0:
            msg = 'Failed install {0}.'.format(self.package_name)
            log.error(msg)
            raise Exception(msg)

        return self
Exemple #7
0
 def mount_local(self):
     data = self.init()
     for volume in data['volume_map'].values():
         filer.Editor('/etc/fstab').a('localhost:/{0} /mnt/{0} glusterfs '
                                      'defaults,_netdev 0 0'.format(volume['name']))
         filer.mkdir('/mnt/{0}'.format(volume['name']))
         sudo('mount -a')
Exemple #8
0
    def setup(self):
        data = self.init()

        if self.is_tag('package'):
            self.python.setup()
            self.python.setup_package(**self.package)

        if self.is_tag('conf'):
            # setup conf files
            is_updated = filer.template(
                '/etc/heat/heat.conf',
                src='{0}/heat.conf.j2'.format(data['version']),
                data=data,
            )

        if self.is_tag('data') and env.host == env.hosts[0]:
            utils.oscmd('/opt/heat/bin/heat-keystone-setup-domain \
                            --stack-user-domain-name {0} \
                            --stack-domain-admin {1} \
                            --stack-domain-admin-password {2}'.format(
                self.data['stack_user_domain_name'],
                self.data['stack_domain_admin'],
                self.data['stack_domain_admin_password']))

            sudo('{0}/bin/heat-manage db_sync'.format(self.prefix))

        if self.is_tag('conf', 'service'):
            self.enable_services().start_services(pty=False)
            if is_updated:
                self.restart_services(pty=False)
Exemple #9
0
    def setup(self):
        data = self.init()

        if self.is_tag('package'):
            self.python.setup()
            self.python.setup_package(**self.package)

            filer.mkdir(data['glance_store']['filesystem_store_datadir'])

        if self.is_tag('conf'):
            # setup conf files
            if filer.template(
                    '/etc/glance/glance-api.conf',
                    src='{0}/glance-api.conf.j2'.format(data['version']),
                    data=data):
                self.handlers['restart_glance-api'] = True

            if filer.template(
                    '/etc/glance/glance-registry.conf',
                    src='{0}/glance-registry.conf.j2'.format(data['version']),
                    data=data):
                self.handlers['restart_glance-registry'] = True

        if self.is_tag('data') and env.host == env.hosts[0]:
            sudo('{0}/bin/glance-manage db_sync'.format(self.prefix))

        if self.is_tag('conf', 'service'):
            self.enable_services().start_services(pty=False)
            self.exec_handlers()
Exemple #10
0
    def setup(self):
        data = self.init()
        sudo('setenforce 0')
        self.install_packages()

        sudo("sh -c \"echo 'hacluster:{0}' |chpasswd\"".format(data['ha_password']))
        Service('pcsd').start().enable()
Exemple #11
0
    def setup_pacemaker(self):
        data = self.init()

        if env.host == data['hosts'][0]:
            # stonith を無効化しておかないとresouceがスタートしない
            sudo('pcs property set stonith-enabled=false')

            sudo('pcs resource show vip || '
                 'pcs resource create vip ocf:heartbeat:IPaddr2 '
                 'ip="{0[vip]}" cidr_netmask="{0[cidr_netmask]}" '
                 'op monitor interval="{0[monitor_interval]}s"'.format(data))

            sudo(
                'pcs resource show lb-haproxy || '
                'pcs resource create lb-haproxy systemd:haproxy --clone --force'
            )
            sudo(
                'pcs constraint order | grep "start vip then start lb-haproxy-clone" || '
                'pcs constraint order start vip then lb-haproxy-clone')
            sudo(
                'pcs constraint colocation | grep "vip with lb-haproxy-clone" || '
                'pcs constraint colocation add vip with lb-haproxy-clone')

        is_change = filer.template('/etc/haproxy/haproxy.cfg', data=data)
        if env.host == data['hosts'][0] and is_change:
            Service('haproxy').reload()

        self.enable_services()
Exemple #12
0
def setup():
    sudo('setenforce 0')
    Editor('/etc/selinux/config').s('SELINUX=enforcing', 'SELINUX=disable')

    Service('firewalld').stop().disable()

    return {'status': 1}
    def setup(self):
        data = self.init()

        if self.is_tag('package'):
            self.python.setup()
            self.python.setup_package(**self.package)

        if self.is_tag('conf'):
            is_updated = filer.template(
                '/etc/ceilometer/ceilometer.conf',
                src='{0}/ceilometer.conf.j2'.format(data['version']),
                data=data,
            )

            is_updated = filer.template(
                '/etc/ceilometer/pipeline.yaml',
                src='{0}/pipeline.yaml'.format(data['version']),
                data=data,
            ) or is_updated

        if self.is_tag('data') and env.host == env.hosts[0]:
            sudo('{0}/bin/ceilometer-dbsync'.format(self.prefix))

        if self.is_tag('conf', 'service'):
            self.enable_services().start_services(pty=False)
            if is_updated:
                self.restart_services(pty=False)
Exemple #14
0
def file(dest,
         mode='644',
         owner='root:root',
         src=None,
         src_file=None,
         src_str=None,
         override=False):
    if src_str is not None:
        src_file = __create_src_file(dest, src_str)

    is_updated = False
    with api.warn_only():
        if exists(dest) and not override:
            log.info('file "{0}" exists'.format(dest))
        else:
            if not src_file:
                src_file = __get_src_file(dest, src_dirname='files', src=src)

            if env.is_local:
                sudo('cp {0} {1}'.format(src_file, dest))
            else:
                scp(src_file, dest)
            is_updated = True

    sudo('chmod -R {0} {1}'.format(mode, dest) +
         ' && chown -R {0} {1}'.format(owner, dest))
    return is_updated
Exemple #15
0
    def setup(self):
        data = self.init()

        if self.is_tag('package'):
            self.python.setup()
            self.python.setup_package(**self.package)

        if self.is_tag('conf'):
            # setup conf files
            if filer.template(
                    '/etc/trove/trove.conf',
                    src='{0}/trove.conf.j2'.format(data['version']),
                    data=data):
                self.handlers['restart_trove-*'] = True

            if filer.template(
                    '/etc/trove/trove-taskmanager.conf',
                    src='{0}/trove-taskmanager.conf.j2'.format(data['version']),
                    data=data):
                self.handlers['restart_trove-*'] = True

            if filer.template(
                    '/etc/trove/trove-guestagent.conf',
                    src='{0}/trove-guestagent.conf.j2'.format(data['version']),
                    data=data):
                self.handlers['restart_trove-*'] = True

        if self.is_tag('data') and env.host == env.hosts[0]:
            sudo('{0}/bin/trove-manage db_sync'.format(self.prefix))
            self.register_image()

        if self.is_tag('conf', 'service'):
            self.enable_services().start_services(pty=False)
            self.exec_handlers()
Exemple #16
0
def setup():
    git.setup()
    sudo('rm -rf /tmp/git')
    git.sync('https://github.com/fabrickit-fablib/git.git')
    git.sync('https://github.com/fabrickit-fablib/git.git', dest='/tmp/git')
    git.sync('https://github.com/fabrickit-fablib/git.git', dest='/tmp/git')
    git.sync('https://github.com/fabrickit-fablib/git.git', dest='/tmp/git-sudo', use_sudo=True)
    git.sync('https://github.com/fabrickit-fablib/git.git', dest='/tmp/git-sudo', use_sudo=True)
Exemple #17
0
def mkdir(dest, is_local=False, owner='root:root', mode='775', use_sudo=True):
    cmd_mkdir = 't={0} && mkdir -p $t'.format(dest)
    if is_local or env.is_local:
        cmd(cmd_mkdir)
    elif use_sudo:
        sudo('{0} && chmod {1} $t && chown {2} $t'.format(cmd_mkdir, mode, owner))
    else:
        run('{0} $t'.format(cmd_mkdir, mode, owner))
Exemple #18
0
def add(name, group=None):
    with api.warn_only():
        passwd = run('cat /etc/passwd | grep ^{0}:'.format(name))
        if passwd.return_code != 0:
            sudo('useradd {0} -M -s/bin/false'.format(name))

        if group is not None:
            sudo('gpasswd -add {0} {1}'.format(name, group))
Exemple #19
0
 def mount_local(self):
     data = self.init()
     for volume in data["volume_map"].values():
         filer.Editor("/etc/fstab").a(
             "localhost:/{0} /mnt/{0} glusterfs " "defaults,_netdev 0 0".format(volume["name"])
         )
         filer.mkdir("/mnt/{0}".format(volume["name"]))
         sudo("mount -a")
Exemple #20
0
def add(name, gid=None):
    with api.warn_only():
        getent = sudo('getent group | grep ^{0}:'.format(name))
        if getent.return_code != 0:
            if gid is None:
                sudo('groupadd {0}'.format(name))
            else:
                sudo('groupadd -g {0} {1}'.format(gid, name))
Exemple #21
0
 def sql(self, query):
     self.init()
     if self.is_ubuntu():
         return sudo(
             'mysql -uroot '
             '-p`grep ^password /root/.my.cnf | head -1 | awk \'{{print $3}}\'` '
             '-e"{0}"'.format(query))
     else:
         return sudo('mysql -uroot ' '-e"{0}"'.format(query))
Exemple #22
0
    def start(self, targets=None):
        if targets is not None:
            self.targets = targets

        filer.mkdir(CONF._remote_stats_dir)
        dstat_csv = CONF._remote_stats_dir + '/dstat.csv'
        dstat_out = CONF._remote_stats_dir + '/dstat.out'
        sudo("rm -rf {0}".format(dstat_csv))
        sudo("sh -c 'dstat -tTlpyirdfmsgn --tcp --socket --vm --lock --aio --fs --ipc --output {0} > {1} &'".format(dstat_csv, dstat_out), pty=False)
Exemple #23
0
    def setup_peer(self):
        """
        require serial task.
        """

        data = self.init()
        for host in data["hosts"]:
            if host != env.host:
                sudo("gluster peer probe {0}".format(host))
Exemple #24
0
    def setup_peer(self):
        """
        require serial task.
        """

        data = self.init()
        for host in data['hosts']:
            if host != env.host:
                sudo('gluster peer probe {0}'.format(host))
Exemple #25
0
def setup():
    print '{0}: hello'.format(env.host)
    print env.cluster
    run('hostname')
    sudo('hostname')
    Package('memcached').install()
    Service('memcached').start()
    # run('touch /tmp/test')
    filer.file('/etc/memcached.conf')
    filer.template('/etc/memcached.conf')
Exemple #26
0
    def append(self, txt, start=None, end=None):
        # TODO 正規表現による行指定も冪等性持ってできるようにする
        if start:
            if end:
                if type(start) is IntType:
                    result_start = sudo('sed -n "{0}p" {1}'.format(
                        start + 1, self.file_path))
                    result_end = sudo('sed -n "{0}p" {1}'.format(
                        end + 1, self.file_path))

                    if result_start != txt and result_end != txt:
                        sudo('sed -i "{0},{1}a {2}" {3}'.format(
                            start, end, txt, self.file_path))
            else:
                if type(start) is IntType:
                    result = sudo('sed -n "{0}p" {1}'.format(
                        start + 1, self.file_path))

                    if result != txt:
                        sudo('sed -i "{0}a {1}" {2}'.format(
                            start, txt, self.file_path))
        else:
            sudo('grep "{0}" {1} || echo "{0}" >> {1}'.format(
                txt, self.file_path))

        return self
Exemple #27
0
    def setup(self):
        data = self.init()
        if RE_CENTOS.match(env.node['os']):
            sudo('setenforce 0')

        self.install_packages()
        filer.mkdir('/var/log/corosync')
        Service('haproxy').disable()

        sudo("sh -c \"echo 'hacluster:{0}' |chpasswd\"".format(
            data['ha_password']))
        Service('pcsd').start().enable()
Exemple #28
0
 def wrap_cmd(self, option, **kwargs):
     with api.warn_only():
         service_manager = env.node['service_manager']
         if service_manager == 'systemd':
             self.result = sudo('systemctl {0} {1}'.format(option, self.name), **kwargs)
         elif service_manager == 'service':
             self.result = sudo('/etc/init.d/{1} {0}'.format(option, self.name), **kwargs)
         elif service_manager == 'upstart':
             self.result = sudo('initctl {0} {1}'.format(option, self.name), **kwargs)
         else:
             self.unsupport()
         return self
Exemple #29
0
def setup():
    git.setup()
    sudo('rm -rf /tmp/git')
    git.sync('https://github.com/fabrickit-fablib/git.git')
    git.sync('https://github.com/fabrickit-fablib/git.git', dest='/tmp/git')
    git.sync('https://github.com/fabrickit-fablib/git.git', dest='/tmp/git')
    git.sync('https://github.com/fabrickit-fablib/git.git',
             dest='/tmp/git-sudo',
             use_sudo=True)
    git.sync('https://github.com/fabrickit-fablib/git.git',
             dest='/tmp/git-sudo',
             use_sudo=True)
Exemple #30
0
    def setup(self):
        data = self.init()

        if self.is_tag('package'):
            self.install_packages()
            self.python.setup()
            self.python.setup_package(**self.package)

        if self.is_tag('conf'):
            # setup conf files
            if filer.template(
                    '/etc/swift/swift.conf',
                    src='{0}/swift/swift.conf.j2'.format(data['version']),
                    data=data):
                self.handlers['restart_swift-proxy-server'] = True

            if filer.template(
                    '/etc/swift/proxy-server.conf',
                    src='{0}/swift/proxy-server.conf.j2'.format(data['version']),
                    data=data):
                self.handlers['restart_swift-proxy-server'] = True

            if filer.template(
                    '/etc/swift/account-server.conf',
                    src='{0}/swift/account-server.conf.j2'.format(data['version']),
                    data=data):
                self.handlers['restart_swift-account-server'] = True

            if filer.template(
                    '/etc/swift/container-server.conf',
                    src='{0}/swift/container-server.conf.j2'.format(data['version']),
                    data=data):
                self.handlers['restart_swift-container-server'] = True

            if filer.template(
                    '/etc/swift/object-server.conf',
                    src='{0}/swift/object-server.conf.j2'.format(data['version']),
                    data=data):
                self.handlers['restart_swift-object-server'] = True

        if self.is_tag('data'):
            filer.mkdir('/mnt/swift/main')
            for ring in ['account', 'object', 'container']:
                port = data['{0}_port'.format(ring)]
                sudo('cd /etc/swift &&'
                     '[ -e {0}.builder ] || swift-ring-builder {0}.builder create 9 1 1 && '
                     '[ -e {0}.ring.gz ] || swift-ring-builder {0}.builder add z1-127.0.0.1:{1}/main 100 &&'  # noqa
                     '[ -e {0}.ring.gz ] || swift-ring-builder {0}.builder rebalance'.format(ring, port))  # noqa

        if self.is_tag('conf', 'service'):
            self.enable_services().start_services(pty=False)
            self.exec_handlers()
Exemple #31
0
    def disable(self, **kwargs):
        with api.warn_only():
            init_manager = env.node['init_manager']
            if init_manager == 'systemd':
                self.result = sudo('systemctl disable {0}'.format(self.name), **kwargs)
            elif init_manager == 'chkconfig':
                self.result = sudo('chkconfig {0} off'.format(self.name), **kwargs)
            elif init_manager == 'update-rc.d':
                self.result = sudo('update-rc.d -f {0} remove'.format(self.name), **kwargs)
            else:
                self.unsupport()

        return self
Exemple #32
0
    def setup(self):
        """
        easy_install, pipをインストールします。
        また、pipはパッケージインストール時にソースからコンパイルするため、
        いくつかのdevelパッケージをインストールしておきます。
        """
        self.init()

        git.setup()
        self.install_packages()

        with api.warn_only():
            result = run('which easy_install')

        if result.return_code != 0:
            sudo('sh -c "cd /tmp/ && wget https://bootstrap.pypa.io/ez_setup.py -O - | python"')

        with api.warn_only():
            result = run('which pip')

        if result.return_code != 0:
            sudo('easy_install pip')

        if self.prefix != '/usr':
            sudo('pip install virtualenv')
            if not filer.exists(self.prefix):
                sudo('virtualenv {0} --system-site-packages'.format(self.prefix))
Exemple #33
0
def mkdir(dest, is_local=False, owner='root:root', mode='775', use_sudo=True):
    cmd_mkdir = 't={0} && mkdir -p $t'.format(dest)
    if is_local or env.is_local:
        if use_sudo:
            sudo("sh -c '{0} && chmod {1} $t && chown {2} $t'".format(
                cmd_mkdir, mode, owner))
        else:
            cmd(cmd_mkdir)

    elif use_sudo:
        sudo('{0} && chmod {1} $t && chown {2} $t'.format(
            cmd_mkdir, mode, owner))
    else:
        run('{0} $t'.format(cmd_mkdir, mode, owner))
Exemple #34
0
    def upgrade(self):
        with api.warn_only():
            if env.node['package_manager'] == 'yum':
                self.result = sudo('yum upgrade {0} -y'.format(self.package_name))
            elif env.node['package_manager'] == 'apt':
                self.result = sudo('apt-get upgrade {0} -y'.format(self.package_name))
            else:
                self.unsupport()

        if self.result.return_code != 0:
            msg = 'Failed upgrade {0}.'.format(self.package_name)
            log.error(msg)
            raise Exception(msg)

        return self
Exemple #35
0
 def wrap_cmd(self, option, **kwargs):
     with api.warn_only():
         service_manager = env.node['service_manager']
         if service_manager == 'systemd':
             self.result = sudo(
                 'systemctl {0} {1}'.format(option, self.name), **kwargs)
         elif service_manager == 'service':
             self.result = sudo(
                 '/etc/init.d/{1} {0}'.format(option, self.name), **kwargs)
         elif service_manager == 'upstart':
             self.result = sudo('initctl {0} {1}'.format(option, self.name),
                                **kwargs)
         else:
             self.unsupport()
         return self
Exemple #36
0
def add(name, uid=None, group=None, gid=None):
    with api.warn_only():
        getent = sudo('getent passwd | grep ^{0}:'.format(name))
        if getent.return_code != 0:
            group_option = ''
            if group is not None:
                group_mod.add(group, gid=gid)
                group_option = '-g {0}'.format(group)

            if uid is None:
                sudo('useradd -M -s/bin/false {0} {1}'.format(
                    name, group_option))
            else:
                sudo('useradd -M -s/bin/false -u {1} {0} {2}'.format(
                    name, uid, group_option))
Exemple #37
0
    def disable(self, **kwargs):
        with api.warn_only():
            init_manager = env.node['init_manager']
            if init_manager == 'systemd':
                self.result = sudo('systemctl disable {0}'.format(self.name),
                                   **kwargs)
            elif init_manager == 'chkconfig':
                self.result = sudo('chkconfig {0} off'.format(self.name),
                                   **kwargs)
            elif init_manager == 'update-rc.d':
                self.result = sudo(
                    'update-rc.d -f {0} remove'.format(self.name), **kwargs)
            else:
                self.unsupport()

        return self
    def setup(self):
        self.init()

        sudo('setenforce 0')
        Editor('/etc/selinux/config').s('SELINUX=enforcing', 'SELINUX=disable')

        Service('firewalld').stop().disable()

        if self.is_tag('package'):
            self.install_packages()

            self.python.setup()
            self.python.setup_package(**self.package)

        if self.is_tag('conf'):
            self.dump_openstackrc
Exemple #39
0
    def upgrade(self):
        with api.warn_only():
            if env.node['package_manager'] == 'yum':
                self.result = sudo('yum upgrade {0} -y'.format(
                    self.package_name))
            elif env.node['package_manager'] == 'apt':
                self.result = sudo('apt-get upgrade {0} -y'.format(
                    self.package_name))
            else:
                self.unsupport()

        if self.result.return_code != 0:
            msg = 'Failed upgrade {0}.'.format(self.package_name)
            log.error(msg)
            raise Exception(msg)

        return self
Exemple #40
0
def exists(dest, is_local=False):
    cmd_exists = '[ -e {0} ]'.format(dest)
    if is_local or env.is_local:
        result, result_out = cmd(cmd_exists)
        return True if result == 0 else False
    else:
        with api.warn_only():
            return True if sudo(cmd_exists).return_code == 0 else False
Exemple #41
0
def exists(dest, is_local=False):
    cmd_exists = '[ -e {0} ]'.format(dest)
    if is_local or env.is_local:
        result, result_out = cmd(cmd_exists)
        return True if result == 0 else False
    else:
        with api.warn_only():
            return True if sudo(cmd_exists).return_code == 0 else False
Exemple #42
0
    def setup_pcs(self):
        data = self.init()
        if env.host == data['hosts'][0]:
            with api.warn_only():
                result = sudo("pcs cluster status")
                if result.return_code != 0:
                    ha_hosts = ' '.join(data['hosts'])
                    sudo("pcs cluster auth {0} -u hacluster -p {1}".format(
                        ha_hosts, data['ha_password']))

                    # pcs cluster setup で/etc/corosync/corosync.conf が自動生成される
                    sudo("pcs cluster setup --name hacluster {0}".format(ha_hosts))
                    sudo("pcs cluster start --all")
                    sudo("corosync-cfgtool -s")
Exemple #43
0
    def delete(self):
        data = self.data
        for i, vm in enumerate(data['libvirt_vms']):
            with api.warn_only():
                sudo("virsh net-update default delete ip-dhcp-host \"`virsh net-dumpxml default"
                     " | grep '{0}' | sed -e 's/^ *//'`\"".format(vm['ip']))
                sudo('virsh list | grep {0} && virsh destroy {0}'.format(vm['name']))
                sudo('virsh list --all | grep {0} && virsh undefine {0}'.format(vm['name']))

            instance_dir = os.path.join(self.instances_dir, vm['name'])
            sudo('rm -rf {0}'.format(instance_dir))
Exemple #44
0
    def wget_src_image(self, vm):
        images_dir = os.path.join(self.libvirt_dir, 'images')
        filer.mkdir(images_dir)

        src_image = vm['src_image'].rsplit('/', 1)[1]
        src_image_path = '{0}/{1}'.format(images_dir, src_image)
        src_image_format = 'qcow2'

        if src_image_path[-3:] == '.xz':
            src_image_path = src_image_path[:-3]
            src_image_format = 'xz'

        if not filer.exists(src_image_path):
            sudo('sh -c "cd {0} && wget {1}"'.format(images_dir, vm['src_image']))

            if src_image_format == 'xz':
                sudo('sh -c "cd {0} && xz -d {1}"'.format(images_dir, src_image))

        return src_image_path
Exemple #45
0
    def wget_src_image(self, vm):
        images_dir = os.path.join(self.libvirt_dir, 'images')
        filer.mkdir(images_dir)

        src_image = vm['src_image'].rsplit('/', 1)[1]
        src_image_path = '{0}/{1}'.format(images_dir, src_image)
        src_image_format = 'qcow2'

        if src_image_path[-3:] == '.xz':
            src_image_path = src_image_path[:-3]
            src_image_format = 'xz'

        if not filer.exists(src_image_path):
            sudo('cd {0} && wget {1}'.format(images_dir, vm['src_image']))

            if src_image_format == 'xz':
                sudo('cd {0} && xz -d {1}'.format(images_dir, src_image))

        return src_image_path
Exemple #46
0
    def setup_volume(self):
        """
        require serial task.
        """

        data = self.init()
        if data["hosts"][0] != env.host:
            return

        for volume in data["volume_map"].values():
            bricks = ""
            replica_option = "replica 2" if len(data["hosts"]) > 1 else ""
            for host in data["hosts"]:
                bricks += "{0}:{1} ".format(host, volume["brick"])
            sudo(
                "gluster volume info {0[name]} || gluster volume create "
                "{0[name]} {1} {2} force".format(volume, replica_option, bricks)
            )
            sudo("gluster volume info {0[name]} | grep Started" " || gluster volume start {0[name]}".format(volume))
Exemple #47
0
    def setup_volume(self):
        """
        require serial task.
        """

        data = self.init()
        if data['hosts'][0] != env.host:
            return

        for volume in data['volume_map'].values():
            bricks = ''
            replica_option = 'replica 2' if len(data['hosts']) > 1 else ''
            for host in data['hosts']:
                bricks += '{0}:{1} '.format(host, volume['brick'])
            sudo('gluster volume info {0[name]} || gluster volume create '
                 '{0[name]} {1} {2} force'.format(
                     volume, replica_option, bricks))
            sudo('gluster volume info {0[name]} | grep Started'
                 ' || gluster volume start {0[name]}'.format(
                     volume))
Exemple #48
0
    def install(self, option=''):
        with api.warn_only():
            if env.node['package_manager'] == 'yum':
                self.result = run('rpm -q {0}'.format(self.package_name))
                if not self.result.return_code == 0:
                    if self.path:
                        self.result = sudo('yum install {0} -y {1}'.format(
                            self.path, option))
                    else:
                        self.result = sudo('yum install {0} -y {1}'.format(
                            self.package_name, option))

            elif env.node['package_manager'] == 'apt':
                splited_name = self.package_name.split('=')
                if len(splited_name) > 1:
                    package_name = splited_name[0]
                    version = splited_name[1]
                else:
                    package_name = self.package_name
                    version = ''

                self.result = run('dpkg -l {0} | grep "^ii *{1}"'.format(
                    package_name, version))
                if not self.result.return_code == 0:
                    if self.path:
                        self.result = sudo(
                            'RUNLEVEL=1 apt-get install {0} -y {1}'.format(
                                self.path, option))
                    else:
                        self.result = sudo(
                            'RUNLEVEL=1 apt-get install {0} -y {1}'.format(
                                self.package_name, option))
            else:
                self.unsupport()

        if self.result.return_code != 0:
            msg = 'Failed install {0}.'.format(self.package_name)
            log.error(msg)
            raise Exception(msg)

        return self
    def setup(self):
        data = self.init()

        if self.is_tag('package'):
            self.python.setup()
            self.python.setup_package(**self.package)

        if self.is_tag('conf'):
            # setup conf files
            if filer.template(
                    '/etc/designate/designate.conf',
                    src='{0}/designate.conf.j2'.format(data['version']),
                    data=data):
                self.handlers['restart_ironic-*'] = True

        if self.is_tag('data') and env.host == env.hosts[0]:
            sudo('{0}/bin/designate-manage database sync'.format(self.prefix))

        if self.is_tag('conf', 'service'):
            self.enable_services().start_services(pty=False)
            self.exec_handlers()
Exemple #50
0
    def setup(self):
        data = self.init()

        if self.is_tag('package'):
            self.python.setup()
            self.python.setup_package(**self.package)

        if self.is_tag('conf'):
            if filer.template(
                '/etc/aodh/aodh.conf',
                src='{0}/aodh.conf.j2'.format(data['version']),
                data=data,
            ):
                self.handlers['restart_aodh-*'] = True

        if self.is_tag('data') and env.host == env.hosts[0]:
            sudo('{0}/bin/aodh-dbsync'.format(self.prefix))

        if self.is_tag('conf', 'service'):
            self.enable_services().start_services(pty=False)
            self.exec_handlers()
Exemple #51
0
    def setup(self):
        data = self.init()
        self.install_packages()

        var_dir = CONF.client.package_var_dir
        common_repo = '{0}/fabkit-repo-common'.format(var_dir)
        server_repo = '{0}/fabkit-repo-server'.format(var_dir)
        filer.template('{0}/fabfile.ini'.format(server_repo), data=data)

        sudo('rm -rf {0}/fabfile && '
             'cp -r {1}/fabfile {0}/fabfile && '
             'chown -R {2}:{3} {0}/fabfile'.format(server_repo, common_repo,
                                                   data['user'],
                                                   data['group']))

        if re.match('CentOS .*', env.node['os']):
            log_prefix = '/var/log/httpd/{0}'.format(env.user)
            data.update({
                'repo': server_repo,
                'python_path': self.python.get_site_packages(),
                'error_log': 'fabkit-error.log'.format(log_prefix),
                'custom_log': 'fabkit-access.log'.format(log_prefix),
            })

            if filer.template(
                    src='httpd.conf',
                    dest='/etc/httpd/conf.d/fabkit_httpd.conf'.format(
                        env.user),
                    data=data):
                self.handlers['restart_httpd'] = True

        self.exec_handlers()

        if env.host == env.hosts[0]:
            sudo("cd {0}/fabfile/core/webapp && "
                 "{1}/bin/python manage.py migrate --noinput".format(
                     server_repo, CONF.client.package_prefix))

            sudo(
                "cd {0}/fabfile/core/webapp && "
                "echo \"from django.contrib.auth.models import User;"
                "User.objects.create_superuser('admin', '*****@*****.**', 'admin')\""
                " | {1}/bin/python manage.py shell".format(
                    server_repo, CONF.client.package_prefix))

        self.start_services().enable_services()

        self.restart_services()

        sudo('/opt/fabkit/bin/fabserver -l')
Exemple #52
0
    def delete(self):
        data = self.data
        for i, vm in enumerate(data['libvirt_vms']):
            with api.warn_only():
                self.pdns.delete_record('{0}.{1}'.format(vm['name'], CONF.network.domain))
                for port in vm['ports']:
                    if port['ip'] == 'none':
                        continue

                if sudo('virsh list | grep {0}'.format(vm['name'])).return_code == 0:
                    sudo('virsh destroy {0}'.format(vm['name']))
                if sudo('virsh list --all | grep {0}'.format(vm['name'])).return_code == 0:
                    sudo('virsh undefine {0}'.format(vm['name']))

            instance_dir = os.path.join(self.instances_dir, vm['name'])
            sudo('rm -rf {0}'.format(instance_dir))
Exemple #53
0
def sync(url, branch='master', dest=None, user=None):
    if not dest:
        name = url.rsplit('/', 1)[1]
        dest = os.path.join(tmp_dest, name)

    if not filer.exists(dest):
        with api.cd('/tmp'):
            expect(
                'git clone -b {0} {1} {2}'.format(branch, url, dest),
                expects=[
                    [
                        'Are you sure you want to continue connecting (yes/no)?',
                        'yes\\n'
                    ],
                ],
                user=user)
    else:
        if user is not None:
            sudo('cd {0} && git pull'.format(dest), user=user)
        else:
            run('cd {0} && git pull'.format(dest))

    return dest
Exemple #54
0
    def create_configiso(self, vm, instance_dir):
        data = self.data

        template_data = {
            'user': CONF.job_user,
            'password': CONF.job_password,
            'vm': vm,
            'gateway': data['libvirt']['gateway'],
            'netmask': data['libvirt']['netmask'],
        }

        metadata_path = '{0}/meta-data'.format(instance_dir)
        userdata_path = '{0}/user-data'.format(instance_dir)
        configiso_path = '{0}/config.iso'.format(instance_dir)

        src_metadata_path = os.path.join(self.template_dir, 'meta-data')
        src_userdata_path = os.path.join(self.template_dir, vm['template'])
        filer.template(metadata_path, src_file=src_metadata_path, data=template_data)
        filer.template(userdata_path, src_file=src_userdata_path, data=template_data)
        if not filer.exists(configiso_path):
            sudo('genisoimage -o {0} -V cidata -r -J {1} {2}'.format(
                configiso_path, metadata_path, userdata_path))

        return configiso_path
Exemple #55
0
 def substitute(self, pattern, txt, option='', start=None, end=None):
     if start:
         if end:
             sudo('sed -i "{0},{1}s/{2}/{3}/{4}" {5}'.format(
                 start, end, pattern, txt, option, self.file_path))
         else:
             sudo('sed -i "{0}s/{1}/{2}/{3}" {4}'.format(
                 start, pattern, txt, option, self.file_path))
     else:
         sudo('sed -i "s/{0}/{1}/{2}" {3}'.format(pattern, txt, option,
                                                  self.file_path))
Exemple #56
0
def set(key_path, file):
    tmp_file = '{0}{1}'.format(CONF.remote_tmp_dir, file)
    local_file = '{0}{1}'.format(CONF._filebag_dir, key_path)
    sudo('mkdir -p {0}'.format(os.path.direname(tmp_file)))
    sudo('cp {0} {1}'.format(file, tmp_file))
    sudo('chmod 666 {0}'.format(tmp_file))
    api.get(tmp_file, '/tmp/authkey')
    sudo('rm {0}'.format(tmp_file))

    key, data_file = __get_key_file(key_path)
    data_dir = os.path.dirname(data_file)

    if not os.path.exists(data_dir):
        os.makedirs(data_dir)

    databag = get_databag(key_path)
    databag.update({key: value})

    with open(data_file, 'w') as f:
        yaml.dump(databag, f)

    return
Exemple #57
0
    def setup(self):
        data = self.init()

        if self.is_tag('conf'):
            if env.node['package_manager'] == 'yum':
                if filer.template('/etc/my.cnf.d/server.cnf', data=data):
                    self.handlers['restart_mariadb'] = True
            elif env.node['package_manager'] == 'apt':
                pass

        if self.is_tag('service'):
            if self.data['hosts'][0] == env.host:
                with api.warn_only():
                    result = sudo('systemctl status mariadb')
                    if result.return_code != 0:
                        sudo('galera_new_cluster')
                    else:
                        self.exec_handlers()
                self.enable_services().start_services()
            else:
                self.enable_services().start_services()
                self.exec_handlers()

        if self.is_tag('data'):
            # init root_password
            if not filer.exists('/root/.my.cnf'):
                root_password = data['root_password']
                if data['hosts'][0] == env.host:
                    if self.is_ubuntu():
                        sudo('mysqladmin password {0} -uroot -ptmppass'.format(
                            root_password))
                    else:
                        sudo('mysqladmin password {0} -uroot'.format(
                            root_password))
                filer.template('/root/.my.cnf',
                               data={'root_password': root_password})

            if data['hosts'][0] == env.host:
                self.create_users()
                self.delete_default_users()
                self.create_databases()
Exemple #58
0
    def insert(self, txt, start=None, end=None):
        # TODO 正規表現による行指定も冪等性持ってできるようにする
        if start:
            if end:
                if type(start) is IntType:
                    result_start = sudo('sed -n "{0}p" {1}'.format(
                        start, self.file_path))
                    result_end = sudo('sed -n "{0}p" {1}'.format(
                        end, self.file_path))
                    if result_start != txt and result_end != txt:
                        sudo('sed -i "{0},{1}i {2}" {3}'.format(
                            start, end, txt, self.file_path))
            else:
                if type(start) is IntType:
                    result = sudo('sed -n "{0}p" {1}'.format(
                        start, self.file_path))

                    if result != txt:
                        sudo('sed -i "{0}i {1}" {2}'.format(
                            start, txt, self.file_path))

        return self