add osbs orchestrator/worker playbooks/roles
Signed-off-by: Adam Miller <maxamillion@fedoraproject.org> Signed-off-by: Adam Miller <admiller@redhat.com>
This commit is contained in:
parent
74087cff26
commit
037d4931b4
39 changed files with 2066 additions and 53 deletions
|
@ -226,17 +226,6 @@ csi_relationship: |
|
||||||
|
|
||||||
To update this text, add the csi_* vars to group_vars/ in ansible.
|
To update this text, add the csi_* vars to group_vars/ in ansible.
|
||||||
|
|
||||||
|
|
||||||
# docker images required by OpenShift Origin
|
|
||||||
openshift_required_images:
|
|
||||||
- "openshift/origin-pod"
|
|
||||||
|
|
||||||
# docker images required by OSBS for builds
|
|
||||||
fedora_required_images:
|
|
||||||
- "fedora:24"
|
|
||||||
- "fedora:25"
|
|
||||||
- "fedora:latest"
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# say if we want the apache role dependency for mod_wsgi or not
|
# say if we want the apache role dependency for mod_wsgi or not
|
||||||
# In some cases we want mod_wsgi and no apache (for python3 httpaio stuff)
|
# In some cases we want mod_wsgi and no apache (for python3 httpaio stuff)
|
||||||
|
|
|
@ -21,3 +21,8 @@ koji_url: "koji.fedoraproject.org"
|
||||||
osbs_client_conf_path: /etc/osbs.conf
|
osbs_client_conf_path: /etc/osbs.conf
|
||||||
|
|
||||||
baseiptables: False
|
baseiptables: False
|
||||||
|
|
||||||
|
# docker images required by OpenShift Origin
|
||||||
|
openshift_required_images:
|
||||||
|
- "openshift/origin-pod"
|
||||||
|
|
||||||
|
|
|
@ -6,19 +6,5 @@ num_cpus: 2
|
||||||
|
|
||||||
tcp_ports: [ 80, 443, 8443]
|
tcp_ports: [ 80, 443, 8443]
|
||||||
|
|
||||||
fas_client_groups: sysadmin-releng,fi-apprentice,sysadmin-noc,sysadmin-veteran
|
|
||||||
sudoers: "{{ private }}/files/sudo/00releng-sudoers"
|
|
||||||
|
|
||||||
docker_cert_dir: "/etc/docker/certs.d/candidate-registry.stg.fedoraproject.org"
|
|
||||||
source_registry: "registry.stg.fedoraproject.org"
|
|
||||||
docker_registry: "candidate-registry.stg.fedoraproject.org"
|
|
||||||
|
|
||||||
osbs_url: "osbs.stg.fedoraproject.org"
|
|
||||||
osbs_koji_username: "kojibuilder_stg"
|
|
||||||
|
|
||||||
koji_url: "koji.stg.fedoraproject.org"
|
|
||||||
|
|
||||||
osbs_client_conf_path: /etc/osbs.conf
|
|
||||||
|
|
||||||
openshift_node_labels: {'region':'infra'}
|
openshift_node_labels: {'region':'infra'}
|
||||||
openshift_schedulable: False
|
openshift_schedulable: False
|
||||||
|
|
|
@ -6,18 +6,4 @@ num_cpus: 2
|
||||||
|
|
||||||
tcp_ports: [ 80, 443, 8443, 10250]
|
tcp_ports: [ 80, 443, 8443, 10250]
|
||||||
|
|
||||||
fas_client_groups: sysadmin-releng,fi-apprentice,sysadmin-noc,sysadmin-veteran
|
|
||||||
sudoers: "{{ private }}/files/sudo/00releng-sudoers"
|
|
||||||
|
|
||||||
docker_cert_dir: "/etc/docker/certs.d/candidate-registry.stg.fedoraproject.org"
|
|
||||||
source_registry: "registry.stg.fedoraproject.org"
|
|
||||||
docker_registry: "candidate-registry.stg.fedoraproject.org"
|
|
||||||
|
|
||||||
osbs_url: "osbs.stg.fedoraproject.org"
|
|
||||||
osbs_koji_username: "kojibuilder_stg"
|
|
||||||
|
|
||||||
koji_url: "koji.stg.fedoraproject.org"
|
|
||||||
|
|
||||||
osbs_client_conf_path: /etc/osbs.conf
|
|
||||||
|
|
||||||
openshift_node_labels: {'region': 'primary', 'zone': 'default'}
|
openshift_node_labels: {'region': 'primary', 'zone': 'default'}
|
||||||
|
|
34
inventory/group_vars/osbs-orchestrators-stg
Normal file
34
inventory/group_vars/osbs-orchestrators-stg
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
---
|
||||||
|
osbs_manage_firewalld: false
|
||||||
|
osbs_namespace: "osbs"
|
||||||
|
# Allow 'oc' command to find its configuration file
|
||||||
|
osbs_kubeconfig_path: /etc/origin/master/admin.kubeconfig
|
||||||
|
osbs_environment:
|
||||||
|
HOME: "{{ lookup('env', 'HOME') }}"
|
||||||
|
KUBECONFIG: "{{ osbs_kubeconfig_path }}"
|
||||||
|
osbs_service_accounts:
|
||||||
|
- koji
|
||||||
|
- metrics
|
||||||
|
osbs_readonly_users:
|
||||||
|
- "system:serviceaccount:{{ osbs_namespace }}:metrics"
|
||||||
|
osbs_readonly_groups:
|
||||||
|
- "system:authenticated"
|
||||||
|
osbs_readwrite_groups: []
|
||||||
|
osbs_readwrite_users:
|
||||||
|
- "{{ ansible_hostname }}"
|
||||||
|
- "system:serviceaccount:{{ osbs_namespace }}:default"
|
||||||
|
- "system:serviceaccount:{{ osbs_namespace }}:builder"
|
||||||
|
osbs_admin_users:
|
||||||
|
- kevin
|
||||||
|
- puiterwijk
|
||||||
|
- maxamillion
|
||||||
|
- dgilmore
|
||||||
|
osbs_admin_groups: []
|
||||||
|
env: prod
|
||||||
|
osbs_ha_install: true
|
||||||
|
osbs_nodes: "{{ groups['osbs-orchestrator-' + env + '-nodes'] }}"
|
||||||
|
|
||||||
|
|
||||||
|
#nodeselectors
|
||||||
|
osbs_orchestrator_default_nodeselector: "orchestrator=true"
|
||||||
|
osbs_worker_default_nodeselector: "worker=true"
|
|
@ -1,2 +1,103 @@
|
||||||
---
|
---
|
||||||
|
|
||||||
baseiptables: False
|
baseiptables: False
|
||||||
|
|
||||||
|
fas_client_groups: sysadmin-releng,fi-apprentice,sysadmin-noc,sysadmin-veteran
|
||||||
|
sudoers: "{{ private }}/files/sudo/00releng-sudoers"
|
||||||
|
|
||||||
|
docker_cert_dir: "/etc/docker/certs.d/candidate-registry.stg.fedoraproject.org"
|
||||||
|
stable_registry: "registry.stg.fedoraproject.org"
|
||||||
|
candidate_registry: "candidate-registry.stg.fedoraproject.org"
|
||||||
|
|
||||||
|
osbs_url: "osbs.stg.fedoraproject.org"
|
||||||
|
osbsworker_x86_64_url: "osbsworker-x86-64.stg.fedoraproject.org"
|
||||||
|
|
||||||
|
koji_url: "koji.stg.fedoraproject.org"
|
||||||
|
|
||||||
|
osbs_builder_user: builder
|
||||||
|
koji_builder_user: dockerbuilder
|
||||||
|
|
||||||
|
osbs_client_conf_path: /etc/osbs.conf
|
||||||
|
|
||||||
|
openshift_htpasswd_file: /etc/origin/htpasswd
|
||||||
|
openshift_ansible_version: openshift-ansible-3.5.97-1
|
||||||
|
openshift_ansible_ssh_user: root
|
||||||
|
openshift_ansible_install_examples: false
|
||||||
|
openshift_ansible_containerized_deploy: false
|
||||||
|
openshift_auth_profile: osbs
|
||||||
|
origin_release: v1.5.1
|
||||||
|
openshift_debug_level: 2
|
||||||
|
|
||||||
|
osbs_namespace: "osbs"
|
||||||
|
osbs_koji_username: "kojibuilder_stg"
|
||||||
|
|
||||||
|
osbs_openshift_home: /var/lib/origin
|
||||||
|
osbs_kubeconfig_path: /etc/origin/master/admin.kubeconfig
|
||||||
|
osbs_generated_config_path: /tmp
|
||||||
|
|
||||||
|
osbs_environment:
|
||||||
|
KUBECONFIG: "{{ osbs_kubeconfig_path }}"
|
||||||
|
|
||||||
|
osbs_is_admin: true
|
||||||
|
|
||||||
|
osbs_service_accounts:
|
||||||
|
- worker
|
||||||
|
- orchestrator
|
||||||
|
- metrics
|
||||||
|
|
||||||
|
osbs_cpu_limitrange: '200m'
|
||||||
|
|
||||||
|
# FIXME
|
||||||
|
# I'm not sure who all should be admins and we might want some read-only user
|
||||||
|
# for the purpose of monitoring
|
||||||
|
osbs_admin_groups: []
|
||||||
|
osbs_admin_users: []
|
||||||
|
osbs_readonly_groups: []
|
||||||
|
osbs_readonly_users: []
|
||||||
|
osbs_readwrite_groups: []
|
||||||
|
osbs_readwrite_users: []
|
||||||
|
|
||||||
|
osbs_orchestrator: false
|
||||||
|
|
||||||
|
osbs_worker_namespace: "worker"
|
||||||
|
|
||||||
|
osbs_worker_service_accounts:
|
||||||
|
- worker
|
||||||
|
- orchestrator
|
||||||
|
|
||||||
|
osbs_worker_clusters:
|
||||||
|
x86_64:
|
||||||
|
- name: osbsworker-x86-64
|
||||||
|
max_concurrent_builds: 12
|
||||||
|
openshift_url: "https://{{ osbsworker_x86_64_url }}"
|
||||||
|
verify_ssl: 'false'
|
||||||
|
artifacts_allowed_domains:
|
||||||
|
- "{{stable_registry}}"
|
||||||
|
- "{{candidate_registry}}"
|
||||||
|
|
||||||
|
osbs_koji_hub: "https://{{koji_url}}/kojihub
|
||||||
|
osbs_koji_root: https://{{koji_url}}/koji
|
||||||
|
|
||||||
|
osbs_pulp_registry_name: brew-prod
|
||||||
|
|
||||||
|
osbs_registry_uri: https://{{candidate_registry}}/v2
|
||||||
|
|
||||||
|
osbs_source_registry_uri: http://brew-pulp-docker01.web.prod.ext.phx2.redhat.com:8888
|
||||||
|
|
||||||
|
osbs_koji_secret_name: koji
|
||||||
|
osbs_distribution_scope: public
|
||||||
|
osbs_authoritative_registry: "{{ stable_registry }}"
|
||||||
|
osbs_registry_api_versions:
|
||||||
|
- v2
|
||||||
|
osbs_registry_secret_name: v2-registry-dockercfg
|
||||||
|
osbs_registry_uri: ''
|
||||||
|
osbs_source_registry_uri: ''
|
||||||
|
osbs_build_json_dir: /usr/share/osbs
|
||||||
|
osbs_sources_command: fedpkg sources
|
||||||
|
osbs_vendor: Fedora Project
|
||||||
|
|
||||||
|
#nodeselectors
|
||||||
|
osbs_orchestrator_default_nodeselector: "orchestrator=true"
|
||||||
|
osbs_worker_default_nodeselector: "worker=true"
|
||||||
|
|
||||||
|
|
||||||
|
|
10
inventory/group_vars/osbsworker-x86-64-masters-stg
Normal file
10
inventory/group_vars/osbsworker-x86-64-masters-stg
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
---
|
||||||
|
# Define resources for this group of hosts here.
|
||||||
|
lvm_size: 60000
|
||||||
|
mem_size: 8192
|
||||||
|
num_cpus: 2
|
||||||
|
|
||||||
|
tcp_ports: [ 80, 443, 8443]
|
||||||
|
|
||||||
|
openshift_node_labels: {'region':'infra'}
|
||||||
|
openshift_schedulable: False
|
9
inventory/group_vars/osbsworker-x86-64-nodes-stg
Normal file
9
inventory/group_vars/osbsworker-x86-64-nodes-stg
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
---
|
||||||
|
# Define resources for this group of hosts here.
|
||||||
|
lvm_size: 60000
|
||||||
|
mem_size: 8192
|
||||||
|
num_cpus: 2
|
||||||
|
|
||||||
|
tcp_ports: [ 80, 443, 8443, 10250]
|
||||||
|
|
||||||
|
openshift_node_labels: {'region': 'primary', 'zone': 'default'}
|
|
@ -1333,16 +1333,16 @@ osbs-master01.phx2.fedoraproject.org
|
||||||
[osbs-masters-stg]
|
[osbs-masters-stg]
|
||||||
osbs-master01.stg.phx2.fedoraproject.org
|
osbs-master01.stg.phx2.fedoraproject.org
|
||||||
|
|
||||||
[osbsworker-masters-stg]
|
[osbsworker-x86-64-masters-stg]
|
||||||
#osbsworker-x86-64-master01.stg.phx2.fedoraproject.org
|
osbsworker-x86-64-master01.stg.phx2.fedoraproject.org
|
||||||
|
|
||||||
[osbs-nodes-stg]
|
[osbs-nodes-stg]
|
||||||
osbs-node01.stg.phx2.fedoraproject.org
|
osbs-node01.stg.phx2.fedoraproject.org
|
||||||
osbs-node02.stg.phx2.fedoraproject.org
|
osbs-node02.stg.phx2.fedoraproject.org
|
||||||
|
|
||||||
[osbsworker-nodes-stg]
|
[osbsworker-x86-64-nodes-stg]
|
||||||
#osbsworker-x86-64-node01.stg.phx2.fedoraproject.org
|
osbsworker-x86-64-node01.stg.phx2.fedoraproject.org
|
||||||
#osbsworker-x86-64-node02.stg.phx2.fedoraproject.org
|
osbsworker-x86-64-node02.stg.phx2.fedoraproject.org
|
||||||
|
|
||||||
[osbs:children]
|
[osbs:children]
|
||||||
osbs-control
|
osbs-control
|
||||||
|
@ -1353,8 +1353,16 @@ osbs-masters
|
||||||
osbs-control-stg
|
osbs-control-stg
|
||||||
osbs-nodes-stg
|
osbs-nodes-stg
|
||||||
osbs-masters-stg
|
osbs-masters-stg
|
||||||
osbsworker-nodes-stg
|
osbsworker-x86-64-nodes-stg
|
||||||
osbsworker-masters-stg
|
osbsworker-x86-64-masters-stg
|
||||||
|
|
||||||
|
[osbs-orchestrators-stg:children]
|
||||||
|
osbs-nodes-stg
|
||||||
|
osbs-masters-stg
|
||||||
|
|
||||||
|
[osbs-workers-stg:children]
|
||||||
|
osbsworker-x86-64-nodes-stg
|
||||||
|
osbsworker-x86-64-masters-stg
|
||||||
|
|
||||||
[os-control-stg]
|
[os-control-stg]
|
||||||
os-control01.stg.phx2.fedoraproject.org
|
os-control01.stg.phx2.fedoraproject.org
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
# create an osbs server
|
# create an osbs server
|
||||||
- include: "/srv/web/infra/ansible/playbooks/include/virt-create.yml myhosts=osbs-control-stg:osbs-control"
|
- include: "/srv/web/infra/ansible/playbooks/include/virt-create.yml myhosts=osbs-control"
|
||||||
- include: "/srv/web/infra/ansible/playbooks/include/virt-create.yml myhosts=osbs-nodes-stg:osbs-masters-stg:osbs-nodes:osbs-masters:osbsworker-nodes-stg:osbsworker-masters-stg"
|
- include: "/srv/web/infra/ansible/playbooks/include/virt-create.yml myhosts=osbs-nodes:osbs-masters"
|
||||||
|
|
||||||
- name: make the box be real
|
- name: make the box be real
|
||||||
hosts: osbs-control:osbs-control-stg:osbs-masters-stg:osbs-nodes-stg:osbs-masters:osbs-nodes:osbsworker-nodes-stg:osbsworker-masters-stg
|
hosts: osbs-control:osbs-masters:osbs-nodes
|
||||||
user: root
|
user: root
|
||||||
gather_facts: True
|
gather_facts: True
|
||||||
|
|
||||||
|
@ -738,7 +738,7 @@
|
||||||
|
|
||||||
|
|
||||||
- name: Post-Install image stream refresh
|
- name: Post-Install image stream refresh
|
||||||
hosts: osbs-masters-stg[0]:osbs-masters[0]
|
hosts: osbs-masters[0]
|
||||||
tags:
|
tags:
|
||||||
- osbs-post-install
|
- osbs-post-install
|
||||||
vars_files:
|
vars_files:
|
||||||
|
|
657
playbooks/groups/osbs-orchestrator-cluster.yml
Normal file
657
playbooks/groups/osbs-orchestrator-cluster.yml
Normal file
|
@ -0,0 +1,657 @@
|
||||||
|
# create an osbs server
|
||||||
|
- include: "/srv/web/infra/ansible/playbooks/include/virt-create.yml myhosts=osbs-stg"
|
||||||
|
|
||||||
|
- name: make the box be real
|
||||||
|
hosts: osbs-stg
|
||||||
|
user: root
|
||||||
|
gather_facts: True
|
||||||
|
|
||||||
|
vars_files:
|
||||||
|
- /srv/web/infra/ansible/vars/global.yml
|
||||||
|
- "/srv/private/ansible/vars.yml"
|
||||||
|
- /srv/web/infra/ansible/vars/{{ ansible_distribution }}.yml
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- base
|
||||||
|
- rkhunter
|
||||||
|
- nagios_client
|
||||||
|
- hosts
|
||||||
|
- fas_client
|
||||||
|
- collectd/base
|
||||||
|
- rsyncd
|
||||||
|
- sudo
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- include: "{{ tasks_path }}/yumrepos.yml"
|
||||||
|
- include: "{{ tasks_path }}/2fa_client.yml"
|
||||||
|
- include: "{{ tasks_path }}/motd.yml"
|
||||||
|
|
||||||
|
handlers:
|
||||||
|
- include: "{{ handlers_path }}/restart_services.yml"
|
||||||
|
|
||||||
|
# Prepare the Control host to be able to run ansible-ansible-openshift-ansible
|
||||||
|
# against the Orchestration and Worker cluster machines
|
||||||
|
- name: OSBS control hosts pre-req setup
|
||||||
|
hosts: osbs-control-stg
|
||||||
|
tags:
|
||||||
|
- osbs-orchestrator-prereq
|
||||||
|
user: root
|
||||||
|
gather_facts: True
|
||||||
|
|
||||||
|
vars_files:
|
||||||
|
- /srv/web/infra/ansible/vars/global.yml
|
||||||
|
- "/srv/private/ansible/vars.yml"
|
||||||
|
- /srv/web/infra/ansible/vars/{{ ansible_distribution }}.yml
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: deploy private key to control hosts
|
||||||
|
copy:
|
||||||
|
src: "{{private}}/files/osbs/{{env}}/control_key"
|
||||||
|
dest: "/root/.ssh/id_rsa"
|
||||||
|
owner: root
|
||||||
|
mode: 0600
|
||||||
|
|
||||||
|
- name: set ansible to use pipelining
|
||||||
|
ini_file:
|
||||||
|
dest: /etc/ansible/ansible.cfg
|
||||||
|
section: ssh_connection
|
||||||
|
option: pipelining
|
||||||
|
value: "True"
|
||||||
|
|
||||||
|
|
||||||
|
# This section sets up the SSL Certs for "public facing" which is how Koji will
|
||||||
|
# interact with the OSBS Orchestration cluster. This is not needed on the worker
|
||||||
|
# clusters.
|
||||||
|
- name: Setup orchestrator cluster masters pre-reqs
|
||||||
|
hosts: osbs-masters-stg
|
||||||
|
tags:
|
||||||
|
- osbs-orchestrator-prereq
|
||||||
|
user: root
|
||||||
|
gather_facts: True
|
||||||
|
|
||||||
|
vars_files:
|
||||||
|
- /srv/web/infra/ansible/vars/global.yml
|
||||||
|
- "/srv/private/ansible/vars.yml"
|
||||||
|
- /srv/web/infra/ansible/vars/{{ ansible_distribution }}.yml
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: ensure origin conf dir exists
|
||||||
|
file:
|
||||||
|
path: "/etc/origin"
|
||||||
|
state: "directory"
|
||||||
|
|
||||||
|
- name: create cert dir for openshift public facing REST API SSL
|
||||||
|
file:
|
||||||
|
path: "/etc/origin/master/named_certificates"
|
||||||
|
state: "directory"
|
||||||
|
|
||||||
|
- name: install cert for openshift public facing REST API SSL
|
||||||
|
copy:
|
||||||
|
src: "{{private}}/files/osbs/{{env}}/osbs-internal.pem"
|
||||||
|
dest: "/etc/origin/master/named_certificates/{{osbs_url}}.pem"
|
||||||
|
|
||||||
|
- name: install key for openshift public facing REST API SSL
|
||||||
|
copy:
|
||||||
|
src: "{{private}}/files/osbs/{{env}}/osbs-internal.key"
|
||||||
|
dest: "/etc/origin/master/named_certificates/{{osbs_url}}.key"
|
||||||
|
|
||||||
|
- name: place htpasswd file
|
||||||
|
copy:
|
||||||
|
src: "{{private}}/files/httpd/osbs-{{env}}.htpasswd"
|
||||||
|
dest: "{{ openshift_htpasswd_file }}"
|
||||||
|
|
||||||
|
|
||||||
|
# This installs required pre-reqs and deploys the Controler's public key to all
|
||||||
|
# machines in both the Orchestrator and Worker clusters in order to allow
|
||||||
|
# ansible-ansible-openshift-ansible to be run against them
|
||||||
|
- name: Setup cluster hosts pre-reqs
|
||||||
|
hosts: osbs-orchestrators-stg:osbs-workers-stg
|
||||||
|
tags:
|
||||||
|
- osbs-orchestrator-prereq
|
||||||
|
user: root
|
||||||
|
gather_facts: True
|
||||||
|
|
||||||
|
vars_files:
|
||||||
|
- /srv/web/infra/ansible/vars/global.yml
|
||||||
|
- "/srv/private/ansible/vars.yml"
|
||||||
|
- /srv/web/infra/ansible/vars/{{ ansible_distribution }}.yml
|
||||||
|
|
||||||
|
handlers:
|
||||||
|
- name: restart NetworkManager
|
||||||
|
service:
|
||||||
|
name: NetworkManager
|
||||||
|
state: restarted
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- role: openshift-prerequisites
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: Install necessary packages that openshift-ansible needs
|
||||||
|
package: name="{{ item }}" state=installed
|
||||||
|
with_items:
|
||||||
|
- tar
|
||||||
|
- rsync
|
||||||
|
- dbus-python
|
||||||
|
- NetworkManager
|
||||||
|
- libselinux-python
|
||||||
|
- origin
|
||||||
|
|
||||||
|
- name: Deploy controller public ssh keys to osbs cluster hosts
|
||||||
|
authorized_key:
|
||||||
|
user: root
|
||||||
|
key: "{{ lookup('file', '{{private}}/files/osbs/{{env}}/control_key.pub') }}"
|
||||||
|
|
||||||
|
# This is required for OpenShift built-in SkyDNS inside the overlay network
|
||||||
|
# of the cluster
|
||||||
|
- name: ensure NM_CONTROLLED is set to "yes" for osbs cluster
|
||||||
|
lineinfile:
|
||||||
|
dest: "/etc/sysconfig/network-scripts/ifcfg-eth0"
|
||||||
|
line: "NM_CONTROLLED=yes"
|
||||||
|
notify:
|
||||||
|
- restart NetworkManager
|
||||||
|
|
||||||
|
# This is required for OpenShift built-in SkyDNS inside the overlay network
|
||||||
|
# of the cluster
|
||||||
|
- name: ensure NetworkManager is enabled and started
|
||||||
|
service:
|
||||||
|
name: NetworkManager
|
||||||
|
state: started
|
||||||
|
enabled: yes
|
||||||
|
|
||||||
|
- name: cron entry to clean up docker storage
|
||||||
|
copy:
|
||||||
|
src: "{{files}}/osbs/cleanup-docker-storage"
|
||||||
|
dest: "/etc/cron.d/cleanup-docker-storage"
|
||||||
|
|
||||||
|
- name: copy docker-storage-setup config
|
||||||
|
copy:
|
||||||
|
src: "{{files}}/osbs/docker-storage-setup"
|
||||||
|
dest: "/etc/sysconfig/docker-storage-setup"
|
||||||
|
|
||||||
|
|
||||||
|
# This keytab needs to be on any system that is going to talk to koji and
|
||||||
|
# unfortunately, that's all of them.
|
||||||
|
- name: Deploy kerberose keytab to cluster hosts
|
||||||
|
hosts: osbs-masters-stg:osbs-nodes-stg:osbsworker-masters-stg:osbsworker-nodes-stg
|
||||||
|
tags:
|
||||||
|
- osbs-cluster-prereq
|
||||||
|
user: root
|
||||||
|
gather_facts: True
|
||||||
|
|
||||||
|
vars_files:
|
||||||
|
- /srv/web/infra/ansible/vars/global.yml
|
||||||
|
- "/srv/private/ansible/vars.yml"
|
||||||
|
- /srv/web/infra/ansible/vars/{{ ansible_distribution }}.yml
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- role: keytab/service
|
||||||
|
owner_user: root
|
||||||
|
owner_group: root
|
||||||
|
service: osbs
|
||||||
|
host: "osbs.stg.fedoraproject.org"
|
||||||
|
when: env == "staging"
|
||||||
|
|
||||||
|
- name: Deploy OpenShift Clusters
|
||||||
|
hosts: osbs-control-stg
|
||||||
|
tags:
|
||||||
|
- osbs-deploy-openshift
|
||||||
|
user: root
|
||||||
|
gather_facts: True
|
||||||
|
|
||||||
|
vars_files:
|
||||||
|
- /srv/web/infra/ansible/vars/global.yml
|
||||||
|
- "/srv/private/ansible/vars.yml"
|
||||||
|
- /srv/web/infra/ansible/vars/{{ ansible_distribution }}.yml
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- role: ansible-ansible-openshift-ansible
|
||||||
|
cluster_inventory_filename: "orchestrator-cluster-inventory-stg"
|
||||||
|
openshift_htpasswd_file: "{{ openshift_htpasswd_file }}"
|
||||||
|
openshift_master_public_api_url: "https://{{ osbs_url }}:8443"
|
||||||
|
openshift_release: "{{ origin_release }}"
|
||||||
|
openshift_ansible_path: "/root/openshift-ansible"
|
||||||
|
openshift_ansible_playbook: "playbooks/byo/config.yml"
|
||||||
|
openshift_ansible_version: "{{ openshift_ansible_version }}"
|
||||||
|
openshift_ansible_ssh_user: "{{ openshift_ansible_ssh_user }}"
|
||||||
|
openshift_ansible_install_examples: "{{ openshift_ansible_install_examples }}"
|
||||||
|
openshift_ansible_containerized_deploy: "{{ openshift_ansible_containerized_deploy }}"
|
||||||
|
openshift_cluster_masters_group: "osbs-masters-stg"
|
||||||
|
openshift_cluster_nodes_group: "osbs-nodes-stg"
|
||||||
|
openshift_cluster_infra_group: "osbs-masters-stg"
|
||||||
|
openshift_auth_profile: "{{ openshift_auth_profile }}"
|
||||||
|
openshift_cluster_url: "{{ osbs_url }}"
|
||||||
|
openshift_master_ha: false
|
||||||
|
openshift_debug_level: "{{ openshift_debug_level }}"
|
||||||
|
openshift_shared_infra: true
|
||||||
|
openshift_deployment_type: "origin"
|
||||||
|
openshift_metrics_deploy: true
|
||||||
|
when: env == 'staging'
|
||||||
|
tags: ['openshift-cluster','ansible-ansible-openshift-ansible']
|
||||||
|
|
||||||
|
- role: ansible-ansible-openshift-ansible
|
||||||
|
cluster_inventory_filename: "x86-64-worker-cluster-inventory-stg"
|
||||||
|
openshift_htpasswd_file: "{{ openshift_htpasswd_file }}"
|
||||||
|
openshift_master_public_api_url: "https://{{ osbsworker_x86_64_url }}:8443"
|
||||||
|
openshift_release: "{{ origin_release }}"
|
||||||
|
openshift_ansible_path: "/root/openshift-ansible"
|
||||||
|
openshift_ansible_playbook: "playbooks/byo/config.yml"
|
||||||
|
openshift_ansible_version: "openshift-ansible-3.3.57-1"
|
||||||
|
openshift_ansible_ssh_user: "{{ openshift_ansible_ssh_user }}"
|
||||||
|
openshift_ansible_install_examples: "{{ openshift_ansible_install_examples }}"
|
||||||
|
openshift_ansible_containerized_deploy: "{{ openshift_ansible_containerized_deploy }}"
|
||||||
|
openshift_cluster_masters_group: "osbsworker-masters-stg"
|
||||||
|
openshift_cluster_nodes_group: "osbsworker-nodes-stg"
|
||||||
|
openshift_cluster_infra_group: "osbsworker-masters-stg"
|
||||||
|
openshift_auth_profile: "{{ openshift_auth_profile }}"
|
||||||
|
openshift_cluster_url: "{{ osbsworker_x86_64_url }}"
|
||||||
|
openshift_master_ha: false
|
||||||
|
openshift_debug_level: "{{ openshift_debug_level }}"
|
||||||
|
openshift_shared_infra: true
|
||||||
|
openshift_deployment_type: "origin"
|
||||||
|
openshift_metrics_deploy: true
|
||||||
|
when: env == 'staging'
|
||||||
|
tags: ['openshift-cluster','ansible-ansible-openshift-ansible']
|
||||||
|
|
||||||
|
|
||||||
|
- name: Setup OSBS requirements for OpenShift cluster hosts
|
||||||
|
hosts: osbs-masters-stg:osbs-nodes-stg:osbsworker-masters-stg:osbsworker-nodes-stg
|
||||||
|
tags:
|
||||||
|
- osbs-cluster-req
|
||||||
|
user: root
|
||||||
|
gather_facts: True
|
||||||
|
|
||||||
|
vars_files:
|
||||||
|
- /srv/web/infra/ansible/vars/global.yml
|
||||||
|
- "/srv/private/ansible/vars.yml"
|
||||||
|
- /srv/web/infra/ansible/vars/{{ ansible_distribution }}.yml
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- role: osbs-common
|
||||||
|
osbs_manage_firewalld: false
|
||||||
|
|
||||||
|
- role: osbs-atomic-reactor
|
||||||
|
|
||||||
|
- role: push-docker
|
||||||
|
docker_cert_name: "containerbuild"
|
||||||
|
docker_cert_dir: "/etc/docker/certs.d/{{ candidate_registry }}"
|
||||||
|
when: env == "staging"
|
||||||
|
|
||||||
|
# The images that come out of the builds need to be pushed somwhere
|
||||||
|
- role: "manage-container-images"
|
||||||
|
cert_dest_dir: "/etc/docker/certs.d/{{ candidate_registry }}"
|
||||||
|
cert_src: "{{private}}/files/docker-registry/{{env}}/docker-registry-internal.pem"
|
||||||
|
key_src: "{{private}}/files/docker-registry/{{env}}/docker-registry-internal.key"
|
||||||
|
when: env == "staging"
|
||||||
|
|
||||||
|
handlers:
|
||||||
|
- name: restart dnsmasq
|
||||||
|
service:
|
||||||
|
name: dnsmasq
|
||||||
|
state: restarted
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
|
||||||
|
- name: install fedora dnsmasq specific config
|
||||||
|
copy:
|
||||||
|
src: "{{files}}/osbs/fedora-dnsmasq.conf.{{env}}"
|
||||||
|
dest: "/etc/dnsmasq.d/fedora-dns.conf"
|
||||||
|
notify:
|
||||||
|
- restart dnsmasq
|
||||||
|
|
||||||
|
- name: setup orchestrator namespace
|
||||||
|
hosts: osbs-masters-stg[0]
|
||||||
|
tags:
|
||||||
|
- osbs-cluster-req
|
||||||
|
user: root
|
||||||
|
gather_facts: True
|
||||||
|
|
||||||
|
vars_files:
|
||||||
|
- /srv/web/infra/ansible/vars/global.yml
|
||||||
|
- "/srv/private/ansible/vars.yml"
|
||||||
|
- /srv/web/infra/ansible/vars/{{ ansible_distribution }}.yml
|
||||||
|
|
||||||
|
vars:
|
||||||
|
osbs_kubeconfig_path: /etc/origin/master/admin.kubeconfig
|
||||||
|
osbs_environment:
|
||||||
|
KUBECONFIG: "{{ osbs_kubeconfig_path }}"
|
||||||
|
koji_pki_dir: /etc/pki/koji
|
||||||
|
koji_ca_cert_path: "{{koji_pki_dir}}/fedora-server-ca.cert"
|
||||||
|
koji_cert_path: "{{koji_pki_dir}}/fedora-builder.pem"
|
||||||
|
koji_builder_user: dockerbuilder
|
||||||
|
osbs_secret_name: kojisecret
|
||||||
|
osbs_secret_service_account: "{{ osbs_builder_user }}"
|
||||||
|
osbs_secret_remote_dir: /var/lib/origin
|
||||||
|
osbs_secret_can_fail: false
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- role: osbs-namespace
|
||||||
|
osbs_orchestrator: true
|
||||||
|
osbs_cpu_limitrange: "{{ osbs_orchestrator_cpu_limitrange }}"
|
||||||
|
osbs_nodeselector: "{{ osbs_orchestrator_default_nodeselector|default('') }}"
|
||||||
|
|
||||||
|
- role: osbs-secret
|
||||||
|
osbs_namespace: "{{ osbs_worker_namespace }}"
|
||||||
|
osbs_secret_name: kojisecret
|
||||||
|
osbs_secret_files:
|
||||||
|
- source: "{{ secret_repo }}/groups/osbs-{{ env }}/koji/cert"
|
||||||
|
dest: cert
|
||||||
|
- source: "{{ secret_repo }}/groups/osbs-{{ env }}/koji/ca"
|
||||||
|
dest: ca
|
||||||
|
- source: "{{ secret_repo }}/groups/osbs-{{ env }}/koji/serverca"
|
||||||
|
dest: serverca
|
||||||
|
|
||||||
|
- name: setup worker namespace
|
||||||
|
hosts: osbsworker-x86-64-masters-stg[0]
|
||||||
|
tags:
|
||||||
|
- osbs-cluster-req
|
||||||
|
user: root
|
||||||
|
gather_facts: True
|
||||||
|
|
||||||
|
vars_files:
|
||||||
|
- /srv/web/infra/ansible/vars/global.yml
|
||||||
|
- "/srv/private/ansible/vars.yml"
|
||||||
|
- /srv/web/infra/ansible/vars/{{ ansible_distribution }}.yml
|
||||||
|
|
||||||
|
vars:
|
||||||
|
osbs_kubeconfig_path: /etc/origin/master/admin.kubeconfig
|
||||||
|
osbs_environment:
|
||||||
|
KUBECONFIG: "{{ osbs_kubeconfig_path }}"
|
||||||
|
koji_pki_dir: /etc/pki/koji
|
||||||
|
koji_ca_cert_path: "{{koji_pki_dir}}/fedora-server-ca.cert"
|
||||||
|
koji_cert_path: "{{koji_pki_dir}}/fedora-builder.pem"
|
||||||
|
koji_builder_user: dockerbuilder
|
||||||
|
osbs_builder_user: builder
|
||||||
|
osbs_secret_name: kojisecret
|
||||||
|
osbs_secret_service_account: "{{ osbs_builder_user }}"
|
||||||
|
osbs_secret_remote_dir: /var/lib/origin
|
||||||
|
osbs_secret_can_fail: false
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- role: osbs-namespace
|
||||||
|
osbs_namespace: "{{ osbs_worker_namespace }}"
|
||||||
|
osbs_service_accounts: "{{ osbs_worker_service_accounts }}"
|
||||||
|
osbs_nodeselector: "{{ osbs_worker_default_nodeselector|default('') }}"
|
||||||
|
|
||||||
|
- role: osbs-secret
|
||||||
|
osbs_namespace: "{{ osbs_worker_namespace }}"
|
||||||
|
osbs_secret_name: kojisecret
|
||||||
|
osbs_secret_files:
|
||||||
|
- source: "{{ secret_repo }}/groups/osbs-{{ env }}/koji/cert"
|
||||||
|
dest: cert
|
||||||
|
- source: "{{ secret_repo }}/groups/osbs-{{ env }}/koji/ca"
|
||||||
|
dest: ca
|
||||||
|
- source: "{{ secret_repo }}/groups/osbs-{{ env }}/koji/serverca"
|
||||||
|
dest: serverca
|
||||||
|
|
||||||
|
- name: Setup Koji auth for OpenShift Orchestrator
|
||||||
|
hosts: osbs-masters-stg[0]
|
||||||
|
tags:
|
||||||
|
- osbs-cluster-req
|
||||||
|
user: root
|
||||||
|
gather_facts: True
|
||||||
|
|
||||||
|
vars_files:
|
||||||
|
- /srv/web/infra/ansible/vars/global.yml
|
||||||
|
- "/srv/private/ansible/vars.yml"
|
||||||
|
- /srv/web/infra/ansible/vars/{{ ansible_distribution }}.yml
|
||||||
|
tags:
|
||||||
|
- osbs-master-req
|
||||||
|
user: root
|
||||||
|
gather_facts: True
|
||||||
|
|
||||||
|
vars_files:
|
||||||
|
- /srv/web/infra/ansible/vars/global.yml
|
||||||
|
- "/srv/private/ansible/vars.yml"
|
||||||
|
- /srv/web/infra/ansible/vars/{{ ansible_distribution }}.yml
|
||||||
|
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: set policy for koji builder in openshift for osbs
|
||||||
|
shell: "oadm policy add-role-to-user -n {{ osbs_namespace }} edit htpasswd_provider: {{ osbs_koji_stg_username }} && touch /etc/origin/koji-builder-policy-added"
|
||||||
|
args:
|
||||||
|
creates: "/etc/origin/koji-builder-policy-added"
|
||||||
|
when: env == "staging"
|
||||||
|
|
||||||
|
- name: set policy for koji builder in openshift for atomic-reactor
|
||||||
|
shell: "oadm policy add-role-to-user -n {{ osbs_namespace }} edit system:serviceaccount:{{osbs_namespace}}:{{osbs_ && touch /etc/origin/atomic-reactor-policy-added"
|
||||||
|
args:
|
||||||
|
creates: "/etc/origin/atomic-reactor-policy-added"
|
||||||
|
|
||||||
|
|
||||||
|
- name: Manage docker images and image stream
|
||||||
|
hosts: osbs-masters-stg[0]:osbsworker-x86-64-masters-stg[0]
|
||||||
|
tags:
|
||||||
|
- osbs-post-install
|
||||||
|
- manage-docker-images
|
||||||
|
vars_files:
|
||||||
|
- /srv/web/infra/ansible/vars/global.yml
|
||||||
|
- /srv/private/ansible/vars.yml
|
||||||
|
- /srv/private/ansible/files/openstack/passwords.yml
|
||||||
|
- /srv/web/infra/ansible/vars/{{ ansible_distribution }}.yml
|
||||||
|
vars:
|
||||||
|
osbs_kubeconfig_path: /etc/origin/master/admin.kubeconfig
|
||||||
|
osbs_environment:
|
||||||
|
KUBECONFIG: "{{ osbs_kubeconfig_path }}"
|
||||||
|
koji_pki_dir: /etc/pki/koji
|
||||||
|
koji_ca_cert_path: "{{koji_pki_dir}}/fedora-server-ca.cert"
|
||||||
|
koji_cert_path: "{{koji_pki_dir}}/fedora-builder.pem"
|
||||||
|
koji_builder_user: dockerbuilder
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: pull openshift required docker images
|
||||||
|
shell: "docker pull {{item}}:v{{origin_release}}"
|
||||||
|
with_items: "{{openshift_required_images}}"
|
||||||
|
delegate_to: compose-x86-01.phx2.fedoraproject.org
|
||||||
|
register: docker_pull_openshift_delegated
|
||||||
|
changed_when: "'Downloaded newer image' in docker_pull_openshift_delegated.stdout"
|
||||||
|
|
||||||
|
- name: tag openshift required docker images for our registry
|
||||||
|
shell: "docker tag {{item}}:v{{origin_release}} {{candidate_registry}}/{{item}}:v{{origin_release}}"
|
||||||
|
with_items: "{{openshift_required_images}}"
|
||||||
|
delegate_to: compose-x86-01.phx2.fedoraproject.org
|
||||||
|
when: docker_pull_openshift_delegated|changed
|
||||||
|
|
||||||
|
- name: push openshift required docker images to our registry
|
||||||
|
shell: "docker push {{candidate_registry}}/{{item}}:v{{origin_release}}"
|
||||||
|
with_items: "{{openshift_required_images}}"
|
||||||
|
delegate_to: compose-x86-01.phx2.fedoraproject.org
|
||||||
|
when: docker_pull_openshift_delegated|changed
|
||||||
|
|
||||||
|
- name: create fedora image stream for OpenShift
|
||||||
|
shell: "echo '{ \"apiVersion\": \"v1\", \"kind\": \"ImageStream\", \"metadata\": { \"name\": \"fedora\" }, \"spec\": { \"dockerImageRepository\": \"{{candidate_registry}}/fedora\" } }' | oc create -f - && touch /etc/origin/fedoraimagestreamcreated"
|
||||||
|
environment: "{{ osbs_environment }}"
|
||||||
|
args:
|
||||||
|
creates: /etc/origin/fedoraimagestreamcreated
|
||||||
|
|
||||||
|
- name: post-install osbs tasks
|
||||||
|
hosts: osbs-masters-stg:osbs-nodes-stg
|
||||||
|
tags:
|
||||||
|
- osbs-post-install
|
||||||
|
vars_files:
|
||||||
|
- /srv/web/infra/ansible/vars/global.yml
|
||||||
|
- /srv/private/ansible/vars.yml
|
||||||
|
- /srv/private/ansible/files/openstack/passwords.yml
|
||||||
|
- /srv/web/infra/ansible/vars/{{ ansible_distribution }}.yml
|
||||||
|
vars:
|
||||||
|
osbs_kubeconfig_path: /etc/origin/master/admin.kubeconfig
|
||||||
|
osbs_environment:
|
||||||
|
KUBECONFIG: "{{ osbs_kubeconfig_path }}"
|
||||||
|
koji_pki_dir: /etc/pki/koji
|
||||||
|
koji_ca_cert_path: "{{koji_pki_dir}}/fedora-server-ca.cert"
|
||||||
|
koji_cert_path: "{{koji_pki_dir}}/fedora-builder.pem"
|
||||||
|
koji_builder_user: dockerbuilder
|
||||||
|
osbs_builder_user: builder
|
||||||
|
|
||||||
|
|
||||||
|
handlers:
|
||||||
|
- name: buildroot container
|
||||||
|
shell: 'docker rmi buildroot; docker build --no-cache --rm -t buildroot /etc/osbs/buildroot/'
|
||||||
|
|
||||||
|
- name: restart docker
|
||||||
|
service:
|
||||||
|
name: docker
|
||||||
|
state: restarted
|
||||||
|
|
||||||
|
- name: systemctl daemon-reload
|
||||||
|
shell: 'systemctl daemon-reload'
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- {
|
||||||
|
role: osbs-client,
|
||||||
|
general: {
|
||||||
|
verbose: 0,
|
||||||
|
build_json_dir: '/etc/osbs/input/',
|
||||||
|
openshift_required_version: 1.1.0,
|
||||||
|
},
|
||||||
|
default: {
|
||||||
|
username: "{{ osbs_koji_stg_username }}",
|
||||||
|
password: "{{ osbs_koji_stg_password }}",
|
||||||
|
koji_use_kerberos: True,
|
||||||
|
koji_kerberos_keytab: "FILE:/etc/krb5.osbs_{{osbs_url}}.keytab",
|
||||||
|
koji_kerberos_principal: "osbs/{{osbs_url}}@{{ipa_realm}}",
|
||||||
|
openshift_url: 'https://{{osbs_url}}/',
|
||||||
|
registry_uri: 'https://{{candidate_registry}}/v2',
|
||||||
|
source_registry_uri: 'https://{{stable_registry}}/v2',
|
||||||
|
build_host: '{{osbs_url}}',
|
||||||
|
koji_root: '{{osbs_koji_root}}',
|
||||||
|
koji_hub: '{{osbs_koji_hub}}',
|
||||||
|
sources_command: 'fedpkg sources',
|
||||||
|
build_type: 'prod',
|
||||||
|
authoritative_registry: '{{stable_registry}}',
|
||||||
|
vendor: 'Fedora Project',
|
||||||
|
verify_ssl: true,
|
||||||
|
use_auth: true,
|
||||||
|
builder_use_auth: true,
|
||||||
|
distribution_scope: 'private',
|
||||||
|
registry_api_versions: 'v2',
|
||||||
|
builder_openshift_url: 'https://{{osbs_url}}'
|
||||||
|
},
|
||||||
|
when: env == "staging"
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: copy docker iptables script
|
||||||
|
copy:
|
||||||
|
src: "{{files}}/osbs/fix-docker-iptables.{{ env }}"
|
||||||
|
dest: /usr/local/bin/fix-docker-iptables
|
||||||
|
mode: 0755
|
||||||
|
notify:
|
||||||
|
- restart docker
|
||||||
|
|
||||||
|
- name: copy docker service config
|
||||||
|
copy:
|
||||||
|
src: "{{files}}/osbs/docker.service"
|
||||||
|
dest: /etc/systemd/system/docker.service
|
||||||
|
notify:
|
||||||
|
- systemctl daemon-reload
|
||||||
|
- restart docker
|
||||||
|
|
||||||
|
- name: set nrpe read access for osbs.conf for nagios monitoring
|
||||||
|
acl: name={{ osbs_client_conf_path }} entity=nrpe etype=user permissions=r state=present
|
||||||
|
|
||||||
|
- name: Create buildroot container conf directory
|
||||||
|
file:
|
||||||
|
path: "/etc/osbs/buildroot/"
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
- name: Upload Dockerfile for buildroot container
|
||||||
|
template:
|
||||||
|
src: "{{ files }}/osbs/buildroot-Dockerfile-{{env}}.j2"
|
||||||
|
dest: "/etc/osbs/buildroot/Dockerfile"
|
||||||
|
mode: 0400
|
||||||
|
notify:
|
||||||
|
- buildroot container
|
||||||
|
|
||||||
|
- name: Upload internal CA for buildroot
|
||||||
|
copy:
|
||||||
|
src: "{{private}}/files/osbs/{{env}}/osbs-internal.pem"
|
||||||
|
dest: "/etc/osbs/buildroot/ca.crt"
|
||||||
|
mode: 0400
|
||||||
|
notify:
|
||||||
|
- buildroot container
|
||||||
|
|
||||||
|
- name: stat infra repofile
|
||||||
|
stat:
|
||||||
|
path: "/etc/yum.repos.d/infra-tags.repo"
|
||||||
|
register: infra_repo_stat
|
||||||
|
|
||||||
|
- name: stat /etc/osbs/buildroot/ infra repofile
|
||||||
|
stat:
|
||||||
|
path: "/etc/osbs/buildroot/infra-tags.repo"
|
||||||
|
register: etcosbs_infra_repo_stat
|
||||||
|
|
||||||
|
- name: remove old /etc/osbs/buildroot/ infra repofile
|
||||||
|
file:
|
||||||
|
path: "/etc/osbs/buildroot/infra-tags.repo"
|
||||||
|
state: absent
|
||||||
|
when: etcosbs_infra_repo_stat.stat.exists and infra_repo_stat.stat.checksum != etcosbs_infra_repo_stat.stat.checksum
|
||||||
|
|
||||||
|
- name: Copy repofile for buildroot container (because Docker)
|
||||||
|
copy:
|
||||||
|
src: "/etc/yum.repos.d/infra-tags.repo"
|
||||||
|
dest: "/etc/osbs/buildroot/infra-tags.repo"
|
||||||
|
remote_src: true
|
||||||
|
notify:
|
||||||
|
- buildroot container
|
||||||
|
when: etcosbs_infra_repo_stat.stat.exists == false
|
||||||
|
|
||||||
|
- name: stat /etc/ keytab
|
||||||
|
stat:
|
||||||
|
path: "/etc/krb5.osbs_{{osbs_url}}.keytab"
|
||||||
|
register: etc_kt_stat
|
||||||
|
|
||||||
|
- name: stat /etc/osbs/buildroot/ keytab
|
||||||
|
stat:
|
||||||
|
path: "/etc/osbs/buildroot/krb5.osbs_{{osbs_url}}.keytab"
|
||||||
|
register: etcosbs_kt_stat
|
||||||
|
|
||||||
|
- name: remove old hardlink to /etc/osbs/buildroot/ keytab
|
||||||
|
file:
|
||||||
|
path: "/etc/osbs/buildroot/krb5.osbs_{{osbs_url}}.keytab"
|
||||||
|
state: absent
|
||||||
|
when: etcosbs_kt_stat.stat.exists and etc_kt_stat.stat.checksum != etcosbs_kt_stat.stat.checksum
|
||||||
|
|
||||||
|
- name: Hardlink keytab for buildroot container (because Docker)
|
||||||
|
file:
|
||||||
|
src: "/etc/krb5.osbs_{{osbs_url}}.keytab"
|
||||||
|
dest: "/etc/osbs/buildroot/krb5.osbs_{{osbs_url}}.keytab"
|
||||||
|
state: hard
|
||||||
|
notify:
|
||||||
|
- buildroot container
|
||||||
|
when: etcosbs_kt_stat.stat.exists == false
|
||||||
|
|
||||||
|
- name: pull openshift required docker images
|
||||||
|
shell: "docker pull {{candidate_registry}}/{{item}}:v{{origin_release}}"
|
||||||
|
with_items: "{{openshift_required_images}}"
|
||||||
|
register: docker_pull_openshift
|
||||||
|
changed_when: "'Downloaded newer image' in docker_pull_openshift.stdout"
|
||||||
|
|
||||||
|
- name: tag openshift required docker images locally
|
||||||
|
shell: "docker tag {{candidate_registry}}/{{item}}:v{{origin_release}} {{item}}:v{{origin_release}}"
|
||||||
|
with_items: "{{openshift_required_images}}"
|
||||||
|
when: docker_pull_openshift|changed
|
||||||
|
|
||||||
|
- set_fact:
|
||||||
|
docker_pull_openshift: "{{ docker_pull_openshift }}"
|
||||||
|
|
||||||
|
|
||||||
|
- name: Post-Install image stream refresh
|
||||||
|
hosts: osbs-masters-stg[0]
|
||||||
|
tags:
|
||||||
|
- osbs-post-install
|
||||||
|
vars_files:
|
||||||
|
- /srv/web/infra/ansible/vars/global.yml
|
||||||
|
- /srv/private/ansible/vars.yml
|
||||||
|
- /srv/private/ansible/files/openstack/passwords.yml
|
||||||
|
- /srv/web/infra/ansible/vars/{{ ansible_distribution }}.yml
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: refresh fedora image streams
|
||||||
|
shell: "oc import-image fedora --all"
|
||||||
|
when: env == "staging" and hostvars[groups["osbs-masters-stg"][0]]["docker_pull_fedora"]|changed
|
||||||
|
|
||||||
|
- name: enable nrpe for monitoring (noc01)
|
||||||
|
iptables: action=insert chain=INPUT destination_port=5666 protocol=tcp source=10.5.126.41 state=present jump=ACCEPT
|
||||||
|
|
||||||
|
# - name: enable nrpe for monitoring (noc01.stg)
|
||||||
|
# iptables: action=insert chain=INPUT destination_port=5666 protocol=tcp source=1#0.5.126.2 state=present jump=ACCEPT
|
|
@ -457,8 +457,13 @@ openshift_master_default_subdomain={{openshift_app_subdomain}}
|
||||||
# See: https://docs.openshift.com/enterprise/latest/install_config/cluster_metrics.html
|
# See: https://docs.openshift.com/enterprise/latest/install_config/cluster_metrics.html
|
||||||
#
|
#
|
||||||
# By default metrics are not automatically deployed, set this to enable them
|
# By default metrics are not automatically deployed, set this to enable them
|
||||||
# openshift_hosted_metrics_deploy=true
|
|
||||||
#
|
#
|
||||||
|
# openshift_hosted_metrics_deploy=true
|
||||||
|
{% if openshift_metrics_deploy is defined %}
|
||||||
|
{% if openshift_metrics_deploy %}
|
||||||
|
#
|
||||||
|
openshift_hosted_metrics_deploy=true
|
||||||
|
|
||||||
# Storage Options
|
# Storage Options
|
||||||
# If openshift_hosted_metrics_storage_kind is unset then metrics will be stored
|
# If openshift_hosted_metrics_storage_kind is unset then metrics will be stored
|
||||||
# in an EmptyDir volume and will be deleted when the cassandra pod terminates.
|
# in an EmptyDir volume and will be deleted when the cassandra pod terminates.
|
||||||
|
@ -499,7 +504,9 @@ openshift_master_default_subdomain={{openshift_app_subdomain}}
|
||||||
# Defaults to https://hawkular-metrics.openshift_master_default_subdomain/hawkular/metrics
|
# Defaults to https://hawkular-metrics.openshift_master_default_subdomain/hawkular/metrics
|
||||||
# Currently, you may only alter the hostname portion of the url, alterting the
|
# Currently, you may only alter the hostname portion of the url, alterting the
|
||||||
# `/hawkular/metrics` path will break installation of metrics.
|
# `/hawkular/metrics` path will break installation of metrics.
|
||||||
#openshift_hosted_metrics_public_url=https://hawkular-metrics.example.com/hawkular/metrics
|
#openshift_hosted_metrics_public_url=https://hawkular-metrics.{{osbs_cluster_url}}/hawkular/metrics
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
# Logging deployment
|
# Logging deployment
|
||||||
#
|
#
|
||||||
|
|
34
roles/openshift-prerequisites/README.md
Normal file
34
roles/openshift-prerequisites/README.md
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
OpenShift prerequisites Role
|
||||||
|
============================
|
||||||
|
|
||||||
|
An Ansible role to manage prerequisites for OSE installation.
|
||||||
|
It performs the following operations:
|
||||||
|
|
||||||
|
* Sets necessary sebools for GlusterFS and NFS.
|
||||||
|
https://docs.openshift.com/container-platform/3.3/install_config/install/prerequisites.html#prereq-selinux
|
||||||
|
* Installs python-six package
|
||||||
|
https://github.com/openshift/openshift-ansible/issues/3020
|
||||||
|
|
||||||
|
|
||||||
|
Role Variables Example
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
# Set up sebools
|
||||||
|
openshift_sebools:
|
||||||
|
- name: virt_sandbox_use_fusefs
|
||||||
|
state: yes
|
||||||
|
persistent: yes
|
||||||
|
|
||||||
|
|
||||||
|
Example Playbook
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- hosts: all
|
||||||
|
roles:
|
||||||
|
- openshift-prerequisites
|
||||||
|
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
------------
|
||||||
|
|
||||||
|
None.
|
14
roles/openshift-prerequisites/defaults/main.yml
Normal file
14
roles/openshift-prerequisites/defaults/main.yml
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
---
|
||||||
|
# SELinux booleans
|
||||||
|
openshift_sebools:
|
||||||
|
# https://docs.openshift.com/container-platform/3.3/install_config/persistent_storage/persistent_storage_glusterfs.html#selinux
|
||||||
|
- name: virt_sandbox_use_fusefs
|
||||||
|
state: yes
|
||||||
|
persistent: yes
|
||||||
|
# https://docs.openshift.com/container-platform/3.3/install_config/persistent_storage/persistent_storage_nfs.html#nfs-selinux
|
||||||
|
- name: virt_use_nfs
|
||||||
|
state: yes
|
||||||
|
persistent: yes
|
||||||
|
- name: virt_sandbox_use_nfs
|
||||||
|
state: yes
|
||||||
|
persistent: yes
|
13
roles/openshift-prerequisites/meta/main.yml
Normal file
13
roles/openshift-prerequisites/meta/main.yml
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
# Standards: 1.6
|
||||||
|
---
|
||||||
|
galaxy_info:
|
||||||
|
author: Andrej Golis
|
||||||
|
description: Set up prerequisites for OSE installation
|
||||||
|
company: Red Hat, Inc.
|
||||||
|
license: BSD
|
||||||
|
min_ansible_version: 2.1
|
||||||
|
platforms:
|
||||||
|
- name: EL
|
||||||
|
versions:
|
||||||
|
- 7
|
||||||
|
dependencies: []
|
23
roles/openshift-prerequisites/tasks/main.yml
Normal file
23
roles/openshift-prerequisites/tasks/main.yml
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
---
|
||||||
|
- name: Install python-six package
|
||||||
|
package:
|
||||||
|
name: python-six
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Install libselinux-python package
|
||||||
|
package:
|
||||||
|
name: libselinux-python
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Configure SELinux
|
||||||
|
selinux:
|
||||||
|
state: enforcing
|
||||||
|
policy: targeted
|
||||||
|
|
||||||
|
- name: enable/disable sebools
|
||||||
|
seboolean:
|
||||||
|
name: "{{ item.name }}"
|
||||||
|
state: "{{ item.state }}"
|
||||||
|
persistent: "{{ item.persistent }}"
|
||||||
|
with_items: "{{ openshift_sebools }}"
|
||||||
|
when: openshift_sebools != ""
|
138
roles/osbs-namespace/README.md
Normal file
138
roles/osbs-namespace/README.md
Normal file
|
@ -0,0 +1,138 @@
|
||||||
|
Role Name
|
||||||
|
=========
|
||||||
|
|
||||||
|
Setup an OpenShift namespace as required by OSBS:
|
||||||
|
- Create namespace, also referred to as project (`osbs_namespace`)
|
||||||
|
- Create service accounts (`osbs_service_accounts`)
|
||||||
|
|
||||||
|
If user is cluster admin (`osbs_is_admin`), the following is also performed:
|
||||||
|
- Create policy binding
|
||||||
|
- Create osbs-custom-build role to allow custom builds
|
||||||
|
- Sets up rolebindings for specified users, groups and service accounts
|
||||||
|
|
||||||
|
For orchestrator namespaces (`osbs_orchestrator`):
|
||||||
|
- reactor-config-secret is generated and stored in `osbs_generated_config_path`
|
||||||
|
use osbs-secret to import it
|
||||||
|
- client-config-secret is generated and stored in `osbs_generated_config_path`
|
||||||
|
use osbs-secret to import it
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
------------
|
||||||
|
|
||||||
|
A running instance of OpenShift.
|
||||||
|
|
||||||
|
Role Variables
|
||||||
|
--------------
|
||||||
|
|
||||||
|
# Namespace name to be used
|
||||||
|
osbs_namespace: 'my-namespace'
|
||||||
|
# Is user running playbook as cluster admin?
|
||||||
|
osbs_is_admin: true
|
||||||
|
# Will the namespace be used for orchestrator builds?
|
||||||
|
osbs_orchestrator: true
|
||||||
|
|
||||||
|
# Worker clusters to be used for generating reactor and client config secrets
|
||||||
|
# in orchestrator workspace
|
||||||
|
osbs_worker_clusters:
|
||||||
|
x86_64:
|
||||||
|
- name: prod-x86_64-on-prem
|
||||||
|
max_concurrent_builds: 6
|
||||||
|
openshift_url: https://my-x86_64-on-premise-cluster.redhat.com:8443
|
||||||
|
- name: prod-x86_64-osd
|
||||||
|
max_concurrent_builds: 16
|
||||||
|
openshift_url: https://my-x86_64-osd-cluster.redhat.com:8443
|
||||||
|
# optional params, and their defaults:
|
||||||
|
enabled: true # yaml boolean
|
||||||
|
namespace: worker
|
||||||
|
use_auth: 'true' # yaml string
|
||||||
|
verify_ssl: 'true' # yaml string
|
||||||
|
|
||||||
|
ppc64le:
|
||||||
|
- name: prod-ppc64le-on-prem
|
||||||
|
max_concurrent_builds: 6
|
||||||
|
openshift_url: https://my-ppc64le-on-premise-cluster.redhat.com:8443
|
||||||
|
|
||||||
|
# Service accounts to be created - these accounts will also be bound to
|
||||||
|
# edit clusterrole and osbs-custom-build role in specified namespace
|
||||||
|
osbs_service_accounts:
|
||||||
|
- bot
|
||||||
|
- ci
|
||||||
|
|
||||||
|
# User and groups to be assigned view clusterrole in specified namespace
|
||||||
|
osbs_readonly_groups:
|
||||||
|
- group1
|
||||||
|
- group2
|
||||||
|
osbs_readonly_users:
|
||||||
|
- user1
|
||||||
|
- user2
|
||||||
|
|
||||||
|
# Users and groups to be assigned edit clusterrole and osbs-custom-build
|
||||||
|
# role in specified namespace
|
||||||
|
osbs_readwrite_groups:
|
||||||
|
- group1
|
||||||
|
- group2
|
||||||
|
osbs_readwrite_users:
|
||||||
|
- user1
|
||||||
|
- user2
|
||||||
|
|
||||||
|
# Users and groups to be assigned admin clusterrole and osbs-custom-build
|
||||||
|
# role in specified namespace
|
||||||
|
osbs_admin_groups:
|
||||||
|
- group1
|
||||||
|
- group2
|
||||||
|
osbs_admin_users:
|
||||||
|
- user1
|
||||||
|
- user2
|
||||||
|
|
||||||
|
# Koji integration
|
||||||
|
osbs_koji_secret_name: kojisecret
|
||||||
|
osbs_koji_hub: https://koji-hub.redhat.com # Empty default value
|
||||||
|
osbs_koji_root: https://koji-root.redhat.com # Empty default value
|
||||||
|
|
||||||
|
# Pulp integration
|
||||||
|
osbs_pulp_secret_name: pulpsecret
|
||||||
|
osbs_pulp_registry_name: brew-qa # Empty default value
|
||||||
|
|
||||||
|
# Distribution registry integration
|
||||||
|
osbs_registry_secret_name: v2-registry-dockercfg
|
||||||
|
osbs_registry_api_version:
|
||||||
|
- v1
|
||||||
|
- v2
|
||||||
|
osbs_registry_uri: https://distribution-registry.redhat.com/v2 # Empty default value
|
||||||
|
|
||||||
|
# Dist-git integration
|
||||||
|
osbs_sources_command: rhpkg sources
|
||||||
|
osbs_source_registry_uri: https://source-registry.redhat.com # Empty default value
|
||||||
|
|
||||||
|
For a full list, see defaults/main.yml
|
||||||
|
|
||||||
|
Dependencies
|
||||||
|
------------
|
||||||
|
|
||||||
|
None.
|
||||||
|
|
||||||
|
Example Playbook
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- name: setup worker namespace
|
||||||
|
hosts: master
|
||||||
|
roles:
|
||||||
|
- role: osbs-namespace
|
||||||
|
osbs_namespace: worker
|
||||||
|
|
||||||
|
- name: setup orchestrator namespace
|
||||||
|
hosts: master
|
||||||
|
roles:
|
||||||
|
- role: osbs-namespace
|
||||||
|
osbs_namespace: orchestrator
|
||||||
|
osbs_orchestrator: true
|
||||||
|
|
||||||
|
License
|
||||||
|
-------
|
||||||
|
|
||||||
|
BSD
|
||||||
|
|
||||||
|
Author Information
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Luiz Carvalho <lui@redhat.com>
|
41
roles/osbs-namespace/defaults/main.yml
Normal file
41
roles/osbs-namespace/defaults/main.yml
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
---
|
||||||
|
osbs_openshift_home: /var/lib/origin
|
||||||
|
osbs_kubeconfig_path: /etc/origin/master/admin.kubeconfig
|
||||||
|
osbs_generated_config_path: /tmp
|
||||||
|
|
||||||
|
osbs_environment:
|
||||||
|
KUBECONFIG: "{{ osbs_kubeconfig_path }}"
|
||||||
|
|
||||||
|
osbs_is_admin: true
|
||||||
|
|
||||||
|
osbs_service_accounts: []
|
||||||
|
|
||||||
|
osbs_cpu_limitrange: ''
|
||||||
|
|
||||||
|
osbs_admin_groups: []
|
||||||
|
osbs_admin_users: []
|
||||||
|
osbs_readonly_groups: []
|
||||||
|
osbs_readonly_users: []
|
||||||
|
osbs_readwrite_groups: []
|
||||||
|
osbs_readwrite_users: []
|
||||||
|
|
||||||
|
osbs_orchestrator: false
|
||||||
|
osbs_worker_clusters: {}
|
||||||
|
|
||||||
|
osbs_koji_secret_name: kojisecret
|
||||||
|
osbs_distribution_scope: public
|
||||||
|
osbs_authoritative_registry: registry.access.redhat.com
|
||||||
|
osbs_koji_hub: ''
|
||||||
|
osbs_koji_root: ''
|
||||||
|
osbs_pulp_registry_name: ''
|
||||||
|
osbs_pulp_secret_name: pulpsecret
|
||||||
|
osbs_registry_api_versions:
|
||||||
|
- v1
|
||||||
|
- v2
|
||||||
|
osbs_registry_secret_name: v2-registry-dockercfg
|
||||||
|
osbs_registry_uri: ''
|
||||||
|
osbs_source_registry_uri: ''
|
||||||
|
osbs_build_json_dir: /usr/share/osbs
|
||||||
|
osbs_sources_command: rhpkg sources
|
||||||
|
osbs_vendor: Red Hat, Inc.
|
||||||
|
osbs_nodeselector: ''
|
12
roles/osbs-namespace/meta/main.yml
Normal file
12
roles/osbs-namespace/meta/main.yml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
# Standards: 1.8
|
||||||
|
galaxy_info:
|
||||||
|
author: Luiz Carvalho
|
||||||
|
description: setup OpenShift namespace for OSBS usage
|
||||||
|
company: Red Hat, Inc.
|
||||||
|
license: BSD
|
||||||
|
min_ansible_version: 2.1
|
||||||
|
platforms:
|
||||||
|
name: EL
|
||||||
|
versions:
|
||||||
|
- 7
|
||||||
|
dependencies: []
|
192
roles/osbs-namespace/tasks/main.yml
Normal file
192
roles/osbs-namespace/tasks/main.yml
Normal file
|
@ -0,0 +1,192 @@
|
||||||
|
---
|
||||||
|
# Create namespace
|
||||||
|
- name: create osbs namespace
|
||||||
|
command: oc new-project {{ osbs_namespace }}
|
||||||
|
register: new_project
|
||||||
|
failed_when: new_project.rc != 0 and ('already exists' not in new_project.stderr)
|
||||||
|
changed_when: new_project.rc == 0
|
||||||
|
environment: "{{ osbs_environment }}"
|
||||||
|
tags:
|
||||||
|
- oc
|
||||||
|
|
||||||
|
# Setup service account
|
||||||
|
- name: copy service accounts
|
||||||
|
template:
|
||||||
|
src: openshift-serviceaccount.yml.j2
|
||||||
|
dest: "{{ osbs_openshift_home }}/{{ inventory_hostname }}-{{ osbs_namespace }}-serviceaccount-{{ item }}.yml"
|
||||||
|
with_items: "{{ osbs_service_accounts }}"
|
||||||
|
register: yaml_sa
|
||||||
|
tags:
|
||||||
|
- oc
|
||||||
|
|
||||||
|
- name: import service accounts
|
||||||
|
command: >
|
||||||
|
oc create
|
||||||
|
--namespace={{ osbs_namespace }}
|
||||||
|
--filename={{ osbs_openshift_home }}/{{ inventory_hostname }}-{{ osbs_namespace }}-serviceaccount-{{ item.item }}.yml
|
||||||
|
register: service_account_import
|
||||||
|
failed_when: service_account_import.rc != 0 and ('already exists' not in service_account_import.stderr)
|
||||||
|
environment: "{{ osbs_environment }}"
|
||||||
|
with_items: "{{ yaml_sa.results | default([]) }}"
|
||||||
|
when: item.changed
|
||||||
|
tags:
|
||||||
|
- oc
|
||||||
|
|
||||||
|
# Setup policy binding
|
||||||
|
- name: query policybinding
|
||||||
|
command: oc get policybinding {{ osbs_namespace }}:default --namespace {{ osbs_namespace }}
|
||||||
|
environment: "{{ osbs_environment }}"
|
||||||
|
register: policybinding_query
|
||||||
|
failed_when: policybinding_query.rc != 0 and ('not found' not in policybinding_query.stderr)
|
||||||
|
changed_when: false
|
||||||
|
when: osbs_is_admin
|
||||||
|
tags:
|
||||||
|
- oc
|
||||||
|
|
||||||
|
- name: create a policybinding
|
||||||
|
command: oc create policybinding {{ osbs_namespace }} --namespace {{ osbs_namespace }}
|
||||||
|
environment: "{{ osbs_environment }}"
|
||||||
|
when: "osbs_is_admin and 'not found' in policybinding_query.stderr"
|
||||||
|
tags:
|
||||||
|
- oc
|
||||||
|
|
||||||
|
# Setup role
|
||||||
|
- name: copy role
|
||||||
|
template:
|
||||||
|
src: role-osbs-custom-build.yml.j2
|
||||||
|
dest: "{{ osbs_openshift_home }}/{{ inventory_hostname }}-{{ osbs_namespace }}-role-osbs-custom-build.yml"
|
||||||
|
environment: "{{ osbs_environment }}"
|
||||||
|
register: yaml_role
|
||||||
|
when: osbs_is_admin
|
||||||
|
tags:
|
||||||
|
- oc
|
||||||
|
|
||||||
|
- name: import role
|
||||||
|
command: >
|
||||||
|
oc replace
|
||||||
|
--namespace={{ osbs_namespace }}
|
||||||
|
--force=true
|
||||||
|
--filename={{ osbs_openshift_home }}/{{ inventory_hostname }}-{{ osbs_namespace }}-role-osbs-custom-build.yml
|
||||||
|
environment: "{{ osbs_environment }}"
|
||||||
|
when: yaml_role.changed
|
||||||
|
tags:
|
||||||
|
- oc
|
||||||
|
|
||||||
|
# Setup role bindings
|
||||||
|
- name: copy role bindings
|
||||||
|
template:
|
||||||
|
src: "openshift-rolebinding.{{ item.yaml_version | default('v2') }}.yml.j2"
|
||||||
|
dest: "{{ osbs_openshift_home }}/{{ inventory_hostname }}-{{ osbs_namespace }}-rolebinding-{{ item.name }}.yml"
|
||||||
|
with_items:
|
||||||
|
|
||||||
|
- name: osbs-readonly
|
||||||
|
role: view
|
||||||
|
yaml_version: v1
|
||||||
|
users: "{{ osbs_readonly_users }}"
|
||||||
|
groups: "{{ osbs_readonly_groups }}"
|
||||||
|
|
||||||
|
- name: osbs-readwrite
|
||||||
|
role: edit
|
||||||
|
yaml_version: v1
|
||||||
|
users: "{{ osbs_readwrite_users }}"
|
||||||
|
groups: "{{ osbs_readwrite_groups }}"
|
||||||
|
|
||||||
|
- name: osbs-admin
|
||||||
|
role: admin
|
||||||
|
yaml_version: v1
|
||||||
|
users: "{{ osbs_admin_users }}"
|
||||||
|
groups: "{{ osbs_admin_groups }}"
|
||||||
|
|
||||||
|
- name: osbs-custom-build-readwrite
|
||||||
|
role: osbs-custom-build
|
||||||
|
yaml_version: v1
|
||||||
|
role_namespace: "{{ osbs_namespace }}"
|
||||||
|
users: "{{ osbs_readwrite_users }}"
|
||||||
|
groups: "{{ osbs_readwrite_groups }}"
|
||||||
|
|
||||||
|
- name: osbs-custom-build-admin
|
||||||
|
role: osbs-custom-build
|
||||||
|
yaml_version: v1
|
||||||
|
role_namespace: "{{ osbs_namespace }}"
|
||||||
|
users: "{{ osbs_admin_users }}"
|
||||||
|
groups: "{{ osbs_admin_groups }}"
|
||||||
|
|
||||||
|
- name: osbs-readwrite-serviceaccounts
|
||||||
|
role: edit
|
||||||
|
serviceaccounts: "{{ osbs_service_accounts }}"
|
||||||
|
|
||||||
|
- name: osbs-custom-build-serviceaccounts
|
||||||
|
role: osbs-custom-build
|
||||||
|
role_namespace: "{{ osbs_namespace }}"
|
||||||
|
serviceaccounts: "{{ osbs_service_accounts }}"
|
||||||
|
|
||||||
|
register: yaml_rolebindings
|
||||||
|
when: osbs_is_admin
|
||||||
|
tags:
|
||||||
|
- oc
|
||||||
|
|
||||||
|
- name: import the role bindings
|
||||||
|
command: >
|
||||||
|
oc replace
|
||||||
|
--namespace={{ osbs_namespace }}
|
||||||
|
--force=true
|
||||||
|
--filename={{ osbs_openshift_home }}/{{ inventory_hostname }}-{{ osbs_namespace }}-rolebinding-{{ item.item.name }}.yml
|
||||||
|
environment: "{{ osbs_environment }}"
|
||||||
|
with_items: "{{ yaml_rolebindings.results }}"
|
||||||
|
when: item.changed
|
||||||
|
tags:
|
||||||
|
- oc
|
||||||
|
|
||||||
|
- name: copy cpu limitrange
|
||||||
|
template:
|
||||||
|
src: openshift-limitrange.yml.j2
|
||||||
|
dest: "{{ osbs_openshift_home }}/{{ inventory_hostname }}-{{ osbs_namespace }}-limitrange.yml"
|
||||||
|
when: osbs_cpu_limitrange and osbs_is_admin
|
||||||
|
register: yaml_limitrange
|
||||||
|
tags:
|
||||||
|
- oc
|
||||||
|
|
||||||
|
- name: import cpu limitrange
|
||||||
|
command: >
|
||||||
|
oc replace
|
||||||
|
--namespace={{ osbs_namespace }}
|
||||||
|
--force=true
|
||||||
|
--filename={{ osbs_openshift_home }}/{{ inventory_hostname }}-{{ osbs_namespace }}-limitrange.yml
|
||||||
|
environment: "{{ osbs_environment }}"
|
||||||
|
when: yaml_limitrange.changed
|
||||||
|
tags:
|
||||||
|
- oc
|
||||||
|
|
||||||
|
- name: delete cpu limitrange
|
||||||
|
command: >
|
||||||
|
oc delete
|
||||||
|
--namespace={{ osbs_namespace }}
|
||||||
|
--ignore-not-found=true
|
||||||
|
limitrange cpureq
|
||||||
|
environment: "{{ osbs_environment }}"
|
||||||
|
when: not osbs_cpu_limitrange and osbs_is_admin
|
||||||
|
tags:
|
||||||
|
- oc
|
||||||
|
|
||||||
|
- name: get nodeselector value
|
||||||
|
command: >
|
||||||
|
oc get namespace {{ osbs_namespace }} -o go-template
|
||||||
|
--template={% raw %}'{{index .metadata.annotations "openshift.io/node-selector"}}'{% endraw %}
|
||||||
|
environment: "{{ osbs_environment }}"
|
||||||
|
register: node_selector_value
|
||||||
|
when: osbs_nodeselector != ''
|
||||||
|
changed_when: false
|
||||||
|
tags:
|
||||||
|
- oc
|
||||||
|
|
||||||
|
- name: set default node selector
|
||||||
|
command: >
|
||||||
|
oc patch namespace {{ osbs_namespace }}
|
||||||
|
-p '{"metadata":{"annotations":{"openshift.io/node-selector": "{{ osbs_nodeselector }}"}}}'
|
||||||
|
environment: "{{ osbs_environment }}"
|
||||||
|
when: osbs_nodeselector != '' and osbs_nodeselector != node_selector_value.stdout
|
||||||
|
tags:
|
||||||
|
- oc
|
||||||
|
|
||||||
|
- include: orchestrator.yml
|
||||||
|
when: osbs_orchestrator
|
18
roles/osbs-namespace/tasks/orchestrator.yml
Normal file
18
roles/osbs-namespace/tasks/orchestrator.yml
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
---
|
||||||
|
- name: generate reactor config secret
|
||||||
|
local_action: >
|
||||||
|
template
|
||||||
|
src=reactor-config-secret.yml.j2
|
||||||
|
dest="{{ osbs_generated_config_path }}/{{ osbs_namespace }}-reactor-config-secret.yml"
|
||||||
|
register: yaml_reactor_config_secret
|
||||||
|
tags:
|
||||||
|
- oc
|
||||||
|
|
||||||
|
- name: generate client config secret
|
||||||
|
local_action: >
|
||||||
|
template
|
||||||
|
src=client-config-secret.conf.j2
|
||||||
|
dest="{{ osbs_generated_config_path }}/{{ osbs_namespace }}-client-config-secret.conf"
|
||||||
|
register: yaml_client_config_secret
|
||||||
|
tags:
|
||||||
|
- oc
|
53
roles/osbs-namespace/templates/client-config-secret.conf.j2
Normal file
53
roles/osbs-namespace/templates/client-config-secret.conf.j2
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
[general]
|
||||||
|
build_json_dir = {{ osbs_build_json_dir }}
|
||||||
|
|
||||||
|
{% for platform, clusters in osbs_worker_clusters.iteritems() %}
|
||||||
|
{% for cluster in clusters | default([]) %}
|
||||||
|
[{{ cluster.name }}]
|
||||||
|
namespace = {{ cluster.namespace | default('worker') }}
|
||||||
|
openshift_url = {{ cluster.openshift_url }}
|
||||||
|
token_file = /var/run/secrets/atomic-reactor/{{ cluster.name | replace('_', '-') }}-orchestrator/token
|
||||||
|
use_auth = {{ cluster.use_auth | default('true') }}
|
||||||
|
verify_ssl = {{ cluster.verify_ssl | default('true') }}
|
||||||
|
low_priority_node_selector = {{ cluster.low_priority_node_selector | default('') }}
|
||||||
|
|
||||||
|
authoritative_registry = {{ osbs_authoritative_registry }}
|
||||||
|
distribution_scope = {{ osbs_distribution_scope }}
|
||||||
|
|
||||||
|
# Koji integration
|
||||||
|
{% if osbs_koji_secret_name %}
|
||||||
|
koji_certs_secret = {{ osbs_koji_secret_name }}
|
||||||
|
{% endif %}
|
||||||
|
{% if osbs_koji_hub %}
|
||||||
|
koji_hub = {{ osbs_koji_hub }}
|
||||||
|
{% endif %}
|
||||||
|
{% if osbs_koji_root %}
|
||||||
|
koji_root = {{ osbs_koji_root }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
# Pulp integration
|
||||||
|
{% if osbs_pulp_registry_name %}
|
||||||
|
pulp_registry_name = {{ osbs_pulp_registry_name }}
|
||||||
|
{% endif %}
|
||||||
|
{% if osbs_pulp_secret_name %}
|
||||||
|
pulp_secret = {{ osbs_pulp_secret_name }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
# Distribution registry integration
|
||||||
|
{% if osbs_registry_api_versions %}
|
||||||
|
registry_api_versions = {{ osbs_registry_api_versions | join(',') }}
|
||||||
|
{% endif %}
|
||||||
|
{% if osbs_registry_secret_name %}
|
||||||
|
registry_secret = {{ osbs_registry_secret_name }}
|
||||||
|
{% endif %}
|
||||||
|
{% if osbs_registry_uri %}
|
||||||
|
registry_uri = {{ osbs_registry_uri }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if osbs_source_registry_uri %}
|
||||||
|
source_registry_uri = {{ osbs_source_registry_uri }}
|
||||||
|
{% endif %}
|
||||||
|
sources_command = {{ osbs_sources_command }}
|
||||||
|
vendor = {{ osbs_vendor }}
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
10
roles/osbs-namespace/templates/openshift-limitrange.yml.j2
Normal file
10
roles/osbs-namespace/templates/openshift-limitrange.yml.j2
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: LimitRange
|
||||||
|
metadata:
|
||||||
|
name: cpureq
|
||||||
|
namespace: {{ osbs_namespace }}
|
||||||
|
spec:
|
||||||
|
limits:
|
||||||
|
- type: Container
|
||||||
|
defaultRequest:
|
||||||
|
cpu: {{ osbs_cpu_limitrange }}
|
|
@ -0,0 +1,19 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: RoleBinding
|
||||||
|
metadata:
|
||||||
|
name: {{ item.name }}
|
||||||
|
namespace: {{ osbs_namespace }}
|
||||||
|
|
||||||
|
roleRef:
|
||||||
|
name: {{ item.role }}
|
||||||
|
namespace: {{ item.role_namespace | default() }}
|
||||||
|
|
||||||
|
userNames:
|
||||||
|
{% for u in item.users | default([]) %}
|
||||||
|
- {{ u }}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
groupNames:
|
||||||
|
{% for g in item.groups | default([]) %}
|
||||||
|
- {{ g }}
|
||||||
|
{% endfor %}
|
|
@ -0,0 +1,29 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: RoleBinding
|
||||||
|
metadata:
|
||||||
|
name: {{ item.name }}
|
||||||
|
namespace: {{ osbs_namespace }}
|
||||||
|
|
||||||
|
roleRef:
|
||||||
|
name: {{ item.role }}
|
||||||
|
namespace: {{ item.role_namespace | default() }}
|
||||||
|
|
||||||
|
subjects:
|
||||||
|
|
||||||
|
{% for sa in item.serviceaccounts | default([]) %}
|
||||||
|
- kind: 'ServiceAccount'
|
||||||
|
namespace: {{ osbs_namespace }}
|
||||||
|
name: {{ sa }}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% for u in item.users | default([]) %}
|
||||||
|
- kind: 'User'
|
||||||
|
namespace: {{ osbs_namespace }}
|
||||||
|
name: {{ u }}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% for g in item.groups | default([]) %}
|
||||||
|
- kind: 'Group'
|
||||||
|
namespace: {{ osbs_namespace }}
|
||||||
|
name: {{ g }}
|
||||||
|
{% endfor %}
|
|
@ -0,0 +1,5 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ServiceAccount
|
||||||
|
metadata:
|
||||||
|
name: {{ item }}
|
||||||
|
namespace: {{ osbs_namespace }}
|
13
roles/osbs-namespace/templates/reactor-config-secret.yml.j2
Normal file
13
roles/osbs-namespace/templates/reactor-config-secret.yml.j2
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
---
|
||||||
|
version: 1
|
||||||
|
clusters:
|
||||||
|
|
||||||
|
{% for platform, clusters in osbs_worker_clusters.iteritems() %}
|
||||||
|
{{ platform }}:
|
||||||
|
{% for cluster in clusters | default([]) %}
|
||||||
|
- name: {{ cluster.name }}
|
||||||
|
max_concurrent_builds: {{ cluster.max_concurrent_builds }}
|
||||||
|
enabled: {{ cluster.enabled | default(true) }}
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
|
{% endfor %}
|
10
roles/osbs-namespace/templates/role-osbs-custom-build.yml.j2
Normal file
10
roles/osbs-namespace/templates/role-osbs-custom-build.yml.j2
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Role
|
||||||
|
metadata:
|
||||||
|
name: osbs-custom-build
|
||||||
|
namespace: {{ osbs_namespace }}
|
||||||
|
rules:
|
||||||
|
- verbs:
|
||||||
|
- create
|
||||||
|
resources:
|
||||||
|
- builds/custom
|
|
@ -0,0 +1,36 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ClusterRole
|
||||||
|
metadata:
|
||||||
|
name: dedicated-project-admin
|
||||||
|
rules:
|
||||||
|
- apiGroups:
|
||||||
|
- ""
|
||||||
|
attributeRestrictions: null
|
||||||
|
resources:
|
||||||
|
- limitranges
|
||||||
|
- resourcequotas
|
||||||
|
verbs:
|
||||||
|
- create
|
||||||
|
- delete
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- patch
|
||||||
|
- update
|
||||||
|
- watch
|
||||||
|
- apiGroups:
|
||||||
|
- extensions
|
||||||
|
attributeRestrictions: null
|
||||||
|
resources:
|
||||||
|
- daemonsets
|
||||||
|
verbs:
|
||||||
|
- create
|
||||||
|
- delete
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- patch
|
||||||
|
- update
|
||||||
|
- watch
|
||||||
|
- resources:
|
||||||
|
- builds/custom
|
||||||
|
verbs:
|
||||||
|
- create
|
|
@ -0,0 +1,49 @@
|
||||||
|
[general]
|
||||||
|
build_json_dir = /usr/share/osbs
|
||||||
|
|
||||||
|
[minimum]
|
||||||
|
namespace = worker
|
||||||
|
openshift_url = https://minimum-worker.test.redhat.com
|
||||||
|
token_file = /var/run/secrets/atomic-reactor/minimum-orchestrator/token
|
||||||
|
use_auth = true
|
||||||
|
verify_ssl = false
|
||||||
|
artifacts_allowed_domains =
|
||||||
|
|
||||||
|
authoritative_registry = registry.access.redhat.com
|
||||||
|
distribution_scope = public
|
||||||
|
|
||||||
|
# Koji integration
|
||||||
|
koji_certs_secret = kojisecret
|
||||||
|
|
||||||
|
# Pulp integration
|
||||||
|
pulp_secret = pulpsecret
|
||||||
|
|
||||||
|
# Distribution registry integration
|
||||||
|
registry_api_versions = v1,v2
|
||||||
|
registry_secret = v2-registry-dockercfg
|
||||||
|
|
||||||
|
sources_command = rhpkg sources
|
||||||
|
vendor = Red Hat, Inc.
|
||||||
|
[all_values]
|
||||||
|
namespace = spam
|
||||||
|
openshift_url = https://all_values-worker.test.redhat.com
|
||||||
|
token_file = /var/run/secrets/atomic-reactor/all-values-orchestrator/token
|
||||||
|
use_auth = false
|
||||||
|
verify_ssl = false
|
||||||
|
artifacts_allowed_domains = allowed.domain.com,also-allowed.domain.com
|
||||||
|
|
||||||
|
authoritative_registry = registry.access.redhat.com
|
||||||
|
distribution_scope = public
|
||||||
|
|
||||||
|
# Koji integration
|
||||||
|
koji_certs_secret = kojisecret
|
||||||
|
|
||||||
|
# Pulp integration
|
||||||
|
pulp_secret = pulpsecret
|
||||||
|
|
||||||
|
# Distribution registry integration
|
||||||
|
registry_api_versions = v1,v2
|
||||||
|
registry_secret = v2-registry-dockercfg
|
||||||
|
|
||||||
|
sources_command = rhpkg sources
|
||||||
|
vendor = Red Hat, Inc.
|
17
roles/osbs-namespace/tests/group_vars/masters.yml
Normal file
17
roles/osbs-namespace/tests/group_vars/masters.yml
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
|
||||||
|
osbs_worker_clusters:
|
||||||
|
x86_64:
|
||||||
|
- name: 'minimum'
|
||||||
|
max_concurrent_builds: 1
|
||||||
|
openshift_url: 'https://minimum-worker.test.redhat.com'
|
||||||
|
verify_ssl: 'false'
|
||||||
|
|
||||||
|
- name: 'all_values'
|
||||||
|
namespace: 'spam'
|
||||||
|
max_concurrent_builds: 99
|
||||||
|
openshift_url: 'https://all_values-worker.test.redhat.com'
|
||||||
|
verify_ssl: 'false'
|
||||||
|
use_auth: 'false'
|
||||||
|
artifacts_allowed_domains:
|
||||||
|
- allowed.domain.com
|
||||||
|
- also-allowed.domain.com
|
2
roles/osbs-namespace/tests/test-inventory
Normal file
2
roles/osbs-namespace/tests/test-inventory
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[masters]
|
||||||
|
test-host ansible_connection=local ansible_become=false
|
313
roles/osbs-namespace/tests/test.yml
Normal file
313
roles/osbs-namespace/tests/test.yml
Normal file
|
@ -0,0 +1,313 @@
|
||||||
|
# Standards: 1.8
|
||||||
|
---
|
||||||
|
# Run playbook
|
||||||
|
# ansible-playbook -i test-inventory test.yml
|
||||||
|
# During active development, you can re-use the same
|
||||||
|
# environment setup:
|
||||||
|
# ansible-playbook -i test-inventory test.yml --skip-tags 'environment-setup'
|
||||||
|
- name: setup environment
|
||||||
|
hosts: masters
|
||||||
|
tasks:
|
||||||
|
- name: cleanup existing cluster
|
||||||
|
command: >
|
||||||
|
oc cluster down
|
||||||
|
register: cmd_cluster_down
|
||||||
|
changed_when: cmd_cluster_down.rc == 0
|
||||||
|
|
||||||
|
- name: bring up new cluster
|
||||||
|
command: >
|
||||||
|
oc cluster up
|
||||||
|
--version v3.4.1.10
|
||||||
|
--image registry.access.redhat.com/openshift3/ose
|
||||||
|
register: cmd_cluster_up
|
||||||
|
changed_when: cmd_cluster_up.rc == 0
|
||||||
|
|
||||||
|
- name: login as admin
|
||||||
|
command: >
|
||||||
|
oc login -u system:admin
|
||||||
|
register: cmd_login_admin
|
||||||
|
changed_when: cmd_login_admin.rc == 0
|
||||||
|
|
||||||
|
- name: cleanup tmp folder
|
||||||
|
file:
|
||||||
|
path: tmp
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: setup tmp folder
|
||||||
|
file:
|
||||||
|
path: tmp
|
||||||
|
state: directory
|
||||||
|
|
||||||
|
tags:
|
||||||
|
- environment-setup
|
||||||
|
|
||||||
|
- name: setup worker namespace
|
||||||
|
hosts: masters
|
||||||
|
roles:
|
||||||
|
- role: "{{ playbook_dir }}/../."
|
||||||
|
osbs_kubeconfig_path: "{{ lookup('env','HOME') }}/.kube/config"
|
||||||
|
osbs_openshift_home: tmp
|
||||||
|
osbs_namespace: test-worker
|
||||||
|
osbs_nodeselector: "worker=true"
|
||||||
|
osbs_service_accounts:
|
||||||
|
- orchestrator
|
||||||
|
|
||||||
|
- name: test worker namespace
|
||||||
|
hosts: masters
|
||||||
|
tasks:
|
||||||
|
- name: namespace worker created
|
||||||
|
command: >
|
||||||
|
oc get project test-worker
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: orchestrator service account created in worker namespace
|
||||||
|
command: >
|
||||||
|
oc -n test-worker get serviceaccount orchestrator
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: policy binding created
|
||||||
|
command: >
|
||||||
|
oc -n test-worker get policybinding ':default'
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: custom builds roles created
|
||||||
|
command: >
|
||||||
|
oc -n test-worker get role osbs-custom-build
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: expected rolebindings created in worker namespace
|
||||||
|
command: >
|
||||||
|
oc -n test-worker get rolebinding {{ item }}
|
||||||
|
with_items:
|
||||||
|
- osbs-admin
|
||||||
|
- osbs-admin
|
||||||
|
- osbs-custom-build-admin
|
||||||
|
- osbs-custom-build-readwrite
|
||||||
|
- osbs-custom-build-serviceaccounts
|
||||||
|
- osbs-readonly
|
||||||
|
- osbs-readwrite
|
||||||
|
- osbs-readwrite-serviceaccounts
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: nodeselector exists
|
||||||
|
shell: >
|
||||||
|
oc get namespace test-worker -o json |grep 'node-selector'
|
||||||
|
register: node_selector_exists
|
||||||
|
failed_when: "'node-selector' not in node_selector_exists.stdout"
|
||||||
|
|
||||||
|
- name: setup orchestrator namespace
|
||||||
|
hosts: masters
|
||||||
|
tags:
|
||||||
|
orchestrator
|
||||||
|
roles:
|
||||||
|
- role: "{{ playbook_dir }}/../."
|
||||||
|
osbs_kubeconfig_path: "{{ lookup('env','HOME') }}/.kube/config"
|
||||||
|
osbs_openshift_home: tmp
|
||||||
|
osbs_generated_config_path: tmp
|
||||||
|
osbs_namespace: test-orchestrator
|
||||||
|
osbs_orchestrator: true
|
||||||
|
|
||||||
|
- name: test orchestrator namespace
|
||||||
|
hosts: masters
|
||||||
|
tags:
|
||||||
|
orchestrator
|
||||||
|
tasks:
|
||||||
|
- name: reactor config secret generated
|
||||||
|
stat:
|
||||||
|
path: tmp/test-orchestrator-reactor-config-secret.yml
|
||||||
|
register: stat_reactor_config_secret
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: fail if reactor config secret was generated
|
||||||
|
fail:
|
||||||
|
msg: Reactor config secret file not created!
|
||||||
|
when: not stat_reactor_config_secret.stat.exists
|
||||||
|
|
||||||
|
- name: client-config-secret was generated properly
|
||||||
|
command: >
|
||||||
|
diff {{ playbook_dir }}/files/expected-client-config-secret.conf
|
||||||
|
{{ playbook_dir }}/tmp/test-orchestrator-client-config-secret.conf
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
|
||||||
|
- name: setup namespace as non admin
|
||||||
|
hosts: masters
|
||||||
|
pre_tasks:
|
||||||
|
- name: Login with non cluster admin account
|
||||||
|
command: >
|
||||||
|
oc login -u non-admin -p non-admin
|
||||||
|
register: cmd_login_non_admin
|
||||||
|
changed_when: cmd_login_non_admin.rc == 0
|
||||||
|
roles:
|
||||||
|
- role: "{{ playbook_dir }}/../."
|
||||||
|
osbs_kubeconfig_path: "{{ lookup('env','HOME') }}/.kube/config"
|
||||||
|
osbs_openshift_home: tmp
|
||||||
|
osbs_namespace: test-non-admin
|
||||||
|
osbs_is_admin: false
|
||||||
|
osbs_service_accounts:
|
||||||
|
- orchestrator
|
||||||
|
post_tasks:
|
||||||
|
- name: Log back in with cluster admin account
|
||||||
|
command: >
|
||||||
|
oc login -u system:admin
|
||||||
|
register: cmd_login_admin
|
||||||
|
changed_when: cmd_login_admin.rc == 0
|
||||||
|
|
||||||
|
- name: test non-admin namespace
|
||||||
|
hosts: masters
|
||||||
|
tasks:
|
||||||
|
- name: namespace non-admin created
|
||||||
|
command: >
|
||||||
|
oc get project test-non-admin
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: orchestrator service account created in non-admin namespace
|
||||||
|
command: >
|
||||||
|
oc -n test-non-admin get serviceaccount orchestrator
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: custom builds roles NOT created in non-admin namespace
|
||||||
|
command: >
|
||||||
|
oc -n test-non-admin get role osbs-custom-build
|
||||||
|
register: cmd_role
|
||||||
|
failed_when: "'No resources found' not in cmd_role.stderr"
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: custom rolebindings NOT created in non-admin namespace
|
||||||
|
command: >
|
||||||
|
oc -n test-non-admin get rolebinding {{ item }}
|
||||||
|
register: cmd_rolebinding
|
||||||
|
failed_when: "'No resources found' not in cmd_rolebinding.stderr"
|
||||||
|
with_items:
|
||||||
|
- osbs-admin
|
||||||
|
- osbs-admin
|
||||||
|
- osbs-custom-build-admin
|
||||||
|
- osbs-custom-build-readwrite
|
||||||
|
- osbs-custom-build-serviceaccounts
|
||||||
|
- osbs-readonly
|
||||||
|
- osbs-readwrite
|
||||||
|
- osbs-readwrite-serviceaccounts
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: create limitrange namespace
|
||||||
|
hosts: masters
|
||||||
|
roles:
|
||||||
|
- role: "{{ playbook_dir }}/../."
|
||||||
|
osbs_kubeconfig_path: "{{ lookup('env','HOME') }}/.kube/config"
|
||||||
|
osbs_openshift_home: tmp
|
||||||
|
osbs_namespace: test-limitrange
|
||||||
|
osbs_cpu_limitrange: '100m'
|
||||||
|
|
||||||
|
- name: test limitrange namespace
|
||||||
|
hosts: masters
|
||||||
|
tasks:
|
||||||
|
- name: namespace limitrange created
|
||||||
|
command: >
|
||||||
|
oc get project test-limitrange
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: limitrange created
|
||||||
|
command: >
|
||||||
|
oc -n test-limitrange get limitrange cpureq
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: update limitrange namespace
|
||||||
|
hosts: masters
|
||||||
|
roles:
|
||||||
|
- role: "{{ playbook_dir }}/../."
|
||||||
|
osbs_kubeconfig_path: "{{ lookup('env','HOME') }}/.kube/config"
|
||||||
|
osbs_openshift_home: tmp
|
||||||
|
osbs_namespace: test-limitrange
|
||||||
|
# No osbs_cpu_limitrage provided should trigger removal
|
||||||
|
|
||||||
|
- name: test updated limitrange namespace
|
||||||
|
hosts: masters
|
||||||
|
tasks:
|
||||||
|
- name: limitrange deleted
|
||||||
|
command: >
|
||||||
|
oc -n test-limitrange get limitrange cpureq
|
||||||
|
register: cmd_limitrange
|
||||||
|
failed_when: "'No resources found' not in cmd_limitrange.stderr"
|
||||||
|
changed_when: false
|
||||||
|
|
||||||
|
- name: setup policybinding dedicated-admin namespace
|
||||||
|
hosts: masters
|
||||||
|
pre_tasks:
|
||||||
|
- name: login as admin
|
||||||
|
command: >
|
||||||
|
oc login -u system:admin
|
||||||
|
register: cmd_login_admin
|
||||||
|
changed_when: cmd_login_admin.rc == 0
|
||||||
|
- name: Create dedicated-poject-admin clusterrole
|
||||||
|
command: >
|
||||||
|
oc create -f {{ playbook_dir }}/files/dedicated-project-admin.yaml
|
||||||
|
register: cmd_create_clusterrole
|
||||||
|
changed_when: cmd_create_clusterrole.rc == 0
|
||||||
|
- name: Create the namespace as cluster admin
|
||||||
|
command: >
|
||||||
|
oc new-project test-policybinding-dedicated-admin
|
||||||
|
register: cmd_pre_create_namespace
|
||||||
|
changed_when: cmd_pre_create_namespace.rc == 0
|
||||||
|
- name: Create dedicated-admin user
|
||||||
|
command: >
|
||||||
|
oc -n test-policybinding-dedicated-admin
|
||||||
|
create user dedicated-admin
|
||||||
|
register: cmd_create_user
|
||||||
|
changed_when: cmd_create_user.rc == 0
|
||||||
|
- name: Add dedicated-project-admin role to dedicated-admin
|
||||||
|
command: >
|
||||||
|
oc -n test-policybinding-dedicated-admin
|
||||||
|
policy add-role-to-user dedicated-project-admin dedicated-admin
|
||||||
|
register: cmd_role_dedicated_project_admin
|
||||||
|
changed_when: cmd_role_dedicated_project_admin.rc == 0
|
||||||
|
- name: Create policybinding as cluster admin
|
||||||
|
command: >
|
||||||
|
oc -n test-policybinding-dedicated-admin
|
||||||
|
create policybinding test-policybinding-dedicated-admin
|
||||||
|
register: cmd_pre_create_policybinding
|
||||||
|
changed_when: cmd_pre_create_policybinding.rc == 0
|
||||||
|
# This is only needed because the project was created
|
||||||
|
# by a different user: system:admin.
|
||||||
|
- name: Give dedicated-admin user project admin access
|
||||||
|
command: >
|
||||||
|
oc -n test-policybinding-dedicated-admin
|
||||||
|
adm policy add-role-to-user admin dedicated-admin
|
||||||
|
register: cmd_role_project_admin
|
||||||
|
changed_when: cmd_role_project_admin.rc == 0
|
||||||
|
- name: Login with non cluster admin account
|
||||||
|
command: >
|
||||||
|
oc login -u dedicated-admin -p dedicated-admin
|
||||||
|
register: cmd_login_dedicated_admin
|
||||||
|
changed_when: cmd_login_dedicated_admin.rc == 0
|
||||||
|
roles:
|
||||||
|
- role: "{{ playbook_dir }}/../."
|
||||||
|
osbs_kubeconfig_path: "{{ lookup('env','HOME') }}/.kube/config"
|
||||||
|
osbs_openshift_home: tmp
|
||||||
|
osbs_namespace: test-policybinding-dedicated-admin
|
||||||
|
osbs_is_admin: true
|
||||||
|
osbs_service_accounts:
|
||||||
|
- orchestrator
|
||||||
|
post_tasks:
|
||||||
|
- name: Log back in with cluster admin account
|
||||||
|
command: >
|
||||||
|
oc login -u system:admin
|
||||||
|
register: cmd_login_admin
|
||||||
|
changed_when: cmd_login_admin.rc == 0
|
||||||
|
|
||||||
|
- name: test policybinding dedicated-admin namespace
|
||||||
|
hosts: masters
|
||||||
|
tasks:
|
||||||
|
- name: custom rolebindings created in dedicated-admin namespace
|
||||||
|
command: >
|
||||||
|
oc -n test-policybinding-dedicated-admin get rolebinding {{ item }}
|
||||||
|
register: cmd_rolebinding
|
||||||
|
with_items:
|
||||||
|
- osbs-admin
|
||||||
|
- osbs-admin
|
||||||
|
- osbs-custom-build-admin
|
||||||
|
- osbs-custom-build-readwrite
|
||||||
|
- osbs-custom-build-serviceaccounts
|
||||||
|
- osbs-readonly
|
||||||
|
- osbs-readwrite
|
||||||
|
- osbs-readwrite-serviceaccounts
|
||||||
|
changed_when: false
|
70
roles/osbs-secret/README.md
Normal file
70
roles/osbs-secret/README.md
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
osbs-secret
|
||||||
|
===========
|
||||||
|
|
||||||
|
This role imports various secrets, such as Pulp or Koji certificates, from
|
||||||
|
filesystem into OpenShift. See the [OSBS
|
||||||
|
documentation](https://github.com/projectatomic/osbs-client/blob/master/docs/secret.md)
|
||||||
|
for more information.
|
||||||
|
|
||||||
|
This role is part of
|
||||||
|
[ansible-osbs](https://github.com/projectatomic/ansible-osbs/) playbook for
|
||||||
|
deploying OpenShift build service. Please refer to that github repository for
|
||||||
|
[documentation](https://github.com/projectatomic/ansible-osbs/blob/master/README.md)
|
||||||
|
and [issue tracker](https://github.com/projectatomic/ansible-osbs/issues).
|
||||||
|
|
||||||
|
Role Variables
|
||||||
|
--------------
|
||||||
|
|
||||||
|
The role imports the keys from the machine running ansible. You have to provide
|
||||||
|
`osbs_secret_files` list, which enumerates what files to import. Elements of
|
||||||
|
the list are dictionaries with two keys: `source` and `dest`. Source is the
|
||||||
|
location of the file on the machine where ansible is run. Dest is the filename
|
||||||
|
of the secret.
|
||||||
|
|
||||||
|
osbs_secret_files:
|
||||||
|
- source: /home/user/.pulp/pulp.cer
|
||||||
|
dest: pulp.cer
|
||||||
|
- source: /home/user/.pulp/pulp.key
|
||||||
|
dest: pulp.key
|
||||||
|
|
||||||
|
The name of the secret in OpenShift is defined by the `osbs_secret_name`
|
||||||
|
variable.
|
||||||
|
|
||||||
|
osbs_secret_name: pulpsecret
|
||||||
|
|
||||||
|
The secret has to be associated with a service account. This service account
|
||||||
|
can be set by the `osbs_secret_service_account` variable.
|
||||||
|
|
||||||
|
osbs_secret_service_account: builder
|
||||||
|
|
||||||
|
We need a kubeconfig file on the remote machine in order to talk to OpenShift.
|
||||||
|
Its location is contained in the `pulp_secret_kubeconfig`.
|
||||||
|
|
||||||
|
osbs_kubeconfig_path: /etc/origin/master/admin.kubeconfig
|
||||||
|
|
||||||
|
Example Playbook
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Following playbook imports the keys from my home directory on the machine where
|
||||||
|
ansible is executed. You may need to run something like this after the current
|
||||||
|
set of keys expires.
|
||||||
|
|
||||||
|
- hosts: builders
|
||||||
|
roles:
|
||||||
|
- role: osbs-secret
|
||||||
|
osbs_secret_name: pulpsecret
|
||||||
|
osbs_secret_files:
|
||||||
|
- source: /home/mmilata/.pulp/pulp.cer
|
||||||
|
dest: pulp.cer
|
||||||
|
- source: {{ pulp_secret_local_dir }}/pulp.key
|
||||||
|
dest: pulp.key
|
||||||
|
|
||||||
|
License
|
||||||
|
-------
|
||||||
|
|
||||||
|
BSD
|
||||||
|
|
||||||
|
Author Information
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Martin Milata <mmilata@redhat.com>
|
17
roles/osbs-secret/defaults/main.yml
Normal file
17
roles/osbs-secret/defaults/main.yml
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
---
|
||||||
|
osbs_secret_name: pulpsecret
|
||||||
|
osbs_secret_type: Opaque
|
||||||
|
osbs_secret_service_account: builder
|
||||||
|
osbs_secret_remote_dir: /var/lib/origin
|
||||||
|
osbs_secret_can_fail: false
|
||||||
|
|
||||||
|
osbs_secret_files:
|
||||||
|
- source: /home/user/.pulp/pulp.cer
|
||||||
|
dest: pulp.cer
|
||||||
|
- source: /home/user/.pulp/pulp.key
|
||||||
|
dest: pulp.key
|
||||||
|
|
||||||
|
osbs_namespace: default
|
||||||
|
osbs_kubeconfig_path: /etc/origin/master/admin.kubeconfig
|
||||||
|
osbs_environment:
|
||||||
|
KUBECONFIG: "{{ osbs_kubeconfig_path }}"
|
22
roles/osbs-secret/handlers/main.yml
Normal file
22
roles/osbs-secret/handlers/main.yml
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
---
|
||||||
|
- name: import osbs secret
|
||||||
|
command: >
|
||||||
|
oc replace
|
||||||
|
--namespace={{ osbs_namespace }}
|
||||||
|
--force=true
|
||||||
|
--filename={{ osbs_secret_remote_dir }}/openshift-secret-{{ inventory_hostname }}-{{ osbs_namespace }}-{{ osbs_secret_name }}.yml
|
||||||
|
environment: "{{ osbs_environment }}"
|
||||||
|
notify: allow service account
|
||||||
|
|
||||||
|
- name: allow service account
|
||||||
|
command: >
|
||||||
|
oc secrets
|
||||||
|
add serviceaccount/{{ osbs_secret_service_account }} secrets/{{ osbs_secret_name }}
|
||||||
|
--for=mount
|
||||||
|
--namespace={{ osbs_namespace }}
|
||||||
|
environment: "{{ osbs_environment }}"
|
||||||
|
|
||||||
|
- name: delete secret resource file
|
||||||
|
file:
|
||||||
|
path: "{{ osbs_secret_remote_dir }}/openshift-secret-{{ inventory_hostname }}-{{ osbs_namespace }}-{{ osbs_secret_name }}.yml"
|
||||||
|
state: absent
|
21
roles/osbs-secret/meta/main.yml
Normal file
21
roles/osbs-secret/meta/main.yml
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
---
|
||||||
|
galaxy_info:
|
||||||
|
author: Martin Milata
|
||||||
|
description: Import secrets from local filesystem into OpenShift.
|
||||||
|
company: Red Hat
|
||||||
|
issue_tracker_url: https://github.com/projectatomic/ansible-osbs/issues
|
||||||
|
license: BSD
|
||||||
|
min_ansible_version: 1.2
|
||||||
|
platforms:
|
||||||
|
- name: EL
|
||||||
|
versions:
|
||||||
|
- 7
|
||||||
|
- name: Fedora
|
||||||
|
versions:
|
||||||
|
- 21
|
||||||
|
- 22
|
||||||
|
categories:
|
||||||
|
- cloud
|
||||||
|
- development
|
||||||
|
- packaging
|
||||||
|
dependencies: []
|
40
roles/osbs-secret/tasks/main.yml
Normal file
40
roles/osbs-secret/tasks/main.yml
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
---
|
||||||
|
- set_fact:
|
||||||
|
osbs_secret_files_exist: true
|
||||||
|
tags:
|
||||||
|
- oc
|
||||||
|
|
||||||
|
- set_fact:
|
||||||
|
osbs_secret_files_exist: false
|
||||||
|
when: lookup('file', lookup('first_found', [item.source, '/dev/null'])) == ''
|
||||||
|
with_items: "{{ osbs_secret_files }}"
|
||||||
|
tags:
|
||||||
|
- oc
|
||||||
|
|
||||||
|
- fail:
|
||||||
|
msg: Some of the source secret files do not exist (and osbs_secret_can_fail is false)
|
||||||
|
when: not (osbs_secret_files_exist or osbs_secret_can_fail)
|
||||||
|
tags:
|
||||||
|
- oc
|
||||||
|
|
||||||
|
- debug:
|
||||||
|
msg: Some of the source secret files do not exist, skipping import
|
||||||
|
when: not osbs_secret_files_exist
|
||||||
|
tags:
|
||||||
|
- oc
|
||||||
|
|
||||||
|
- name: create secrets resource file
|
||||||
|
template:
|
||||||
|
src: openshift-secret.yml.j2
|
||||||
|
dest: "{{ osbs_secret_remote_dir }}/openshift-secret-{{ inventory_hostname }}-{{ osbs_namespace }}-{{ osbs_secret_name }}.yml"
|
||||||
|
mode: "0600"
|
||||||
|
when: osbs_secret_files_exist
|
||||||
|
notify:
|
||||||
|
- import osbs secret
|
||||||
|
- delete secret resource file
|
||||||
|
tags:
|
||||||
|
- oc
|
||||||
|
|
||||||
|
- meta: flush_handlers
|
||||||
|
tags:
|
||||||
|
- oc
|
10
roles/osbs-secret/templates/openshift-secret.yml.j2
Normal file
10
roles/osbs-secret/templates/openshift-secret.yml.j2
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: {{ osbs_secret_name }}
|
||||||
|
type: {{ osbs_secret_type }}
|
||||||
|
data:
|
||||||
|
{% for f in osbs_secret_files %}
|
||||||
|
{{ f.dest }}: {{ lookup('file', f.source) | b64encode }}
|
||||||
|
{% endfor %}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue