ansible/roles/openqa/server/tasks/main.yml

203 lines
6.4 KiB
YAML
Raw Normal View History

# Required vars
# - openqa_email
## string - Email address of admin user
# - openqa_nickname
## string - Short name of admin user (shown in the web UI for e.g.)
# - openqa_fullname
## string - Full name of admin user
# - openqa_key
# - openqa_secret
## string - MUST be 16-character hexadecimals, and are secrets
# openqa_userid
## string - User ID of admin user: for Fedora should be a Fedora openID URL,
## http://fasname.id.fedoraproject.org
# Required vars with defaults
# - external_hostname
## string - The public hostname for the server (will be used as ServerName)
## default - ansible_nodename
# Optional vars
# - openqa_dbname
## string - The name of the database to use
# - openqa_dbhost
## string - The hostname of the database server
# - openqa_dbuser
## string - The database username
# - openqa_dbpassword
## string - The database password
#
# If openqa_dbhost is set, the others must be too, and the server will be
# configured to use a pgsql database accordingly. If openqa_dbhost is not
# set, the server will use a local SQLite database and the other values
# are ignored.
- name: Ensure DNF COPR plugin is available
dnf: pkg="dnf-command(copr)" state=present
tags:
- packages
- name: Install openQA repo if needed
command: "dnf -y copr enable adamwill/openQA"
args:
creates: /etc/yum.repos.d/_copr_adamwill-openQA.repo
tags:
- config
- name: Install required packages
dnf: name={{ item }} state=present enablerepo=adamwill-openQA
with_items:
- libselinux-python
- openqa
- git
- json_diff
- libselinux-utils
- libsemanage-python
- nfs-utils
- perl(Class::DBI::Pg)
- perl(DateTime::Format::Pg)
- expect
- libguestfs-tools-c
- libguestfs-xfs
2015-12-18 19:51:17 -08:00
- python2-pexpect
2015-12-18 19:52:34 -08:00
- python-libguestfs
tags:
- packages
- name: Check out the tests
git:
repo: https://bitbucket.org/rajcze/openqa_fedora
dest: /var/lib/openqa/share/tests/fedora
register: gittests
sudo: true
sudo_user: geekotest
- name: Check out openqa_fedora_tools
git:
repo: https://bitbucket.org/rajcze/openqa_fedora_tools
dest: /root/openqa_fedora_tools
- name: Create asset directories
file: path={{ item }} state=directory owner=geekotest group=root mode=0755
with_items:
- /var/lib/openqa/share/factory/iso
- /var/lib/openqa/share/factory/hdd
- /var/lib/openqa/share/factory/repo
- name: Check if any hard disk images need (re)building
command: "python /root/openqa_fedora_tools/tools/createhdds.py check"
args:
chdir: /var/lib/openqa/share/factory/hdd/
register: diskcheck
failed_when: "1 != 1"
always_run: true
- name: Create hard disk images (this may take a long time!)
command: "python /root/openqa_fedora_tools/tools/createhdds.py all --clean"
args:
chdir: /var/lib/openqa/share/factory/hdd/
environment:
LIBGUESTFS_BACKEND: direct
when: "diskcheck.rc > 0"
- name: Create exports file
copy: src=exports dest=/etc/exports.d/openqa.exports owner=root group=root mode=0644
tags:
- config
- name: Enable and start NFS server
service: name=nfs-server enabled=yes state=started
- name: Set up Apache config
template: src=openqa.conf.httpd.j2 dest=/etc/httpd/conf.d/openqa.conf owner=root group=root mode=0644
notify:
- reload httpd
tags:
- config
- name: OpenQA config
template: src=openqa.ini.j2 dest=/etc/openqa/openqa.ini owner=geekotest group=root mode=0644
tags:
- config
- name: Create database
delegate_to: "{{ openqa_dbhost }}"
sudo_user: postgres
sudo: true
2016-01-06 21:58:31 +00:00
postgresql_db: db={{ openqa_dbname }}
when: "openqa_dbhost is defined"
- name: Ensure db user has access to database
delegate_to: "{{ openqa_dbhost }}"
sudo_user: postgres
sudo: true
2016-01-06 21:58:31 +00:00
postgresql_user: db={{ openqa_dbname }} user={{ openqa_dbuser }} password={{ openqa_dbpassword }} role_attr_flags=NOSUPERUSER
when: "openqa_dbhost is defined"
- name: Database config
template: src=database.ini.pgsql.j2 dest=/etc/openqa/database.ini owner=geekotest group=root mode=0640
when: "openqa_dbhost is defined"
tags:
- config
- name: Initialize database
command: "/usr/share/openqa/script/initdb --user geekotest --init_database"
register: initdb
changed_when: "initdb.rc == 0"
failed_when: "(initdb.rc > 0) and (initdb.stderr is not defined or initdb.stderr.find('already exists') == -1)"
- name: Enable and start services
service: name={{ item }} enabled=yes state=started
register: services
with_items:
- openqa-scheduler
- openqa-webui
- openqa-websockets
- openqa-gru
# This is using a big hammer until #1277312 is resolved
- name: Allow Apache to connect to openQA
seboolean: name=httpd_can_network_connect state=yes persistent=yes
# services is undefined in check mode
- name: Wait for openQA to be fully started
pause: seconds=5
when: "services is defined and services|changed"
- name: openQA client config
template: src=client.conf.j2 dest=/etc/openqa/client.conf mode=0600
tags:
- config
- name: Create admin user
command: "/var/lib/openqa/script/create_admin --email {{ openqa_email }} --nickname {{ openqa_nickname }} --fullname '{{ openqa_fullname }}' --key {{ openqa_key }} --secret {{ openqa_secret }} {{ openqa_userid }}"
register: admin
changed_when: "admin.rc == 0"
failed_when: "(admin.rc > 0) and (admin.stderr is not defined or admin.stderr.find('already exists') == -1)"
- name: Patch repo URLs in templates
shell: "cp /var/lib/openqa/share/tests/fedora/templates /tmp && sed -i -e 's,dl.fedoraproject,dl.phx2.fedoraproject,g' /tmp/templates"
when: "gittests|changed"
changed_when: "1 != 1"
- name: Dump existing config for checking changes
shell: "/usr/share/openqa/script/dump_templates --json > /tmp/tmpl-old.json"
when: "gittests|changed"
changed_when: "1 != 1"
# Because of the boring details of how template loading works, getting
# a correct 'changed' for this step is too difficult. Instead we have
# the prior and following steps; when the templates actually changed,
# the *following* step will register as changed.
- name: Load tests
shell: "/tmp/templates --clean"
when: "gittests|changed"
changed_when: "1 != 1"
- name: Check if the tests changed in previous step
shell: "/usr/share/openqa/script/dump_templates --json > /tmp/tmpl-new.json && json_diff /tmp/tmpl-old.json /tmp/tmpl-new.json"
when: "gittests|changed"
register: testsdiff
changed_when: "testsdiff.rc > 0"
failed_when: "1 != 1"