2015-11-13 09:49:00 -08:00
|
|
|
# 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
|
2016-03-19 16:28:09 -07:00
|
|
|
# - openqa_static_uid
|
|
|
|
## int - a static ID for the geekotest user and group if desired
|
|
|
|
## this is useful for NFS mounting openQA data files
|
2015-11-13 09:49:00 -08:00
|
|
|
# - 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
|
2016-03-19 16:08:15 -07:00
|
|
|
# - openqa_assetsize
|
|
|
|
## int - the asset size limit to set in GB (upstream default is 100GB)
|
|
|
|
## higher is recommended for normal Fedora testing, 300GB is good
|
2016-03-30 17:13:57 -07:00
|
|
|
## FIXME: this only works for pgsql ATM
|
|
|
|
# - deployment_type
|
|
|
|
## string - Fedora Infrastructure thing; for this role, decides
|
|
|
|
## whether to monkeypatch the repo URLs in the templates
|
|
|
|
## to work inside Fedora infrastructure. Don't set it
|
|
|
|
## unless your deployment is running in Fedora infra.
|
2015-11-13 09:49:00 -08:00
|
|
|
#
|
|
|
|
# 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.
|
|
|
|
|
2016-03-19 16:28:09 -07:00
|
|
|
- name: Create geekotest group with static GID
|
|
|
|
group: "name=geekotest gid={{ openqa_static_uid }} system=yes"
|
|
|
|
when: "openqa_static_uid is defined"
|
2016-03-08 12:16:00 -08:00
|
|
|
|
2016-03-19 16:28:09 -07:00
|
|
|
- name: Create geekotest user with static UID
|
2016-03-08 12:16:00 -08:00
|
|
|
user:
|
|
|
|
name: geekotest
|
|
|
|
comment: "openQA user"
|
2016-03-19 16:28:09 -07:00
|
|
|
uid: "{{ openqa_static_uid }}"
|
2016-03-08 13:58:48 -08:00
|
|
|
group: geekotest
|
2016-03-08 12:16:00 -08:00
|
|
|
home: "/var/lib/openqa"
|
|
|
|
createhome: no
|
|
|
|
system: yes
|
|
|
|
shell: /sbin/nologin
|
2016-03-19 16:28:09 -07:00
|
|
|
when: "openqa_static_uid is defined"
|
2016-03-08 12:16:00 -08:00
|
|
|
|
2016-07-05 12:09:01 -07:00
|
|
|
- name: Install required packages (testing)
|
|
|
|
dnf: name={{ item }} state=present enablerepo="updates-testing"
|
|
|
|
with_items:
|
|
|
|
- openqa
|
|
|
|
- openqa-httpd
|
|
|
|
- openqa-plugin-fedmsg
|
|
|
|
tags:
|
|
|
|
- packages
|
2016-03-08 14:09:01 -08:00
|
|
|
|
2015-11-13 09:49:00 -08:00
|
|
|
- name: Install required packages
|
2016-04-13 08:18:01 -07:00
|
|
|
dnf: name={{ item }} state=present
|
2015-11-13 09:49:00 -08:00
|
|
|
with_items:
|
|
|
|
- libselinux-python
|
|
|
|
- git
|
2015-12-15 14:14:54 -08:00
|
|
|
- json_diff
|
2015-11-13 09:49:00 -08:00
|
|
|
- libselinux-utils
|
|
|
|
- libsemanage-python
|
|
|
|
- nfs-utils
|
|
|
|
- perl(Class::DBI::Pg)
|
|
|
|
- perl(DateTime::Format::Pg)
|
2015-11-17 14:16:25 -08:00
|
|
|
- expect
|
2015-11-13 09:49:00 -08:00
|
|
|
- libguestfs-tools-c
|
2015-12-05 11:43:05 -08:00
|
|
|
- libguestfs-xfs
|
2016-07-04 09:37:05 -07:00
|
|
|
- libvirt-daemon-config-network
|
|
|
|
- libvirt-python3
|
2016-03-30 17:13:57 -07:00
|
|
|
- python2-fedfind
|
|
|
|
- python3-fedfind
|
2016-03-18 15:34:23 -07:00
|
|
|
- python3-libguestfs
|
2016-07-04 09:37:05 -07:00
|
|
|
- virt-install
|
2016-05-24 11:38:46 -07:00
|
|
|
- withlock
|
2015-11-13 09:49:00 -08:00
|
|
|
tags:
|
|
|
|
- packages
|
|
|
|
|
2016-09-06 12:30:26 -07:00
|
|
|
- name: Check test directory exists with correct ownership
|
|
|
|
file: path=/var/lib/openqa/share/tests/fedora state=directory owner=geekotest group=geekotest recurse=yes
|
|
|
|
|
|
|
|
# we don't want to run the checkout if the tests are on a non-standard
|
|
|
|
# branch, as that usually means we're messing around on staging and
|
|
|
|
# don't want the checkout reset to HEAD.
|
|
|
|
- name: Check if tests are checked out and on a non-standard branch
|
|
|
|
command: "git status"
|
|
|
|
args:
|
|
|
|
chdir: /var/lib/openqa/share/tests/fedora
|
|
|
|
register: testsbranch
|
|
|
|
failed_when: "1 != 1"
|
|
|
|
changed_when: "1 != 1"
|
|
|
|
always_run: true
|
|
|
|
|
2015-11-13 09:49:00 -08:00
|
|
|
- name: Check out the tests
|
|
|
|
git:
|
|
|
|
repo: https://bitbucket.org/rajcze/openqa_fedora
|
|
|
|
dest: /var/lib/openqa/share/tests/fedora
|
2015-12-07 15:04:27 -08:00
|
|
|
register: gittests
|
2016-02-02 21:24:45 +00:00
|
|
|
become: true
|
|
|
|
become_user: geekotest
|
2016-09-06 12:30:26 -07:00
|
|
|
when: "(testsbranch.stdout.find('Not a git repository') != -1) or (testsbranch.stdout.find('On branch develop') != -1)"
|
2015-11-13 09:49:00 -08:00
|
|
|
|
|
|
|
- name: Check out openqa_fedora_tools
|
|
|
|
git:
|
|
|
|
repo: https://bitbucket.org/rajcze/openqa_fedora_tools
|
|
|
|
dest: /root/openqa_fedora_tools
|
2016-07-05 17:07:52 +00:00
|
|
|
register: git_result
|
2015-11-13 09:49:00 -08:00
|
|
|
|
|
|
|
- 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
|
2016-05-24 10:14:02 -07:00
|
|
|
- /var/lib/openqa/share/factory/other
|
2015-11-13 09:49:00 -08:00
|
|
|
|
2016-05-24 11:38:46 -07:00
|
|
|
- name: Set up createhdds cron job
|
|
|
|
copy: src=createhdds dest=/etc/cron.daily/createhdds owner=root group=root mode=0755
|
|
|
|
|
2015-12-17 13:29:16 -08:00
|
|
|
- name: Check if any hard disk images need (re)building
|
2016-03-18 15:34:23 -07:00
|
|
|
command: "/root/openqa_fedora_tools/tools/createhdds.py check"
|
2015-12-07 15:12:04 -08:00
|
|
|
args:
|
|
|
|
chdir: /var/lib/openqa/share/factory/hdd/
|
2015-12-17 13:29:16 -08:00
|
|
|
register: diskcheck
|
|
|
|
failed_when: "1 != 1"
|
2016-01-12 17:21:36 -08:00
|
|
|
changed_when: "1 != 1"
|
2015-12-17 13:29:16 -08:00
|
|
|
always_run: true
|
2015-12-07 15:12:04 -08:00
|
|
|
|
2016-07-04 09:37:05 -07:00
|
|
|
- name: Ensure libvirt is running if needed to create images
|
|
|
|
service: name=libvirtd enabled=yes state=started
|
2016-10-17 11:39:14 -07:00
|
|
|
when: "diskcheck.rc > 1"
|
2016-07-04 09:37:05 -07:00
|
|
|
|
2016-10-17 11:39:14 -07:00
|
|
|
# > 1 is not a typo; check exits with 1 if all images are present but some
|
|
|
|
# are outdated, and 2 if any images are missing. We only want to handle
|
|
|
|
# outright *missing* images here in the playbook (to handle the case of
|
|
|
|
# first deployment). Outdated images are handled by the daily cron run.
|
2016-03-31 05:56:15 -07:00
|
|
|
- name: Create hard disk images (this may take a long time!)
|
2016-05-24 11:38:46 -07:00
|
|
|
command: "/etc/cron.daily/createhdds"
|
2016-10-17 11:39:14 -07:00
|
|
|
when: "diskcheck.rc > 1"
|
2015-11-17 14:16:25 -08:00
|
|
|
|
2015-11-13 09:49:00 -08:00
|
|
|
- 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
|
2015-11-17 19:24:16 -08:00
|
|
|
notify:
|
|
|
|
- reload httpd
|
2015-11-13 09:49:00 -08:00
|
|
|
tags:
|
|
|
|
- config
|
|
|
|
|
|
|
|
- name: OpenQA config
|
2015-12-05 11:29:28 -08:00
|
|
|
template: src=openqa.ini.j2 dest=/etc/openqa/openqa.ini owner=geekotest group=root mode=0644
|
2015-11-13 09:49:00 -08:00
|
|
|
tags:
|
|
|
|
- config
|
|
|
|
|
|
|
|
- name: Create database
|
|
|
|
delegate_to: "{{ openqa_dbhost }}"
|
2016-02-02 21:24:45 +00:00
|
|
|
become_user: postgres
|
|
|
|
become: true
|
2016-01-06 21:58:31 +00:00
|
|
|
postgresql_db: db={{ openqa_dbname }}
|
2015-11-13 09:49:00 -08:00
|
|
|
when: "openqa_dbhost is defined"
|
|
|
|
|
|
|
|
- name: Ensure db user has access to database
|
|
|
|
delegate_to: "{{ openqa_dbhost }}"
|
2016-02-02 21:24:45 +00:00
|
|
|
become_user: postgres
|
|
|
|
become: true
|
2016-01-06 21:58:31 +00:00
|
|
|
postgresql_user: db={{ openqa_dbname }} user={{ openqa_dbuser }} password={{ openqa_dbpassword }} role_attr_flags=NOSUPERUSER
|
2015-11-13 09:49:00 -08:00
|
|
|
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
|
|
|
|
|
2016-03-08 14:26:28 -08:00
|
|
|
- name: Allow Apache to read from NFS (as we store test data files there now)
|
|
|
|
seboolean: name=httpd_use_nfs state=yes persistent=yes
|
|
|
|
|
2016-01-04 17:01:12 -08:00
|
|
|
# services is undefined in check mode
|
2015-11-13 09:49:00 -08:00
|
|
|
- name: Wait for openQA to be fully started
|
|
|
|
pause: seconds=5
|
2016-01-04 17:01:12 -08:00
|
|
|
when: "services is defined and services|changed"
|
2015-11-13 09:49:00 -08:00
|
|
|
|
2016-03-07 11:26:16 -08:00
|
|
|
# the 'dispatcher' role requires this to be root.fedmsg 0640. so we
|
|
|
|
# don't enforce ownership here and set mode to 0640 so we don't wind
|
|
|
|
# up ping-ponging it between server and dispatcher roles.
|
2015-11-13 09:49:00 -08:00
|
|
|
- name: openQA client config
|
2016-03-07 11:26:16 -08:00
|
|
|
template: src=client.conf.j2 dest=/etc/openqa/client.conf mode=0640
|
2015-11-13 09:49:00 -08:00
|
|
|
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)"
|
|
|
|
|
2015-12-15 14:14:54 -08:00
|
|
|
- name: Dump existing config for checking changes
|
|
|
|
shell: "/usr/share/openqa/script/dump_templates --json > /tmp/tmpl-old.json"
|
2016-09-06 12:30:26 -07:00
|
|
|
when: "(gittests is defined) and (gittests|changed)"
|
2015-12-15 14:14:54 -08:00
|
|
|
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.
|
2016-04-08 08:02:02 -07:00
|
|
|
- name: Load tests
|
|
|
|
shell: "/var/lib/openqa/share/tests/fedora/templates --clean"
|
2016-09-06 12:30:26 -07:00
|
|
|
when: "(gittests is defined) and (gittests|changed)"
|
2016-04-08 16:38:54 -07:00
|
|
|
changed_when: "1 != 1"
|
2016-04-08 08:02:02 -07:00
|
|
|
|
2015-12-15 14:14:54 -08:00
|
|
|
- name: Check if the tests changed in previous step
|
2016-01-04 17:10:19 -08:00
|
|
|
shell: "/usr/share/openqa/script/dump_templates --json > /tmp/tmpl-new.json && json_diff /tmp/tmpl-old.json /tmp/tmpl-new.json"
|
2016-09-06 12:30:26 -07:00
|
|
|
when: "(gittests is defined) and (gittests|changed)"
|
2015-12-15 14:14:54 -08:00
|
|
|
register: testsdiff
|
|
|
|
changed_when: "testsdiff.rc > 0"
|
|
|
|
failed_when: "1 != 1"
|
2016-03-19 16:08:15 -07:00
|
|
|
|
|
|
|
- name: Set asset size limit (if specified) (pgsql)
|
|
|
|
delegate_to: "{{ openqa_dbhost }}"
|
|
|
|
become_user: postgres
|
|
|
|
become: true
|
2016-03-19 16:10:14 -07:00
|
|
|
command: "psql -d {{ openqa_dbname }} -c \"UPDATE job_groups SET size_limit_gb = {{ openqa_assetsize }} WHERE size_limit_gb != {{ openqa_assetsize }};\""
|
2016-03-19 16:08:15 -07:00
|
|
|
when: "openqa_dbhost is defined and openqa_assetsize is defined"
|
|
|
|
register: pgsqlsize
|
2016-03-19 16:14:03 -07:00
|
|
|
changed_when: "pgsqlsize.stdout.find('UPDATE 0') == -1"
|