diff --git a/roles/nodepool-setup/defaults/main.yml b/roles/nodepool-setup/defaults/main.yml new file mode 100644 index 000000000..9cbb6ef48 --- /dev/null +++ b/roles/nodepool-setup/defaults/main.yml @@ -0,0 +1,3 @@ +nodepool_cirros_url: http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img +nodepool_cirros_dest: /opt/cache/files/cirros-0.3.5-x86_64-disk.img +nodepool_cirros_checksum: md5:f8ab98ff5e73ebab884d80c9dc9c7290 diff --git a/roles/nodepool-setup/tasks/clone-ci-repos.yml b/roles/nodepool-setup/tasks/clone-ci-repos.yml index cbe36e6be..8f4ee97be 100644 --- a/roles/nodepool-setup/tasks/clone-ci-repos.yml +++ b/roles/nodepool-setup/tasks/clone-ci-repos.yml @@ -2,64 +2,42 @@ - name: Create /opt/stack directory file: path: /opt/stack - owner: zuul - group: zuul + owner: "{{ ansible_user }}" + group: "{{ ansible_user }}" state: directory + become: true - name: Link /opt/stack/new to /opt/stack for backwards compat file: src: /opt/stack dest: /opt/stack/new - owner: zuul - group: zuul + owner: "{{ ansible_user }}" + group: "{{ ansible_user }}" state: link + become: true -- name: Ensure git is installed - package: - name: git - state: latest - -- name: Clone tripleo-quickstart +- name: Clone repos git: - repo: https://git.openstack.org/openstack/tripleo-quickstart - dest: /opt/stack/tripleo-quickstart - version: master - -- name: Clone tripleo-quickstart-extras - git: - repo: https://git.openstack.org/openstack/tripleo-quickstart-extras - dest: /opt/stack/tripleo-quickstart-extras - version: master - -- name: Clone tripleo-ci - git: - repo: https://git.openstack.org/openstack-infra/tripleo-ci - dest: /opt/stack/tripleo-ci - version: master - -- name: Clone devstack - git: - repo: https://git.openstack.org/openstack-dev/devstack - dest: /opt/stack/devstack - version: master - -- name: Clone devstack-gate - git: - repo: https://git.openstack.org/openstack-infra/devstack-gate - dest: /opt/stack/devstack-gate + repo: "{{ item }}" + dest: "/opt/stack/{{ item.split('/')[-1] }}" version: master + with_items: + - https://git.openstack.org/openstack/tripleo-quickstart + - https://git.openstack.org/openstack/tripleo-quickstart-extras + - https://git.openstack.org/openstack-infra/tripleo-ci + - https://git.openstack.org/openstack-dev/devstack + - https://git.openstack.org/openstack-infra/devstack-gate - name: Create /opt/cache/files directory file: path: /opt/cache/files + owner: "{{ ansible_user }}" + group: "{{ ansible_user }}" state: directory + become: true -- name: Make sure git repos are zuul owned - file: - path: /opt/stack - owner: zuul - group: zuul - recurse: yes - state: directory - - +- name: Download Cirros image + get_url: + url: "{{ nodepool_cirros_url }}" + dest: "{{ nodepool_cirros_dest }}" + checksum: "{{ nodepool_cirros_checksum }}" diff --git a/roles/nodepool-setup/tasks/etc-nodepool.yml b/roles/nodepool-setup/tasks/etc-nodepool.yml index 96208a0d2..9498a559b 100644 --- a/roles/nodepool-setup/tasks/etc-nodepool.yml +++ b/roles/nodepool-setup/tasks/etc-nodepool.yml @@ -3,8 +3,8 @@ file: path: /etc/nodepool state: directory - owner: zuul - group: zuul + owner: "{{ ansible_user }}" + group: "{{ ansible_user }}" mode: 0755 - name: Create /etc/nodepool/node_private @@ -12,8 +12,8 @@ create: yes state: present name: /etc/nodepool/node_private - owner: zuul - group: zuul + owner: "{{ ansible_user }}" + group: "{{ ansible_user }}" line: "{{ subnode_private_ip }}" - name: Create /etc/nodepool/primary_node_private @@ -21,8 +21,8 @@ create: yes state: present name: /etc/nodepool/primary_node_private - owner: zuul - group: zuul + owner: "{{ ansible_user }}" + group: "{{ ansible_user }}" line: "{{ hostvars['subnode-0'].subnode_private_ip }}" - name: Create /etc/nodepool/provider @@ -34,15 +34,27 @@ NODEPOOL_AZ= dest: /etc/nodepool/provider +# Required for single node jobs +- name: Create empty /etc/nodepool/sub_nodes + copy: + dest: /etc/nodepool/sub_nodes + content: '' + - name: Create /etc/nodepool/sub_nodes lineinfile: create: yes state: present name: /etc/nodepool/sub_nodes - line: "{{ hostvars[item].ansible_host }}" + line: "{{ hostvars[item].subnode_public_ip }}" with_inventory_hostnames: - subnodes:!subnode-0 +# Required for single node jobs +- name: Create empty /etc/nodepool/sub_nodes_private + copy: + dest: /etc/nodepool/sub_nodes_private + content: '' + - name: Create /etc/nodepool/sub_nodes_private lineinfile: create: yes @@ -53,17 +65,17 @@ - subnodes:!subnode-0 - name: Create /etc/nodepool/id_rsa - command: > - ssh-keygen -N "" -f /etc/nodepool/id_rsa + shell: > + ssh-keygen -N "" -f /etc/nodepool/id_rsa; + chmod 600 /etc/nodepool/id_rsa; args: creates: /etc/nodepool/id_rsa - name: Make sure /etc/nodepool/id_rsa is owned by zuul file: path: '/etc/nodepool/id_rsa{{ item }}' - owner: zuul - group: zuul + owner: "{{ ansible_user }}" + group: "{{ ansible_user }}" with_items: - '' - '.pub' - diff --git a/roles/nodepool-setup/tasks/main.yml b/roles/nodepool-setup/tasks/main.yml index c41d7306e..2403a87e5 100644 --- a/roles/nodepool-setup/tasks/main.yml +++ b/roles/nodepool-setup/tasks/main.yml @@ -6,6 +6,7 @@ file: path: /etc/ci state: directory + owner: "{{ ansible_user }}" become: true # NOTE: (trown) this is just a place holder, but I am not so sure we @@ -14,20 +15,28 @@ template: dest: /etc/ci/mirror_info.sh src: mirror_info.sh.j2 + +- name: Install repos (will be removed by toci_gatetest) + package: + name: "{{ item }}" + with_items: + - centos-release-openstack-ocata + - epel-release + become: true + +- name: Install packages + yum: + name: "{{ item }}" + state: latest + with_items: + - git + - unbound + - screen + - vim + - wget become: true - include: clone-ci-repos.yml - become: true - -- name: Install epel (will be removed by toci_gatetest) - package: - name: epel-release - become: true - -- name: Install openstack repos - package: - name: centos-release-openstack-ocata - become: true - name: Set primary public key on all hosts shell: cat /etc/nodepool/id_rsa.pub @@ -40,10 +49,52 @@ state: present line: "{{ hostvars['subnode-0'].primary_key.stdout }}" -- name: Download Cirros image - get_url: - url: http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img - dest: /opt/cache/files/cirros-0.3.5-x86_64-disk.img - checksum: md5:f8ab98ff5e73ebab884d80c9dc9c7290 +- name: Scan SSH keys from subnodes + shell: | + for key in {{ hostvars[item].subnode_public_ip }} {{ hostvars[item].subnode_private_ip }}; do + if ! grep -q $key /etc/ssh/ssh_known_hosts ; then + ssh-keyscan $key >> /etc/ssh/ssh_known_hosts + fi + done + with_inventory_hostnames: + - subnodes become: true +- name: start services + service: + name: unbound + state: started + enabled: yes + become: true + +- name: Set some env vars + lineinfile: + dest: /etc/environment + state: present + line: "{{ item }}" + with_items: + - "WORKSPACE=/tmp" + - "DEVSTACK_GATE_TIMEOUT=300" + - "REMAINING_TIME=180" # 3 hours for quickstart run + # In case of multinode + - "EXTRA_VARS=' --extra-vars vxlan_mtu=1400'" + become: true + +- name: Update packages + yum: + name: '*' + state: latest + become: true + +- name: Reboot hosts + shell: sleep 2 && shutdown -r now + async: 1 + poll: 0 + ignore_errors: true + become: true + +- name: Wait a little + pause: seconds=30 + +- name: Wait for provisioned hosts to become reachable + local_action: wait_for host="{{ hostvars[inventory_hostname].subnode_public_ip }}" port=22 delay=5 state=started connect_timeout=10 timeout=180