From be9604673a7463cdd33d82003bcd1060f4060090 Mon Sep 17 00:00:00 2001 From: clime Date: Mon, 1 Aug 2016 03:29:13 +0200 Subject: [PATCH] integrate OpenStack ppc64le builders into COPR --- .../provision/builderpb_nova_ppc64le.yml | 47 ++++++++++ .../files/mock/fedora-23-ppc64le.cfg | 73 +++++++++++++++ .../files/mock/fedora-24-ppc64le.cfg | 71 +++++++++++++++ .../files/mock/fedora-rawhide-ppc64le.cfg | 43 +++++++++ .../provision_builder_tasks_ppc64le.yml | 91 +++++++++++++++++++ roles/copr/backend/tasks/main.yml | 5 + roles/copr/backend/templates/copr-be.conf.j2 | 15 +-- .../provision/nova_cloud_vars_ppc64le.yml | 18 ++++ 8 files changed, 356 insertions(+), 7 deletions(-) create mode 100644 roles/copr/backend/files/provision/builderpb_nova_ppc64le.yml create mode 100644 roles/copr/backend/files/provision/files/mock/fedora-23-ppc64le.cfg create mode 100644 roles/copr/backend/files/provision/files/mock/fedora-24-ppc64le.cfg create mode 100644 roles/copr/backend/files/provision/files/mock/fedora-rawhide-ppc64le.cfg create mode 100644 roles/copr/backend/files/provision/provision_builder_tasks_ppc64le.yml create mode 100644 roles/copr/backend/templates/provision/nova_cloud_vars_ppc64le.yml diff --git a/roles/copr/backend/files/provision/builderpb_nova_ppc64le.yml b/roles/copr/backend/files/provision/builderpb_nova_ppc64le.yml new file mode 100644 index 0000000000..dc91142cf5 --- /dev/null +++ b/roles/copr/backend/files/provision/builderpb_nova_ppc64le.yml @@ -0,0 +1,47 @@ +- name: check/create instance + hosts: 127.0.0.1 + gather_facts: False + + vars_files: + - nova_cloud_vars_ppc64le.yml + + vars: + # _OS_AUTH_OPTS: "--os-auth-url {{OS_AUTH_URL}} --os-username {{OS_USERNAME}} --os-password {{OS_PASSWORD}} --os-tenant-name {{OS_TENANT_NAME}} --os-tenant-id {{OS_TENANT_ID}} " + + keypair: buildsys + max_spawn_time: 600 + spawning_vm_user: "fedora" + + tasks: + - name: generate builder name + local_action: set_fact vm_name="Copr_builder_{{ 999999999 | random }}" + + - debug: msg="vm_name={{ vm_name }}" + - include: "spinup_nova_task.yml" + + - debug: msg="VM_IP={{ builder_ip }}" + + - name: wait for he host to be hot + local_action: wait_for host={{ builder_ip }} port=22 delay=1 timeout=600 + + - name: wait until ssh is available + local_action: shell false; until [ "$?" -eq "0" ]; do sleep 2; ssh -o PasswordAuthentication=no {{ spawning_vm_user|default('fedora') }}@{{ builder_ip }} 'echo foobar' 2>/dev/null; done + async: 600 + poll: 2 + + +- name: provision builder + hosts: builder_temp_group + gather_facts: True + sudo: True + user: fedora + + vars: + # pass this options if you need to create new base image from snapshot + #prepare_base_image: True + + tasks: + - include: "provision_builder_tasks_ppc64le.yml" + + - name: disable offloading + command: ethtool -K eth0 tso off gro off gso off diff --git a/roles/copr/backend/files/provision/files/mock/fedora-23-ppc64le.cfg b/roles/copr/backend/files/provision/files/mock/fedora-23-ppc64le.cfg new file mode 100644 index 0000000000..2f073f1faf --- /dev/null +++ b/roles/copr/backend/files/provision/files/mock/fedora-23-ppc64le.cfg @@ -0,0 +1,73 @@ +config_opts['root'] = 'fedora-23-ppc64le' +config_opts['target_arch'] = 'ppc64le' +config_opts['legal_host_arches'] = ('ppc64le',) +config_opts['chroot_setup_cmd'] = 'install bash bzip2 coreutils cpio diffutils fedora-release findutils gawk gcc gcc-c++ grep gzip info make patch redhat-rpm-config rpm-build sed shadow-utils tar unzip util-linux which xz' +config_opts['dist'] = 'fc23' # only useful for --resultdir variable subst +config_opts['extra_chroot_dirs'] = [ '/run/lock', ] +config_opts['releasever'] = '23' +config_opts['package_manager'] = 'dnf' + +config_opts['yum.conf'] = """ +[main] +keepcache=1 +debuglevel=1 +reposdir=/dev/null +logfile=/var/log/yum.log +retries=20 +obsoletes=1 +gpgcheck=0 +assumeyes=1 +syslog_ident=mock +syslog_device= +install_weak_deps=0 +metadata_expire=0 +mdpolicy=group:primary + +# repos + +[fedora] +name=fedora +metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch +#baseurl=https://dl.fedoraproject.org/pub/fedora-secondary/releases/23/Everything/ppc64le/ +failovermethod=priority +gpgkey=file:///etc/pki/mock/RPM-GPG-KEY-fedora-23-secondary +gpgcheck=1 + +[updates] +name=updates +metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f$releasever&arch=$basearch +#baseurl=https://dl.fedoraproject.org/pub/fedora-secondary/updates/23/Everything/ppc64le/ +failovermethod=priority +gpgkey=file:///etc/pki/mock/RPM-GPG-KEY-fedora-23-secondary +gpgcheck=1 + +[updates-testing] +name=updates-testing +metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-testing-f$releasever&arch=$basearch +failovermethod=priority +enabled=0 + +[local] +name=local +baseurl=http://ppcpkgs.fedoraproject.org/repos/f23-build/latest/ppc64le/ +cost=2000 +enabled=0 + +[fedora-debuginfo] +name=fedora-debuginfo +metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-debug-$releasever&arch=$basearch +failovermethod=priority +enabled=0 + +[updates-debuginfo] +name=updates-debuginfo +metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-debug-f$releasever&arch=$basearch +failovermethod=priority +enabled=0 + +[updates-testing-debuginfo] +name=updates-testing-debuginfo +metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-testing-debug-f$releasever&arch=$basearch +failovermethod=priority +enabled=0 +""" diff --git a/roles/copr/backend/files/provision/files/mock/fedora-24-ppc64le.cfg b/roles/copr/backend/files/provision/files/mock/fedora-24-ppc64le.cfg new file mode 100644 index 0000000000..2d914619b2 --- /dev/null +++ b/roles/copr/backend/files/provision/files/mock/fedora-24-ppc64le.cfg @@ -0,0 +1,71 @@ +config_opts['root'] = 'fedora-24-ppc64le' +config_opts['target_arch'] = 'ppc64le' +config_opts['legal_host_arches'] = ('ppc64le',) +config_opts['chroot_setup_cmd'] = 'install bash bzip2 coreutils cpio diffutils fedora-release findutils gawk gcc gcc-c++ grep gzip info make patch redhat-rpm-config rpm-build sed shadow-utils tar unzip util-linux which xz' +config_opts['dist'] = 'fc24' # only useful for --resultdir variable subst +config_opts['extra_chroot_dirs'] = [ '/run/lock', ] +config_opts['releasever'] = '24' +config_opts['package_manager'] = 'dnf' + +config_opts['yum.conf'] = """ +[main] +keepcache=1 +debuglevel=1 +reposdir=/dev/null +logfile=/var/log/yum.log +retries=20 +obsoletes=1 +gpgcheck=0 +assumeyes=1 +syslog_ident=mock +syslog_device= +install_weak_deps=0 +metadata_expire=0 +mdpolicy=group:primary + +# repos + +[fedora] +name=fedora +metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch +failovermethod=priority +gpgkey=file:///etc/pki/mock/RPM-GPG-KEY-fedora-24-secondary +gpgcheck=1 + +[updates] +name=updates +metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f$releasever&arch=$basearch +failovermethod=priority +gpgkey=file:///etc/pki/mock/RPM-GPG-KEY-fedora-24-secondary +gpgcheck=1 + +[updates-testing] +name=updates-testing +metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-testing-f$releasever&arch=$basearch +failovermethod=priority +enabled=0 + +[local] +name=local +baseurl=http://ppcpkgs.fedoraproject.org/repos/f24-build/latest/ppc64le/ +cost=2000 +enabled=0 + +[fedora-debuginfo] +name=fedora-debuginfo +metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-debug-$releasever&arch=$basearch +failovermethod=priority +enabled=0 + +[updates-debuginfo] +name=updates-debuginfo +metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-debug-f$releasever&arch=$basearch +failovermethod=priority +enabled=0 + +[updates-testing-debuginfo] +name=updates-testing-debuginfo +metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-testing-debug-f$releasever&arch=$basearch +failovermethod=priority +enabled=0 +""" diff --git a/roles/copr/backend/files/provision/files/mock/fedora-rawhide-ppc64le.cfg b/roles/copr/backend/files/provision/files/mock/fedora-rawhide-ppc64le.cfg new file mode 100644 index 0000000000..3f8d038a18 --- /dev/null +++ b/roles/copr/backend/files/provision/files/mock/fedora-rawhide-ppc64le.cfg @@ -0,0 +1,43 @@ +config_opts['root'] = 'fedora-rawhide-ppc64le' +config_opts['target_arch'] = 'ppc64le' +config_opts['legal_host_arches'] = ('ppc64le',) +config_opts['chroot_setup_cmd'] = 'install bash bzip2 coreutils cpio diffutils fedora-release findutils gawk gcc gcc-c++ grep gzip info make patch redhat-rpm-config rpm-build sed shadow-utils tar unzip util-linux which xz' +config_opts['dist'] = 'rawhide' # only useful for --resultdir variable subst +config_opts['extra_chroot_dirs'] = [ '/run/lock', ] +config_opts['releasever'] = '25' +config_opts['package_manager'] = 'dnf' + +config_opts['yum.conf'] = """ +[main] +keepcache=1 +debuglevel=1 +reposdir=/dev/null +logfile=/var/log/yum.log +retries=20 +obsoletes=1 +gpgcheck=0 +assumeyes=1 +syslog_ident=mock +syslog_device= +install_weak_deps=0 +metadata_expire=0 + +# repos + +[fedora] +name=fedora +metalink=https://mirrors.fedoraproject.org/metalink?repo=rawhide&arch=$basearch +failovermethod=priority + +[local] +name=local +baseurl=http://ppcpkgs.fedoraproject.org/repos/rawhide/latest/ppc64le/ +cost=2000 +enabled=0 + +[debug] +name=Fedora Rawhide - ppc64le - Debug +failovermethod=priority +metalink=https://mirrors.fedoraproject.org/metalink?repo=rawhide-debug&arch=$basearch +enabled=0 +""" diff --git a/roles/copr/backend/files/provision/provision_builder_tasks_ppc64le.yml b/roles/copr/backend/files/provision/provision_builder_tasks_ppc64le.yml new file mode 100644 index 0000000000..dc710b5e03 --- /dev/null +++ b/roles/copr/backend/files/provision/provision_builder_tasks_ppc64le.yml @@ -0,0 +1,91 @@ +- name: install copr repo + copy: src="copr.repo" dest="/etc/yum.repos.d/copr.repo" + +- name: set bigger timeout for yum + ini_file: dest=/etc/yum.conf section=main option=timeout value=1000 + +- name: install pkgs + yum: state=present pkg={{ item }} + with_items: + - dnf + - dnf-plugins-core + - mock +# - mock-lvm + - createrepo_c + - yum-utils + - pyliblzma + - rsync + - openssh-clients + - rsync + - libselinux-python + - libsemanage-python + - yum + - scl-utils-build + - ethtool +# - fedpkg-copr + - nosync + +- name: set bigger timeout for dnf + ini_file: dest=/etc/dnf/dnf.conf section=main option=timeout value=1000 + +# this comes from https://copr-be.cloud.fedoraproject.org/results/%40copr/copr/fedora-23-x86_64/00179756-fedpkg-copr/fedpkg-copr-0.3-1.fc23.noarch.rpm +# TODO put it in correct place +# BZ 1241507 +- shell: yum-deprecated install -y fedpkg-copr || yum install -y fedpkg-copr + +# This needs to be updated for python-fedora +- shell: yum-deprecated update -y python-requests || yum install -y python-requests + +- name: make sure newest rpm + dnf: name={{ item }} state=latest + with_items: + - rpm + - glib2 + - ca-certificates + - mock + +- copy: src=files/fedpkg-copr.conf dest=/etc/rpkg/fedpkg-copr.conf + +- name: put updated mock configs into /etc/mock + template: src=files/mock/{{ item }} dest=/etc/mock + with_items: + - site-defaults.cfg + - fedora-23-ppc64le.cfg + - fedora-24-ppc64le.cfg + - fedora-rawhide-ppc64le.cfg + +# ansible doesn't support simultaneously usage of async and with_* options +# it's not even planned for implementation, see https://github.com/ansible/ansible/issues/5841 +- name: prepare cache + when: prepare_base_image is defined + async: 14400 + shell: "for i in fedora-23-ppc64le fedora-24-ppc64le fedora-rawhide-ppc64le; do mock --init -r $i; done" + +- name: mockbuilder user + user: name=mockbuilder groups=mock + +- name: mockbuilder .ssh + file: state=directory path=/home/mockbuilder/.ssh mode=0700 owner=mockbuilder group=mockbuilder + +- name: mockbuilder authorized_keys + authorized_key: user=mockbuilder key='{{ lookup('file', '/home/copr/provision/files/buildsys.pub') }}' + +- name: root authorized_keys + authorized_key: user=root key='{{ lookup('file', '/home/copr/provision/files/buildsys.pub') }}' + +- lineinfile: dest=/etc/security/limits.conf line="* soft nofile 10240" insertafter=EOF +- lineinfile: dest=/etc/security/limits.conf line="* hard nofile 10240" insertafter=EOF + +- name: disable core dumps + ini_file: dest=/etc/systemd/coredump.conf section=Coredump option=Storage value=none +# notify: +# - systemctl daemon-reload + +- name: 'Remove %_install_langs from /etc/rpm/macros.image-language-conf so that `yum-deprecated --installroot= install glibc-all-langpacks` installs all possible locale into build chroots' + lineinfile: + dest: '/etc/rpm/macros.image-language-conf' + regexp: '^%_install_lang.*' + state: 'absent' + +- name: we need to have older fedpkg till BZ 1315423 is resolved + shell: dnf install -y https://kojipkgs.fedoraproject.org//packages/fedpkg/1.20/2.fc23/noarch/fedpkg-1.20-2.fc23.noarch.rpm diff --git a/roles/copr/backend/tasks/main.yml b/roles/copr/backend/tasks/main.yml index ddef4b3c37..5fc1d4ef13 100644 --- a/roles/copr/backend/tasks/main.yml +++ b/roles/copr/backend/tasks/main.yml @@ -126,6 +126,11 @@ tags: - provision_config +- name: put some files into the provision subdir + template: src="provision/nova_cloud_vars_ppc64le.yml" dest="/home/copr/provision/nova_cloud_vars_ppc64le.yml" owner=copr group=copr + tags: + - provision_config + - name: put fedpkg-copr.conf into the provision files template: src="provision/fedpkg-copr.conf" dest="/home/copr/provision/files/fedpkg-copr.conf" owner=copr group=copr diff --git a/roles/copr/backend/templates/copr-be.conf.j2 b/roles/copr/backend/templates/copr-be.conf.j2 index ad9697d016..54c31e8977 100644 --- a/roles/copr/backend/templates/copr-be.conf.j2 +++ b/roles/copr/backend/templates/copr-be.conf.j2 @@ -29,9 +29,14 @@ frontend_auth={{ copr_backend_password }} # vm_max_check_fails=2 - when machine is consequently X times marked as failed then it is terminated # vm_terminating_timeout=600 - when machine was terminated and terminate PB did not finish within this number of second, we will run the PB once again. +build_groups=2 + group0_name=PC group0_archs=i386,x86_64,i586 +group1_name=PPC64LE +group1_archs=ppc64le + # new OS cloud, VMM based backend group0_spawn_playbook=/home/copr/provision/builderpb_nova.yml group0_terminate_playbook=/home/copr/provision/terminatepb_nova.yml @@ -41,24 +46,20 @@ group0_max_workers=16 group0_max_vm_per_user=4 group0_max_vm_total=12 {% else %} -build_groups=2 -group1_name=PPC64LE -group1_archs=ppc64le - group0_max_workers=40 group0_max_vm_per_user=24 group0_max_vm_total=35 group0_vm_spawn_min_interval=5 group0_max_spawn_processes=5 +{% endif %} -group1_spawn_playbook=/home/copr/provision/builderpb_ppc64le.yml -group1_terminate_playbook=/home/copr/provision/terminatepb_ppc64le.yml +group1_spawn_playbook=/home/copr/provision/builderpb_nova_ppc64le.yml +group1_terminate_playbook=/home/copr/provision/terminatepb_nova.yml group1_max_workers=5 group1_max_vm_per_user=1 group1_max_vm_total=4 group1_max_spawn_processes=2 -{% endif %} ## old OS cloud, non VMM backend #group0_spawn_playbook=/home/copr/provision/builderpb.yml diff --git a/roles/copr/backend/templates/provision/nova_cloud_vars_ppc64le.yml b/roles/copr/backend/templates/provision/nova_cloud_vars_ppc64le.yml new file mode 100644 index 0000000000..f7a7da1cfc --- /dev/null +++ b/roles/copr/backend/templates/provision/nova_cloud_vars_ppc64le.yml @@ -0,0 +1,18 @@ +--- +OS_AUTH_URL: "{{ copr_nova_auth_url }}" + +OS_TENANT_ID: "{{ copr_nova_tenant_id }}" +OS_TENANT_NAME: "{{ copr_nova_tenant_name }}" + +OS_USERNAME: "{{ copr_nova_username }}" + +# remove default values after transition to the new cloud is finished +OS_PASSWORD_OLD: "{{ copr_nova_password|default('variable OS_PASSWORD_OLD is undefined') }}" +OS_PASSWORD: "{{ copr_password|default('variable OS_PASSWORD is undefined')}}" + + +image_name: "builder-f24-ppc64le" +flavor_name: "{{ copr_builder_flavor_name }}" +network_name: "{{ copr_builder_network_name }}" +key_name: "{{ copr_builder_key_name }}" +security_groups: "{{ copr_builder_security_groups }}"