Exemplo n.º 1
0
def prepare_for_install(settings_dict,
                     envs=None,
                     verbose=None,
                     proxy=None,
                     key=None):
    envs = envs or {}
    verbose = verbose or []
    if settings_dict['user'] != 'root':
        use_sudo_flag = True
        run_func = sudo
    else:
        use_sudo_flag = False
        run_func = run
    with settings(**settings_dict), hide(*verbose), shell_env(**envs):
        if exists("/etc/gai.conf"):
            append("/etc/gai.conf", "precedence ::ffff:0:0/96  100", use_sudo=use_sudo_flag)
        warn_if_fail(run_func("yum -y update"))
        warn_if_fail(run_func("yum -y install -y git python-pip vim ntpdate patch"))
        update_time(run_func)
        warn_if_fail(run_func("ssh-keygen -f ~/.ssh/id_rsa -t rsa -N ''"))
        warn_if_fail(run_func("cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys"))
        append("/etc/ssh/ssh_config",
               "\nStrictHostKeyChecking no\nUserKnownHostsFile=/dev/null",
               use_sudo=use_sudo_flag)
        #warn_if_fail(run_func("/bin/systemctl stop  NetworkManager.service"))
        #warn_if_fail(run_func("/bin/systemctl disable NetworkManager.service"))
        append("~/.bashrc", "export TERM=xterm")
        if key:
            warn_if_fail(run_func("echo '%s' >> ~/.ssh/authorized_keys" % key))
        return run_func("cat ~/.ssh/id_rsa.pub")
Exemplo n.º 2
0
 def write(text, path, filename, sudo):
     fd = StringIO(text)
     warn_if_fail(put(fd, os.path.join(path, filename), use_sudo=sudo))
     warn_if_fail(
         put(fd,
             os.path.join(path, filename.replace("-", "_")),
             use_sudo=sudo))
Exemplo n.º 3
0
def prepare_answers(path, topo, config):
    with NamedTemporaryFile() as temp:
        warn_if_fail(get(path, temp.name))
        temp.flush()
        parser = SafeConfigParser()
        parser.optionxform = str
        parser.read(temp.name)
    parser.set("general", "CONFIG_PROVISION_DEMO", "y")
    parser.set("general", "CONFIG_PROVISION_TEMPEST", "y")
    parser.set("general", "CONFIG_PROVISION_TEMPEST_REPO_REVISION", "master")
    parser.set("general", "CONFIG_KEYSTONE_ADMIN_PW", "Cisco123")
    parser.set("general", "CONFIG_KEYSTONE_DEMO_PW", "secret")
    parser.set("general", "CONFIG_DEBUG_MODE", "y")
    parser.set("general", "CONFIG_NTP_SERVERS", "10.81.254.202,ntp.esl.cisco.com")
    parser.set("general", "CONFIG_NOVA_NETWORK_DEFAULTFLOATINGPOOL", "public")
    if topo == "2role":
        parser.set("general", "CONFIG_CONTROLLER_HOST", config['servers']['control-server'][0]['ip'])
        parser.set("general", "CONFIG_COMPUTE_HOSTS", config['servers']['compute-server'][0]['ip'])
    if topo == "3role":
        parser.set("general", "CONFIG_CONTROLLER_HOST", config['servers']['build-server'][0]['ip'])
        parser.set("general", "CONFIG_NETWORK_HOSTS", config['servers']['control-server'][0]['ip'])
        parser.set("general", "CONFIG_COMPUTE_HOSTS", config['servers']['compute-server'][0]['ip'])
    with open("installed_answers", "w") as f:
        parser.write(f)
    warn_if_fail(put("installed_answers", "~/installed_answers"))
Exemplo n.º 4
0
def make_local(filepath, sudo_flag, opts):
    ipversion = "4+6" if opts.ipversion == 64 else str(opts.ipversion)
    mgmt = "4+6" if opts.mgmt == 64 else str(opts.mgmt)
    tempest = "" if opts.tempest_disbale else """
enable_service tempest
TEMPEST_REPO={repo}
TEMPEST_BRANCH={branch}""".format(repo=opts.repo, branch=opts.branch)

    conf = """[[local|localrc]]
ADMIN_PASSWORD=Cisco123
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
SERVICE_TOKEN=1112f596-76f3-11e3-b3b2-e716f9080d50
MYSQL_PASSWORD=nova
ENABLED_SERVICES=g-api,g-reg,key,n-api,n-crt,n-obj,n-cpu,n-cond,cinder,c-sch,c-api,c-vol,n-sch,n-novnc,n-xvnc,n-cauth,horizon,rabbit
enable_service mysql
disable_service n-net
enable_service q-svc
enable_service q-agt
enable_service q-l3
enable_service q-dhcp
enable_service q-meta
enable_service q-lbaas
enable_service neutron
{tempest}
NOVA_USE_NEUTRON_API=v2
VOLUME_BACKING_FILE_SIZE=2052M
API_RATE_LIMIT=False
VERBOSE=True
DEBUG=True
LOGFILE=/tmp/stack.sh.log
USE_SCREEN=True
SCREEN_LOGDIR=/opt/stack/logs
IP_VERSION={ipversion}
MGMT_NET={mgmt}
IPV6_PRIVATE_RANGE=2001:dead:beef:deed::/64
IPV6_PRIVATE_NETWORK_GATEWAY=2001:dead:beef:deed::1
REMOVE_PUBLIC_BRIDGE=False
RECLONE=True
#OFFLINE=True
""".format(ipversion=ipversion, mgmt=mgmt, tempest=tempest)
    fd = StringIO(conf)
    warn_if_fail(put(fd, filepath, use_sudo=sudo_flag))
def make_local(filepath, sudo_flag, opts):
    ipversion = "4+6" if opts.ipversion == 64 else str(opts.ipversion)
    mgmt = "4+6" if opts.mgmt == 64 else str(opts.mgmt)
    tempest = "" if opts.tempest_disbale else """
enable_service tempest
TEMPEST_REPO={repo}
TEMPEST_BRANCH={branch}""".format(repo=opts.repo, branch=opts.branch)

    conf = """[[local|localrc]]
ADMIN_PASSWORD=Cisco123
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
SERVICE_TOKEN=1112f596-76f3-11e3-b3b2-e716f9080d50
MYSQL_PASSWORD=nova
ENABLED_SERVICES=g-api,g-reg,key,n-api,n-crt,n-obj,n-cpu,n-cond,cinder,c-sch,c-api,c-vol,n-sch,n-novnc,n-xvnc,n-cauth,horizon,rabbit
enable_service mysql
disable_service n-net
enable_service q-svc
enable_service q-agt
enable_service q-l3
enable_service q-dhcp
enable_service q-meta
enable_service q-lbaas
enable_service neutron
{tempest}
NOVA_USE_NEUTRON_API=v2
VOLUME_BACKING_FILE_SIZE=2052M
API_RATE_LIMIT=False
VERBOSE=True
DEBUG=True
LOGFILE=/tmp/stack.sh.log
USE_SCREEN=True
SCREEN_LOGDIR=/opt/stack/logs
IP_VERSION={ipversion}
MGMT_NET={mgmt}
IPV6_PRIVATE_RANGE=2001:dead:beef:deed::/64
IPV6_NETWORK_GATEWAY=2001:dead:beef:deed::1
REMOVE_PUBLIC_BRIDGE=False
RECLONE=True
#OFFLINE=True
""".format(ipversion=ipversion, mgmt=mgmt, tempest=tempest)
    fd = StringIO(conf)
    warn_if_fail(put(fd, filepath, use_sudo=sudo_flag))
Exemplo n.º 6
0
def run_services(host, settings_dict, envs=None, verbose=None, config=None):
    """
        Install OS with COI on other servers

    :param host: configuration of current lab box
    :param settings_dict: settings dictionary for Fabric
    :param envs: environment variables to inject when executing job
    :param verbose: if to hide all output or print everything
    :param config: configurations of all boxes for /etc/hosts
    """
    envs = envs or {}
    verbose = verbose or []
    if settings_dict['user'] != 'root':
        run_func = sudo
        use_sudo_flag = True
    else:
        run_func = run
        use_sudo_flag = False
    print >> sys.stderr, "FABRIC connecting to", settings_dict[
        "host_string"], host["hostname"]
    with settings(**settings_dict), hide(*verbose), shell_env(**envs):
        with cd("/root/"):
            update_time(run_func)
            run_func("apt-get update")
            run_func('DEBIAN_FRONTEND=noninteractive apt-get -y '
                     '-o Dpkg::Options::="--force-confdef" -o '
                     'Dpkg::Options::="--force-confold" dist-upgrade')
            # prepare /etc/hosts
            if config:
                append("/etc/hosts", prepare_hosts(config))
            run_func("apt-get install -y git")
            run_func(
                "git clone -b icehouse https://github.com/CiscoSystems/puppet_openstack_builder"
            )
            # use latest, not i.0 release
            #with cd("/root/puppet_openstack_builder"):
            #        run_func('git checkout i.0')
            sed("/root/puppet_openstack_builder/install-scripts/cisco.install.sh",
                "icehouse/snapshots/i.0",
                "icehouse-proposed",
                use_sudo=use_sudo_flag)
            sed("/root/puppet_openstack_builder/data/hiera_data/vendor/cisco_coi_common.yaml",
                "/snapshots/i.0",
                "-proposed",
                use_sudo=use_sudo_flag)
            with cd("/root/puppet_openstack_builder/install-scripts"):
                warn_if_fail(run_func("./setup.sh"))
                warn_if_fail(run_func('puppet agent --enable'))
                warn_if_fail(
                    run_func(
                        "puppet agent -td --server=build-server.domain.name --pluginsync"
                    ))
                collect_logs(run_func=run_func, hostname=host["hostname"])
Exemplo n.º 7
0
def install_devstack(settings_dict,
                     envs=None,
                     verbose=None,
                     proxy=None,
                     topo=None,
                     config=None):
    envs = envs or {}
    verbose = verbose or []
    if settings_dict['user'] != 'root':
        use_sudo_flag = True
        run_func = sudo
    else:
        use_sudo_flag = False
        run_func = run
    with settings(**settings_dict), hide(*verbose), shell_env(**envs):
        warn_if_fail(run_func("yum install -y http://rdo.fedorapeople.org/rdo-release.rpm"))
        warn_if_fail(run_func("yum install -y openstack-packstack"))

        warn_if_fail(run_func("packstack --gen-answer-file=~/answers.txt"))
        prepare_answers("~/answers.txt", topo=topo, config=config)
        # Workaround for Centos 7
        if contains("/etc/redhat-release", "CentOS Linux release 7"):
            patch = os.path.join(os.path.dirname(__file__), "centos7.patch")
            warn_if_fail(put(patch, "~/centos7.patch"))
            with cd("/usr/share/openstack-puppet"):
                run_func("patch -p1 < ~/centos7.patch")
        run_func("packstack --answer-file=~/installed_answers")
        run_func("iptables -D INPUT -j REJECT --reject-with icmp-host-prohibited")
        if exists('~/keystonerc_admin'):
            get('~/keystonerc_admin', "./openrc")
        else:
            print (red("No openrc file, something went wrong! :("))
        if exists('~/keystonerc_demo'):
            get('~/keystonerc_demo', "./openrc_demo")
        if exists('~/packstack-answers-*'):
            get('~/packstack-answers-*', ".")
        collect_logs(run_func=run_func, hostname='build_box', clean=True)
        print (green("Finished!"))
        return True
Exemplo n.º 8
0
def run_services(host,
                 settings_dict,
                 envs=None,
                 verbose=None,
                 config=None):
    """
        Install OS with COI on other servers

    :param host: configuration of current lab box
    :param settings_dict: settings dictionary for Fabric
    :param envs: environment variables to inject when executing job
    :param verbose: if to hide all output or print everything
    :param config: configurations of all boxes for /etc/hosts
    """
    envs = envs or {}
    verbose = verbose or []
    if settings_dict['user'] != 'root':
        run_func = sudo
        use_sudo_flag = True
    else:
        run_func = run
        use_sudo_flag = False
    print >> sys.stderr, "FABRIC connecting to", settings_dict["host_string"], host["hostname"]
    with settings(**settings_dict), hide(*verbose), shell_env(**envs):
        with cd("/root/"):
            update_time(run_func)
            run_func("apt-get update")
            run_func('DEBIAN_FRONTEND=noninteractive apt-get -y '
                     '-o Dpkg::Options::="--force-confdef" -o '
                     'Dpkg::Options::="--force-confold" dist-upgrade')
            # prepare /etc/hosts
            if config:
                append("/etc/hosts", prepare_hosts(config))
            run_func("apt-get install -y git")
            run_func("git clone -b icehouse https://github.com/CiscoSystems/puppet_openstack_builder")
            # use latest, not i.0 release
            #with cd("/root/puppet_openstack_builder"):
            #        run_func('git checkout i.0')
            sed("/root/puppet_openstack_builder/install-scripts/cisco.install.sh",
                            "icehouse/snapshots/i.0",
                            "icehouse-proposed", use_sudo=use_sudo_flag)
            sed("/root/puppet_openstack_builder/data/hiera_data/vendor/cisco_coi_common.yaml",
                            "/snapshots/i.0",
                            "-proposed", use_sudo=use_sudo_flag)
            with cd("/root/puppet_openstack_builder/install-scripts"):
                warn_if_fail(run_func("./setup.sh"))
                warn_if_fail(run_func('puppet agent --enable'))
                warn_if_fail(run_func("puppet agent -td --server=build-server.domain.name --pluginsync"))
                collect_logs(run_func=run_func, hostname=host["hostname"])
Exemplo n.º 9
0
 def write(text, path, filename, sudo):
     fd = StringIO(text)
     warn_if_fail(put(fd, os.path.join(path, filename), use_sudo=sudo))
     warn_if_fail(put(fd, os.path.join(path, filename.replace("-", "_")), use_sudo=sudo))
Exemplo n.º 10
0
def install_devstack(settings_dict,
                     envs=None,
                     verbose=None,
                     proxy=None,
                     patch=False,
                     opts=None):
    envs = envs or {}
    verbose = verbose or []
    with settings(**settings_dict), hide(*verbose), shell_env(**envs):
        if exists("/etc/gai.conf"):
            append("/etc/gai.conf", "precedence ::ffff:0:0/96  100", use_sudo=True)
        if proxy:
            warn_if_fail(put(StringIO('Acquire::http::proxy "http://proxy.esl.cisco.com:8080/";'),
                             "/etc/apt/apt.conf.d/00proxy",
                             use_sudo=True))
            warn_if_fail(put(StringIO('Acquire::http::Pipeline-Depth "0";'),
                             "/etc/apt/apt.conf.d/00no_pipelining",
                             use_sudo=True))
        update_time(sudo)
        if opts.ipversion != 4:
            sudo("/sbin/sysctl -w net.ipv6.conf.all.forwarding=1")
            append("/etc/sysctl.conf", "net.ipv6.conf.all.forwarding=1", use_sudo=True)
        warn_if_fail(sudo("apt-get update"))
        warn_if_fail(sudo("apt-get install -y git python-pip"))
        warn_if_fail(run("git config --global user.email '*****@*****.**';"
                         "git config --global user.name 'Test Node'"))
        run("rm -rf ~/devstack")
        quit_if_fail(run("git clone https://github.com/openstack-dev/devstack.git"))
        make_local("devstack/local.conf", sudo_flag=False, opts=opts)
        with cd("devstack"):
            warn_if_fail(run("./stack.sh"))
            if patch:
                apply_changes()
        if exists('~/devstack/openrc'):
            get('~/devstack/openrc', "./openrc")
        else:
            print (red("No openrc file, something went wrong! :("))
        if exists('/opt/stack/tempest/etc/tempest.conf'):
            get('/opt/stack/tempest/etc/tempest.conf', "./tempest.conf")
        else:
            print (red("No openrc file, something went wrong! :("))
        print (green("Finished!"))
        return True
Exemplo n.º 11
0
def install(aggregated_configs, apt_cacher_proxy=None,
            patch="", proxy="", devstack_repo="", devstack_br="", quiet=False):
    verbose = []
    fab_settings = aggregated_configs[env.host]["fab_settings"]
    local_conf = aggregated_configs[env.host]["devstack_config"]
    config_files = aggregated_configs[env.host]["config_files"]
    hostname = aggregated_configs[env.host]["hostname"]
    exec_command_before = aggregated_configs[env.host]["exec_commands_before"]
    exec_command_after = aggregated_configs[env.host]["exec_commands_after"]
    if quiet:
        verbose = ['output', 'running', 'warnings']
    with settings(**fab_settings), hide(*verbose):
        if exists("/etc/gai.conf"):
            append("/etc/gai.conf", "precedence ::ffff:0:0/96  100",
                   use_sudo=True)
        if proxy:
            warn_if_fail(put(StringIO(
                'Acquire::http::proxy "http://proxy.esl.cisco.com:8080/";'),
                             "/etc/apt/apt.conf.d/00proxy", use_sudo=True))
            warn_if_fail(put(StringIO('Acquire::http::Pipeline-Depth "0";'),
                             "/etc/apt/apt.conf.d/00no_pipelining",
                             use_sudo=True))
        if apt_cacher_proxy:
            warn_if_fail(
                put(StringIO('Acquire::http { Proxy "{url}"; };'.format(
                    url=apt_cacher_proxy)),
                    "/etc/apt/apt.conf.d/02proxy", use_sudo=True))
        update_time(sudo)
        warn_if_fail(sudo("apt-get update"))
        warn_if_fail(sudo("apt-get install -y git python-pip"))
        warn_if_fail(
            run("git config --global user.email '*****@*****.**';"
                "git config --global user.name 'Test Node'"))
        if exists("devstack"):
            with cd("devstack"):
                warn_if_fail(run("./unstack.sh"))
        run("rm -rf ~/devstack")
        quit_if_fail(run(
            "git clone -b {branch} {devstack}".format(devstack=devstack_repo,
                                                      branch=devstack_br)))
        if patch:
            with cd("devstack"):
                warn_if_fail(
                    run(
                        "git fetch https://review.openstack.org/openstack-dev/devstack {patch} "
                        "&& git cherry-pick FETCH_HEAD".format(patch=patch)))
        warn_if_fail(put(StringIO(local_conf), "devstack/local.conf"))
        if exec_command_before:
            run(exec_command_before)
        if config_files:
            for path, conf_file in config_files.iteritems():
                warn_if_fail(put(StringIO(conf_file), path))
        with cd("devstack"):
            warn_if_fail(run("./stack.sh"))
        path = os.environ.get("WORKSPACE", os.getcwd())
        if os.path.exists(
                "{path}/id_rsa_{key}".format(path=path, key=hostname)):
            path = os.environ.get("WORKSPACE", os.getcwd())
            put("{path}/id_rsa_{key}".format(path=path, key=hostname),
                "~/.ssh/id_rsa")
            put("{path}/id_rsa_{key}.pub".format(path=path, key=hostname),
                "~/.ssh/id_rsa.pub")
            put("{0}/id_rsa_all.pub".format(path), "/tmp/all_authorized")
            warn_if_fail(run("chmod 500 ~/.ssh/id_rsa"))
            warn_if_fail(
                run("cat /tmp/all_authorized >> ~/.ssh/authorized_keys"))
            append("/etc/ssh/ssh_config",
                   "\nStrictHostKeyChecking no\nUserKnownHostsFile=/dev/null",
                   use_sudo=True)
        if exec_command_after:
            run(exec_command_after)
        collect_logs(run, hostname)
        collect_logs_devstack("install_{host}".format(host=hostname))
Exemplo n.º 12
0
def apply_patches():
    warn_if_fail(run("git fetch https://review.openstack.org/openstack-dev/devstack "
    "refs/changes/87/87987/12 && git format-patch -1 FETCH_HEAD"))
Exemplo n.º 13
0
def prepare(host, topo_config_file, devstack_config_file, apt_cacher_proxy,
            ssh_key_file, gateway,
            user, password,
            branch, repo, tempest_disable, devstack_repo, devstack_br, patch,
            quiet):
    fab_settings = {"host_string": None, "abort_on_prompts": True,
                    "gateway": gateway,
                    "user": user, "password": password, "warn_only": True}
    tempest = "" if tempest_disable else TEMPEST_CONF.format(repo=repo,
                                                             branch=branch)
    extras = os.environ.get("QA_DEVSTACK_EXTRAS", "")
    local_ssh_key_file = os.path.join(os.path.dirname(__file__), "..",
                                      "libvirt-scripts", "id_rsa")
    fab_settings.update({"key_filename": ssh_key_file or local_ssh_key_file})
    devstack_config = yaml.load(devstack_config_file)
    with open(os.path.join(DEV_CONF_PATH, "devstack_template.yaml")) as f:
        devstack_template = yaml.load(f)
    if host:
        fab_settings.update({"host_string": host})
        topo_config = {
            'servers': {
            'devstack-server': [{"ip": host, "hostname": "devstack-server00"}]}}
    else:
        topo_config = yaml.load(topo_config_file)
        # Generate ssh-keys for new nodes
        with settings(warn_only=True, abort_on_prompts=True):
            path = os.environ.get("WORKSPACE", os.getcwd())
            warn_if_fail(local("rm {0}/id_rsa_*".format(path)))
            keys = len(topo_config['servers']['devstack-server']) or 1
            for i in range(keys):
                local("ssh-keygen -f {path}/id_rsa_{i} -t rsa -N ''".format(path=path,
                        i=topo_config['servers']['devstack-server'][i]['hostname']))
                local("cat  {path}/id_rsa_{i}.pub >> {path}/id_rsa_all.pub".format(
                    path=path, i=topo_config['servers']['devstack-server'][i]['hostname']))
    # Install control node first
    control_node = topo_config['servers']['devstack-server'][0]
    fab_settings["host_string"] = control_node["ip"]
    node_devstack_config = devstack_config["servers"][0]["local_conf"].format(
        control_node_ip=control_node["ip"],
        node_ip=control_node["ip"],
        tempest=tempest)
    devstack_full_config = devstack_template["TEMPLATE"].format(
        host_specific=node_devstack_config,
        extras=extras)
    config_files = devstack_config["servers"][0].get("files", None)
    exec_commands_before = devstack_config["servers"][0].get("commands_before")
    exec_commands_after = devstack_config["servers"][0].get("commands_after")
    node_configs = {control_node["ip"]: {
        "fab_settings": fab_settings, "devstack_config": devstack_full_config,
        "hostname": control_node["hostname"], "config_files": config_files,
        "exec_commands_before": exec_commands_before,
        "exec_commands_after": exec_commands_after
    }}
    execute(install, aggregated_configs=node_configs,
            apt_cacher_proxy=apt_cacher_proxy, patch=patch,
            devstack_repo=devstack_repo, devstack_br=devstack_br, quiet=quiet,
            hosts=control_node["ip"])
    # Install other nodes in parallel
    if len(topo_config["servers"]["devstack-server"]) > 1:
        nodes = []
        node_configs = {}
        for node, conf in zip(topo_config['servers']['devstack-server'][1:],
                              devstack_config["servers"][1:]):
            fab_settings["host_string"] = node["ip"]
            node_devstack_config = conf["local_conf"].format(
                control_node_ip=control_node["ip"],
                node_ip=node['ip'], tempest=tempest)
            devstack_full_config = devstack_template["TEMPLATE"].format(
                host_specific=node_devstack_config,
                extras=extras)
            config_files = conf.get("files", None)
            exec_commands_before = conf.get("commands_before")
            exec_commands_after = conf.get("commands_after")
            nodes.append(node["ip"])
            node_configs[node["ip"]] = {"fab_settings": fab_settings,
                                        "hostname": node["hostname"],
                                        "devstack_config": devstack_full_config,
                                        "config_files": config_files,
                                        "exec_commands_before": exec_commands_before,
                                        "exec_commands_after": exec_commands_after}
        execute(install, aggregated_configs=node_configs,
                apt_cacher_proxy=apt_cacher_proxy, patch=patch,
                devstack_repo=devstack_repo, devstack_br=devstack_br,
                quiet=quiet, hosts=nodes)
def apply_changes():
    warn_if_fail(run("./unstack.sh"))
    kill_services()
    apply_patches()
    warn_if_fail(run("./stack.sh"))
Exemplo n.º 15
0
def prepare_files(config, paths, use_sudo_flag):
    def prepare_fullha(config, ha_file):
        """ Prepare user.full_ha.file """
        conf = yaml.load(ha_file)
        net_ip = ".".join(
            (config['servers']['control-server'][0]['ip'].split(".")[:3]))
        vipc = net_ip + ".253"
        conf["coe::base::controller_hostname"] = "control-server"
        conf["horizon::keystone_url"] = change_ip_to(
            conf["horizon::keystone_url"], vipc)
        conf["controller_names"] = [
            c["hostname"] for c in config['servers']['control-server']
        ]
        conf["openstack-ha::load-balancer::controller_ipaddresses"] = [
            c["ip"] for c in config['servers']['control-server']
        ]
        conf["openstack-ha::load-balancer::swift_proxy_ipaddresses"] = [
            c["ip"] for c in config['servers']['swift-proxy']
        ]
        conf["openstack-ha::load-balancer::swift_proxy_names"] = [
            c["hostname"] for c in config['servers']['swift-proxy']
        ]
        vipsw = net_ip + ".252"
        conf[
            "openstack::swift::proxy::swift_proxy_net_ip"] = "%{ipaddress_eth1}"
        conf["openstack::swift::proxy::swift_memcache_servers"] = [
            i["ip"] + ":11211" for i in config['servers']['swift-proxy']
        ]
        conf["nova::memcached_servers"] = [
            i["ip"] + ":11211" for i in config['servers']['control-server']
        ]
        conf["rabbit_hosts"] = [
            i["hostname"] + ":5672"
            for i in config['servers']['control-server']
        ]
        conf["galera::galera_servers"] = [
            c["ip"] for c in config['servers']['control-server']
        ]
        conf["galera::galera_master"] = config['servers']['control-server'][0][
            "hostname"] + "." + DOMAIN_NAME
        conf["galera_master_name"] = config['servers']['control-server'][0][
            "hostname"]
        conf["galera_master_ipaddress"] = config['servers']['control-server'][
            0]["ip"]
        conf["galera_backup_names"] = [
            i["hostname"] for i in config['servers']['control-server'][1:]
        ]
        conf["galera_backup_ipaddresses"] = [
            i["ip"] for i in config['servers']['control-server'][1:]
        ]
        conf["openstack::swift::storage-node::storage_devices"] = [
            "vdb", "vdc", "vdd"
        ]
        return dump(conf)

    def prepare_common(config, common_file):
        """ Prepare user.common.file """
        conf = yaml.load(common_file)
        net_ip = ".".join(
            (config['servers']['control-server'][0]['ip'].split(".")[:3]))
        vipc = net_ip + ".253"
        conf["controller_public_address"] = vipc
        conf["controller_admin_address"] = vipc
        conf["controller_internal_address"] = vipc
        conf["coe::base::controller_hostname"] = "control-server"
        conf["domain_name"] = "domain.name"
        conf["ntp_servers"] = ["ntp.esl.cisco.com"]
        conf["external_interface"] = "eth4"
        conf[
            "nova::compute::vncserver_proxyclient_address"] = "%{ipaddress_eth0}"
        conf["build_node_name"] = "build-server"
        conf["controller_public_url"] = change_ip_to(
            conf["controller_public_url"], vipc)
        conf["controller_admin_url"] = change_ip_to(
            conf["controller_admin_url"], vipc)
        conf["controller_internal_url"] = change_ip_to(
            conf["controller_internal_url"], vipc)
        conf["cobbler_node_ip"] = config['servers']['build-server'][0]['ip']
        conf["node_subnet"] = ".".join(
            conf["cobbler_node_ip"].split(".")[:3]) + ".0"
        conf["node_gateway"] = ".".join(
            conf["cobbler_node_ip"].split(".")[:3]) + ".1"
        vipsw = ".".join(
            (config['servers']['control-server'][0]['ip'].split(".")[:3]
             )) + ".252"
        conf["swift_internal_address"] = vipsw
        conf["swift_public_address"] = vipsw
        conf["swift_admin_address"] = vipsw
        conf["swift_proxy_net_ip"] = "%{ipaddress_eth0}"
        conf['mysql::server::override_options']['mysqld'][
            'bind-address'] = "0.0.0.0"
        #    config['servers']['control-server'][0]['ip']
        conf['swift_storage_interface'] = "eth0"
        conf['swift_local_net_ip'] = "%{ipaddress_eth0}"
        conf['internal_ip'] = "%{ipaddress_eth0}"
        conf['public_interface'] = "eth0"
        conf['private_interface'] = "eth0"
        conf['install_drive'] = "/dev/vda"
        conf['mon_initial_members'] = config['servers']['control-server'][0][
            "hostname"]
        conf['ceph_primary_mon'] = config['servers']['control-server'][0][
            "hostname"]
        conf['ceph_monitor_address'] = config['servers']['control-server'][0][
            "ip"]
        conf['ceph_cluster_interface'] = "eth0"
        conf['ceph_cluster_network'] = net_ip + ".0/24"
        conf['ceph_public_interface'] = "eth0"
        conf['ceph_public_network'] = net_ip + ".0/24"
        return dump(conf)

    def prepare_cobbler(config, cob_file):
        """ Prepare cobbler.yaml.file """
        new_conf = {}
        name = "trusty"
        with open(os.path.join(CONFIG_PATH, "cobbler.yaml")) as f:
            text_cobbler = f.read()
        text_cobbler = text_cobbler.format(
            int_ipadd="{$eth0_ip-address}",
            ip_gateway=".".join(
                (config['servers']['build-server'][0]["ip"].split(".")[:3])) +
            ".1",
            ip_dns=".".join(
                (config['servers']['build-server'][0]["ip"].split(".")[:3])) +
            ".1")
        servers = config['servers']['control-server'] + \
            config["servers"]["compute-server"] + \
            config["servers"]["swift-storage"] + \
            config["servers"]["swift-proxy"] + \
            config["servers"]["load-balancer"]
        for c in servers:
            new_conf[c['hostname']] = {
                "hostname": c['hostname'] + "." + DOMAIN_NAME,
                "power_address": c["ip"],
                "profile": "%s-x86_64" % name,
                "interfaces": {
                    "eth0": {
                        "mac-address": c["mac"],
                        "dns-name": c['hostname'] + "." + DOMAIN_NAME,
                        "ip-address": c["ip"],
                        "static": "0"
                    }
                }
            }

        return text_cobbler + "\n" + yaml.dump(new_conf)

    def prepare_role(config, role_file):
        """ Prepare role_mappings file """
        roles = {config["servers"]["build-server"][0]["hostname"]: "build"}
        for c in config["servers"]["control-server"]:
            roles[c["hostname"]] = "controller"
        for c in config["servers"]["compute-server"]:
            roles[c["hostname"]] = "compute"
        for c in config["servers"]["swift-storage"]:
            roles[c["hostname"]] = "swift_storage"
        for c in config["servers"]["swift-proxy"]:
            roles[c["hostname"]] = "swift_proxy"
        for c in config["servers"]["load-balancer"]:
            roles[c["hostname"]] = "load_balancer"
        return dump(roles)

    def prepare_build(config, build_file):
        return build_file

    map = {
        "user.common.yaml": prepare_common,
        "user.full_ha.yaml": prepare_fullha,
        "role_mappings.yaml": prepare_role,
        "cobbler.yaml": prepare_cobbler,
        "build_server.yaml": prepare_build
    }
    for path in paths:
        fd = StringIO()
        warn_if_fail(get(path, fd))
        old_file = fd.getvalue()
        file_name = os.path.basename(path)
        print " >>>> FABRIC OLD %s\n" % file_name, old_file
        new_file = map[file_name](config, old_file)
        print " >>>> FABRIC NEW %s\n" % file_name, new_file
        warn_if_fail(put(StringIO(new_file), path, use_sudo=use_sudo_flag))
def install_devstack(fab_settings, string_descriptor, hostname, download_conf=False,
                     ipversion="4", patch="", proxy="", quiet=False):
    verbose = []
    if quiet:
        verbose = ['output', 'running', 'warnings']
    with settings(**fab_settings), hide(*verbose):
        if exists("/etc/gai.conf"):
            append("/etc/gai.conf", "precedence ::ffff:0:0/96  100", use_sudo=True)
        if proxy:
            warn_if_fail(put(StringIO('Acquire::http::proxy "http://proxy.esl.cisco.com:8080/";'),
                             "/etc/apt/apt.conf.d/00proxy", use_sudo=True))
            warn_if_fail(put(StringIO('Acquire::http::Pipeline-Depth "0";'),
                             "/etc/apt/apt.conf.d/00no_pipelining", use_sudo=True))
        update_time(sudo)
        if ipversion != "4":
            sudo("/sbin/sysctl -w net.ipv6.conf.all.forwarding=1")
            append("/etc/sysctl.conf", "net.ipv6.conf.all.forwarding=1", use_sudo=True)
        warn_if_fail(sudo("apt-get update"))
        warn_if_fail(sudo("apt-get install -y git python-pip"))
        warn_if_fail(run("git config --global user.email '*****@*****.**';"
                         "git config --global user.name 'Test Node'"))
        run("rm -rf ~/devstack")
        quit_if_fail(run("git clone https://github.com/openstack-dev/devstack.git"))
        if patch:
            warn_if_fail(run("git fetch https://review.openstack.org/openstack-dev/devstack {patch} "
                             "&& git cherry-pick FETCH_HEAD".format(patch)))
        warn_if_fail(put(string_descriptor, "devstack/local.conf", use_sudo=False))
        with cd("devstack"):
            warn_if_fail(run("./stack.sh"))
        if download_conf:
            get('~/devstack/openrc', "./openrc")
            get('/opt/stack/tempest/etc/tempest.conf', "./tempest.conf")
        collect_logs(run, hostname)
Exemplo n.º 17
0
def install_openstack(settings_dict, envs=None, verbose=None, url_script=None, prepare=False, force=False):
    """
    Install OS with COI with script provided by Chris on any host(s)

    :param settings_dict: settings dictionary for Fabric
    :param envs: environment variables to inject when executing job
    :param verbose: if to hide all output or print everything
    :param url_script: URl of Cisco installer script from Chris
    :param force: Use if you don't connect via interface you gonna bridge later
    :return: always true
    """
    envs = envs or {}
    verbose = verbose or []
    if settings_dict['user'] != 'root':
        use_sudo_flag = True
        run_func = sudo
    else:
        use_sudo_flag = False
        run_func = run

    with settings(**settings_dict), hide(*verbose), shell_env(**envs):
        # TODO: check statuses of commands
        with cd("/root/"):
            warn_if_fail(run_func("apt-get update"))
            ## avoid grub and other prompts
            warn_if_fail(run_func('DEBIAN_FRONTEND=noninteractive apt-get -y '
                                  '-o Dpkg::Options::="--force-confdef" -o '
                                  'Dpkg::Options::="--force-confold" dist-upgrade'))
            warn_if_fail(run_func("apt-get install -y git"))
            warn_if_fail(run_func("git config --global user.email '*****@*****.**';"
                                  "git config --global user.name 'Test Node'"))
            warn_if_fail(sed("/etc/hosts", "127.0.1.1.*",
                             "127.0.1.1 all-in-one all-in-one.domain.name", use_sudo=use_sudo_flag))
            warn_if_fail(put(StringIO("all-in-one"), "/etc/hostname", use_sudo=use_sudo_flag))
            warn_if_fail(run_func("hostname all-in-one"))
            if use_sudo_flag:
                append("/etc/sudoers",
                       "{user} ALL=(ALL) NOPASSWD: ALL".format(user=settings_dict['user']),
                       use_sudo=True)
            warn_if_fail(run_func("git clone -b icehouse "
                                  "https://github.com/CiscoSystems/puppet_openstack_builder"))
            if not force and not prepare:
                with cd("puppet_openstack_builder"):
                    ## run the latest, not i.0 release
                    sed("/root/puppet_openstack_builder/install-scripts/cisco.install.sh",
                        "icehouse/snapshots/i.0",
                        "icehouse-proposed", use_sudo=use_sudo_flag)
                    sed("/root/puppet_openstack_builder/data/hiera_data/vendor/cisco_coi_common.yaml",
                            "/snapshots/i.0",
                            "-proposed", use_sudo=use_sudo_flag)
                    with cd("install-scripts"):
                        run_func("./install.sh")
                        result = run_func('puppet apply -v /etc/puppet/manifests/site.pp', pty=False)
                        tries = 1
                        error = "Error:"
                        while error in result and tries <= APPLY_LIMIT:
                            time.sleep(60)
                            print >> sys.stderr, "Some errors found, running apply again"
                            result = run_func('puppet apply -v /etc/puppet/manifests/site.pp', pty=False)
                            tries += 1
                if exists('/root/openrc'):
                    get('/root/openrc', "./openrc")
                else:
                    print (red("No openrc file, something went wrong! :("))
                print (green("Copying logs and configs"))
                collect_logs(run_func=run_func, hostname="aio", clean=True)
                print (green("Finished!"))
                return True
    if force and not prepare:
        shell_envs = ";".join(["export " + k + "=" + v for k, v in envs.iteritems()]) or ""
        sudo_mode = "sudo " if use_sudo_flag else ''
        if not settings_dict['gateway']:
            local("{shell_envs}; ssh -t -t -i {id_rsa} {user}@{host} \
             '/bin/bash /root/install_icehouse_cisco.sh'".format(
                shell_envs=shell_envs,
                id_rsa=settings_dict['key_filename'],
                user=settings_dict['user'],
                host=settings_dict['host_string']))
            local("scp -i {id_rsa} {user}@{host}:/root/openrc ./openrc".format(
                id_rsa=settings_dict['key_filename'],
                user=settings_dict['user'],
                host=settings_dict['host_string']))
        else:
            local('ssh -t -t -i {id_rsa} {user}@{gateway} \
             "{shell_envs}; ssh -t -t -i {id_rsa} {user}@{host} \
             \'{sudo_mode}/bin/bash /root/install_icehouse_cisco.sh\'"'.format(
                shell_envs=shell_envs,
                id_rsa=settings_dict['key_filename'],
                user=settings_dict['user'],
                host=settings_dict['host_string'],
                gateway=settings_dict['gateway'],
                sudo_mode=sudo_mode))
            local('scp -Cp -o "ProxyCommand ssh {user}@{gateway} '
                  'nc {host} 22" root@{host}:/root/openrc ./openrc'.format(
                      user=settings_dict['user'],
                      host=settings_dict['host_string'],
                      gateway=settings_dict['gateway'],
                  ))
    print (green("Finished!"))
    return True
Exemplo n.º 18
0
def install_openstack(settings_dict,
                      envs=None,
                      verbose=None,
                      url_script=None,
                      prepare=False,
                      force=False,
                      config=None,
                      use_cobbler=False,
                      proxy=None):
    """
        Install OS with COI on build server

    :param settings_dict: settings dictionary for Fabric
    :param envs: environment variables to inject when executing job
    :param verbose: if to hide all output or print everything
    :param url_script: URl of Cisco installer script from Chris
    :param force: Use if you don't connect via interface you gonna bridge later
    :return: always true
    """
    envs = envs or {}
    verbose = verbose or []
    if settings_dict['user'] != 'root':
        use_sudo_flag = True
        run_func = sudo
    else:
        use_sudo_flag = False
        run_func = run

    with settings(**settings_dict), hide(*verbose), shell_env(**envs):
        with cd("/root/"):
            if proxy:
                warn_if_fail(
                    put(StringIO(
                        'Acquire::http::proxy "http://proxy.esl.cisco.com:8080/";'
                    ),
                        "/etc/apt/apt.conf.d/00proxy",
                        use_sudo=use_sudo_flag))
                warn_if_fail(
                    put(StringIO('Acquire::http::Pipeline-Depth "0";'),
                        "/etc/apt/apt.conf.d/00no_pipelining",
                        use_sudo=use_sudo_flag))
            run_func("apt-get update")
            run_func("apt-get install -y git")
            run_func("git config --global user.email '*****@*****.**';"
                     "git config --global user.name 'Test Node'")
            if not force and not prepare:
                update_time(run_func)
                # avoid grub and other prompts
                warn_if_fail(
                    run_func('DEBIAN_FRONTEND=noninteractive apt-get -y '
                             '-o Dpkg::Options::="--force-confdef" -o '
                             'Dpkg::Options::="--force-confold" dist-upgrade'))
                # prepare /etc/hosts file
                append("/etc/hosts", prepare_hosts(config))
                with cd("/root"):
                    warn_if_fail(
                        run_func(
                            "git clone -b icehouse "
                            "https://github.com/CiscoSystems/puppet_openstack_builder"
                        ))
                    with cd("puppet_openstack_builder"):
                        ## run the latest, not i.0 release
                        #run_func('git checkout i.0')
                        sed("/root/puppet_openstack_builder/install-scripts/cisco.install.sh",
                            "icehouse/snapshots/i.0",
                            "icehouse-proposed",
                            use_sudo=use_sudo_flag)
                        sed("/root/puppet_openstack_builder/data/hiera_data/vendor/cisco_coi_common.yaml",
                            "/snapshots/i.0",
                            "-proposed",
                            use_sudo=use_sudo_flag)
                        with cd("install-scripts"):
                            warn_if_fail(run_func("./install.sh"))
                prepare_files(
                    config,
                    paths=(
                        "/etc/puppet/data/hiera_data/user.common.yaml",
                        "/etc/puppet/data/hiera_data/user.full_ha.yaml",
                        "/etc/puppet/data/cobbler/cobbler.yaml",
                        "/etc/puppet/data/role_mappings.yaml",
                        "/etc/puppet/data/hiera_data/hostname/build_server.yaml"
                    ),
                    use_sudo_flag=use_sudo_flag)
                prepare_new_files(config,
                                  path="/etc/puppet/data/hiera_data/hostname",
                                  use_sudo_flag=use_sudo_flag)
                resolve_names(run_func, use_sudo_flag)
                result = run_func(
                    'puppet apply -v /etc/puppet/manifests/site.pp')
                tries = 1
                if use_cobbler:
                    cobbler_error = "[cobbler-sync]/returns: unable to connect to cobbler on localhost using cobbler"
                    while cobbler_error in result and tries <= APPLY_LIMIT:
                        time.sleep(60)
                        print >> sys.stderr, "Cobbler is not installed properly, running apply again"
                        result = run_func(
                            'puppet apply -v /etc/puppet/manifests/site.pp',
                            pty=False)
                        tries += 1
                error = "Error:"
                while error in result and tries <= APPLY_LIMIT:
                    time.sleep(60)
                    print >> sys.stderr, "Some errors found, running apply again"
                    result = run_func(
                        'puppet apply -v /etc/puppet/manifests/site.pp',
                        pty=False)
                    tries += 1
                if exists('/root/openrc'):
                    get('/root/openrc', "./openrc")
                else:
                    print(red("No openrc file, something went wrong! :("))
                print(green("Copying logs and configs"))
                collect_logs(
                    run_func=run_func,
                    hostname=config["servers"]["build-server"][0]["hostname"],
                    clean=True)
                print(green("Finished!"))
                return True
            elif not force and prepare:
                return True
    print(green("Finished!"))
    return True
Exemplo n.º 19
0
def prepare_files(config, paths, use_sudo_flag):

    def prepare_fullha(config, ha_file):
        """ Prepare user.full_ha.file """
        conf = yaml.load(ha_file)
        net_ip = ".".join((config['servers']['control-servers'][0]['ip'].split(".")[:3]))
        vipc = net_ip + ".253"
        conf["coe::base::controller_hostname"] = "control-server"
        conf["horizon::keystone_url"] = change_ip_to(conf["horizon::keystone_url"], vipc)
        conf["controller_names"] = [c["hostname"] for c in config['servers']['control-servers']]
        conf["openstack-ha::load-balancer::controller_ipaddresses"] = [c["ip"]
                                                                       for c in config['servers']['control-servers']]
        conf["openstack-ha::load-balancer::swift_proxy_ipaddresses"] = [c["ip"]
                                                                       for c in config['servers']['swift-proxy']]
        conf["openstack-ha::load-balancer::swift_proxy_names"] = [c["hostname"]
                                                                       for c in config['servers']['swift-proxy']]
        vipsw = net_ip + ".252"
        conf["openstack::swift::proxy::swift_proxy_net_ip"] = "%{ipaddress_eth2}"
        conf["openstack::swift::proxy::swift_memcache_servers"] = [i["ip"] + ":11211"
                                                                   for i in config['servers']['swift-proxy']]
        conf["nova::memcached_servers"] = [i["ip"] + ":11211" for i in config['servers']['control-servers']]
        conf["rabbit_hosts"] = [i["hostname"] + ":5672" for i in config['servers']['control-servers']]
        conf["galera::galera_servers"] = [c["ip"] for c in config['servers']['control-servers']]
        conf["galera::galera_master"] = config['servers']['control-servers'][0]["hostname"] + "." + DOMAIN_NAME
        conf["galera_master_name"] = config['servers']['control-servers'][0]["hostname"]
        conf["galera_master_ipaddress"] = config['servers']['control-servers'][0]["ip"]
        conf["galera_backup_names"] = [i["hostname"] for i in config['servers']['control-servers'][1:]]
        conf["galera_backup_ipaddresses"] = [i["ip"] for i in config['servers']['control-servers'][1:]]
        conf["openstack::swift::storage-node::storage_devices"] = ["vdb", "vdc", "vdd"]
        return dump(conf)

    def prepare_common(config, common_file):
        """ Prepare user.common.file """
        conf = yaml.load(common_file)
        net_ip = ".".join((config['servers']['control-servers'][0]['ip'].split(".")[:3]))
        vipc = net_ip + ".253"
        conf["controller_public_address"] = vipc
        conf["controller_admin_address"] = vipc
        conf["controller_internal_address"] = vipc
        conf["coe::base::controller_hostname"] = "control-server"
        conf["domain_name"] = "domain.name"
        conf["ntp_servers"] = ["ntp.esl.cisco.com"]
        conf["external_interface"] = "eth4"
        conf["nova::compute::vncserver_proxyclient_address"] = "%{ipaddress_eth0}"
        conf["build_node_name"] = "build-server"
        conf["controller_public_url"] = change_ip_to(
            conf["controller_public_url"],
            vipc)
        conf["controller_admin_url"] = change_ip_to(
            conf["controller_admin_url"],
            vipc)
        conf["controller_internal_url"] = change_ip_to(
            conf["controller_internal_url"],
            vipc)
        conf["cobbler_node_ip"] = config['servers']['build-server']['ip']
        conf["node_subnet"] = ".".join(conf["cobbler_node_ip"].split(".")[:3]) + ".0"
        conf["node_gateway"] = ".".join(conf["cobbler_node_ip"].split(".")[:3]) + ".1"
        vipsw = ".".join((config['servers']['control-servers'][0]['ip'].split(".")[:3])) + ".252"
        conf["swift_internal_address"] = vipsw
        conf["swift_public_address"] = vipsw
        conf["swift_admin_address"] = vipsw
        conf['mysql::server::override_options']['mysqld']['bind-address'] = "0.0.0.0"
        #    config['servers']['control-servers'][0]['ip']
        conf['swift_storage_interface'] = "eth2"
        conf['swift_local_net_ip'] = "%{ipaddress_eth2}"
        conf['internal_ip'] = "%{ipaddress_eth0}"
        conf['public_interface'] = "eth0"
        conf['private_interface'] = "eth0"
        conf['install_drive'] = "/dev/vda"
        conf['mon_initial_members'] = config['servers']['control-servers'][0]["hostname"]
        conf['ceph_primary_mon'] = config['servers']['control-servers'][0]["hostname"]
        conf['ceph_monitor_address'] = config['servers']['control-servers'][0]["ip"]
        conf['ceph_cluster_interface'] = "eth0"
        conf['ceph_cluster_network'] = net_ip + ".0/24"
        conf['ceph_public_interface'] = "eth0"
        conf['ceph_public_network'] = net_ip + ".0/24"
        return dump(conf)

    def prepare_cobbler(config, cob_file):
        """ Prepare cobbler.yaml.file """
        new_conf = {}
        name = "trusty"
        with open(os.path.join(CONFIG_PATH, "cobbler.yaml")) as f:
            text_cobbler = f.read()
        text_cobbler = text_cobbler.format(
            int_ipadd="{$eth0_ip-address}",
            ip_gateway=".".join((config['servers']['build-server']["ip"].split(".")[:3])) + ".1",
            ip_dns=".".join((config['servers']['build-server']["ip"].split(".")[:3])) + ".1"
        )
        servers = config['servers']['control-servers'] + \
            config["servers"]["compute-servers"] + \
            config["servers"]["swift-storage"] + \
            config["servers"]["swift-proxy"] + \
            config["servers"]["load-balancer"]
        for c in servers:
            new_conf[c['hostname']] = {
                "hostname": c['hostname'] + "." + DOMAIN_NAME,
                "power_address": c["ip"],
                "profile": "%s-x86_64" % name,
                "interfaces": {
                    "eth0": {
                        "mac-address": c["mac"],
                        "dns-name": c['hostname'] + "." + DOMAIN_NAME,
                        "ip-address": c["ip"],
                        "static": "0"
                    }
                }
            }

        return text_cobbler + "\n" + yaml.dump(new_conf)

    def prepare_role(config, role_file):
        """ Prepare role_mappings file """
        roles = {config["servers"]["build-server"]["hostname"]: "build"}
        for c in config["servers"]["control-servers"]:
            roles[c["hostname"]] = "controller"
        for c in config["servers"]["compute-servers"]:
            roles[c["hostname"]] = "compute"
        for c in config["servers"]["swift-storage"]:
            roles[c["hostname"]] = "swift_storage"
        for c in config["servers"]["swift-proxy"]:
            roles[c["hostname"]] = "swift_proxy"
        for c in config["servers"]["load-balancer"]:
            roles[c["hostname"]] = "load_balancer"
        return dump(roles)

    def prepare_build(config, build_file):
        return build_file

    map = {
        "user.common.yaml": prepare_common,
        "user.full_ha.yaml": prepare_fullha,
        "role_mappings.yaml": prepare_role,
        "cobbler.yaml": prepare_cobbler,
        "build_server.yaml": prepare_build
    }
    for path in paths:
        fd = StringIO()
        warn_if_fail(get(path, fd))
        old_file = fd.getvalue()
        file_name = os.path.basename(path)
        print " >>>> FABRIC OLD %s\n" % file_name, old_file
        new_file = map[file_name](config, old_file)
        print " >>>> FABRIC NEW %s\n" % file_name, new_file
        warn_if_fail(put(StringIO(new_file), path, use_sudo=use_sudo_flag))
def apply_patches():
    warn_if_fail(run("git fetch https://review.openstack.org/openstack-dev/devstack "
    "refs/changes/87/87987/12 && git format-patch -1 FETCH_HEAD"))
Exemplo n.º 21
0
def install_openstack(settings_dict,
                      envs=None,
                      verbose=None,
                      url_script=None,
                      prepare=False,
                      force=False,
                      config=None,
                      use_cobbler=False,
                      proxy=None):
    """
        Install OS with COI on build server

    :param settings_dict: settings dictionary for Fabric
    :param envs: environment variables to inject when executing job
    :param verbose: if to hide all output or print everything
    :param url_script: URl of Cisco installer script from Chris
    :param force: Use if you don't connect via interface you gonna bridge later
    :return: always true
    """
    envs = envs or {}
    verbose = verbose or []
    if settings_dict['user'] != 'root':
        use_sudo_flag = True
        run_func = sudo
    else:
        use_sudo_flag = False
        run_func = run

    with settings(**settings_dict), hide(*verbose), shell_env(**envs):
        with cd("/root/"):
            if proxy:
                warn_if_fail(put(StringIO('Acquire::http::proxy "http://proxy.esl.cisco.com:8080/";'),
                                 "/etc/apt/apt.conf.d/00proxy",
                                 use_sudo=use_sudo_flag))
                warn_if_fail(put(StringIO('Acquire::http::Pipeline-Depth "0";'),
                                 "/etc/apt/apt.conf.d/00no_pipelining",
                                 use_sudo=use_sudo_flag))
            run_func("apt-get update")
            run_func("apt-get install -y git")
            run_func("git config --global user.email '*****@*****.**';"
                     "git config --global user.name 'Test Node'")
            if not force and not prepare:
                update_time(run_func)
                # avoid grub and other prompts
                warn_if_fail(run_func('DEBIAN_FRONTEND=noninteractive apt-get -y '
                                      '-o Dpkg::Options::="--force-confdef" -o '
                                      'Dpkg::Options::="--force-confold" dist-upgrade'))
                # prepare /etc/hosts file
                append("/etc/hosts", prepare_hosts(config))
                with cd("/root"):
                    warn_if_fail(run_func("git clone -b icehouse "
                                          "https://github.com/CiscoSystems/puppet_openstack_builder"))
                    with cd("puppet_openstack_builder"):
                        ## run the latest, not i.0 release
                        #run_func('git checkout i.0')
                        sed("/root/puppet_openstack_builder/install-scripts/cisco.install.sh",
                            "icehouse/snapshots/i.0",
                            "icehouse-proposed", use_sudo=use_sudo_flag)
                        with cd("install-scripts"):
                            warn_if_fail(run_func("./install.sh"))
                prepare_files(config,
                              paths=(
                                  "/etc/puppet/data/hiera_data/user.common.yaml",
                                  "/etc/puppet/data/hiera_data/user.full_ha.yaml",
                                  "/etc/puppet/data/cobbler/cobbler.yaml",
                                  "/etc/puppet/data/role_mappings.yaml",
                                  "/etc/puppet/data/hiera_data/hostname/build_server.yaml"
                              ),
                              use_sudo_flag=use_sudo_flag)
                prepare_new_files(
                    config,
                    path="/etc/puppet/data/hiera_data/hostname",
                    use_sudo_flag=use_sudo_flag
                )
                resolve_names(run_func, use_sudo_flag)
                result = run_func('puppet apply -v /etc/puppet/manifests/site.pp')
                tries = 1
                if use_cobbler:
                    cobbler_error = "[cobbler-sync]/returns: unable to connect to cobbler on localhost using cobbler"
                    while cobbler_error in result and tries <= APPLY_LIMIT:
                        time.sleep(60)
                        print >> sys.stderr, "Cobbler is not installed properly, running apply again"
                        result = run_func('puppet apply -v /etc/puppet/manifests/site.pp', pty=False)
                        tries += 1
                error = "Error:"
                while error in result and tries <= APPLY_LIMIT:
                    time.sleep(60)
                    print >> sys.stderr, "Some errors found, running apply again"
                    result = run_func('puppet apply -v /etc/puppet/manifests/site.pp', pty=False)
                    tries += 1
                if exists('/root/openrc'):
                    get('/root/openrc', "./openrc")
                else:
                    print (red("No openrc file, something went wrong! :("))
                print (green("Copying logs and configs"))
                collect_logs(run_func=run_func, hostname=config["servers"]["build-server"]["hostname"], clean=True)
                print (green("Finished!"))
                return True
            elif not force and prepare:
                return True
    print (green("Finished!"))
    return True
def install_devstack(settings_dict,
                     envs=None,
                     verbose=None,
                     proxy=None,
                     patch=False,
                     opts=None):
    envs = envs or {}
    verbose = verbose or []
    with settings(**settings_dict), hide(*verbose), shell_env(**envs):
        if exists("/etc/gai.conf"):
            append("/etc/gai.conf", "precedence ::ffff:0:0/96  100", use_sudo=True)
        if proxy:
            warn_if_fail(put(StringIO('Acquire::http::proxy "http://proxy.esl.cisco.com:8080/";'),
                             "/etc/apt/apt.conf.d/00proxy",
                             use_sudo=True))
            warn_if_fail(put(StringIO('Acquire::http::Pipeline-Depth "0";'),
                             "/etc/apt/apt.conf.d/00no_pipelining",
                             use_sudo=True))
        update_time(sudo)
        if opts.ipversion != 4:
            sudo("/sbin/sysctl -w net.ipv6.conf.all.forwarding=1")
            append("/etc/sysctl.conf", "net.ipv6.conf.all.forwarding=1", use_sudo=True)
        warn_if_fail(sudo("apt-get update"))
        warn_if_fail(sudo("apt-get install -y git python-pip"))
        warn_if_fail(run("git config --global user.email '*****@*****.**';"
                         "git config --global user.name 'Test Node'"))
        run("rm -rf ~/devstack")
        quit_if_fail(run("git clone https://github.com/openstack-dev/devstack.git"))
        make_local("devstack/local.conf", sudo_flag=False, opts=opts)
        with cd("devstack"):
            warn_if_fail(run("./stack.sh"))
            if patch:
                apply_changes()
        if exists('~/devstack/openrc'):
            get('~/devstack/openrc', "./openrc")
        else:
            print (red("No openrc file, something went wrong! :("))
        if exists('/opt/stack/tempest/etc/tempest.conf'):
            get('/opt/stack/tempest/etc/tempest.conf', "./tempest.conf")
        else:
            print (red("No openrc file, something went wrong! :("))
        print (green("Finished!"))
        return True
Exemplo n.º 23
0
def apply_changes():
    warn_if_fail(run("./unstack.sh"))
    kill_services()
    apply_patches()
    warn_if_fail(run("./stack.sh"))