Source code for cfme.scripting.setup_ansible

# -*- coding: utf-8 -*-
import requests

from cfme.utils import ports
from cfme.utils.net import net_check
from cfme.utils.wait import wait_for


ANSIBLE_TOWER_REPO_PATH = "/etc/yum.repos.d/ansible-tower.repo"
ANSIBLE_TOWER_REPO_CONTENT = """EOF
[ansible-tower]
name=Ansible Tower Repository - $releasever $basearch
baseurl=http://releases.ansible.com/ansible-tower/rpm/epel-7-\$basearch
enabled=1
gpgcheck=0
EOF"""
JLASKA_RABBITMQ_REPO_PATH = "/etc/yum.repos.d/jlaska-rabbitmq.repo"
JLASKA_RABBITMQ_REPO_CONTENT = """EOF
[jlaska-rabbitmq]
name=Copr repo for rabbitmq owned by jlaska
baseurl=https://copr-be.cloud.fedoraproject.org/results/jlaska/rabbitmq/epel-7-\$basearch/
skip_if_unavailable=True
gpgcheck=1
gpgkey=https://copr-be.cloud.fedoraproject.org/results/jlaska/rabbitmq/pubkey.gpg
enabled=1
enabled_metadata=1
EOF"""
PGDG_96_CENTOS_REPO_PATH = "/etc/yum.repos.d/pgdg-96-centos.repo"
PGDG_96_CENTOS_REPO_CONTENT = """EOF
[pgdg96]
name=PostgreSQL 9.6 $releasever - $basearch
baseurl=http://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-\$releasever-\$basearch
enabled=1
gpgcheck=0
EOF"""
REPOS = [
    (ANSIBLE_TOWER_REPO_PATH, ANSIBLE_TOWER_REPO_CONTENT),
    (JLASKA_RABBITMQ_REPO_PATH, JLASKA_RABBITMQ_REPO_CONTENT),
    (PGDG_96_CENTOS_REPO_PATH, PGDG_96_CENTOS_REPO_CONTENT)
]


[docs]def run_command(app, command): print(command) app.ssh_client.run_command(command)
[docs]def setup_repos(app): print("Starting configuring repos") for path, content in REPOS: run_command(app, "cat > {path} << {content}".format(path=path, content=content))
[docs]def install_packages(app): print("Starting to install packages") run_command(app, "yum -y install ansible-tower-setup ansible-tower-server") run_command(app, "install -o awx -g awx -m 0755 -d /var/log/tower") run_command(app, "install -o awx -g awx -m 0644 /dev/null /var/log/tower/callback_receiver.log") run_command(app, "install -o awx -g awx -m 0644 /dev/null /var/log/tower/fact_receiver.log") run_command(app, "install -o awx -g awx -m 0644 /dev/null /var/log/tower/task_system.log") run_command(app, "install -o awx -g awx -m 0644 /dev/null /var/log/tower/tower.log") run_command(app, "install -o awx -g awx -m 0644 /dev/null /var/log/tower/tower_rbac_migrations.log") run_command(app, "install -o awx -g awx -m 0644 /dev/null /var/log/tower/tower_system_track_migrations.log") run_command(app, "install -o awx -g awx -m 0644 /dev/null " "/var/log/tower/tower_system_tracking_migrations.log")
[docs]def get_ansible_password(app): print("Getting embedded ansible password. It can take a long time.") app.ssh_client.run_rails_command("'EmbeddedAnsible.start'") return app.ssh_client.run_rails_command( "'puts MiqDatabase.first.ansible_admin_authentication.password'").output.rstrip()
[docs]def open_port(app): run_command(app, "firewall-cmd --zone manageiq --add-port {}/tcp".format(ports.TOWER)) print("Waiting until port {} will be opened".format(ports.TOWER)) wait_for( net_check, [ports.TOWER, app.address], {"force": True}, num_sec=600, delay=5 )
[docs]def upload_license(app, license_path): password = get_ansible_password(app) print("Password is {}".format(password)) open_port(app) print("Sending license file to embedded ansible") r = requests.post( 'https://{addr}:{port}/api/v1/config/'.format(addr=app.address, port=ports.TOWER), headers={"Content-Type": "application/json"}, data=open(license_path, "rb"), auth=("admin", password), verify=False ) if r.status_code == 200: print("The license has been accepted.") else: print("Error occured: '{}'".format(r.json()["detail"]))
[docs]def stop_embedded_ansible(app): print("Stopping embedded ansible") app.ssh_client.run_rails_command("'EmbeddedAnsible.stop'")
[docs]def setup_ansible(app, license_path): setup_repos(app) install_packages(app) upload_license(app, license_path) stop_embedded_ansible(app)