Add role to setup any centos vm to look like nodepool vm

This role will clone the needed CI repos and make sure the
/etc/nodepool files are in place in order to run the toci
scripts on a cloud provisioned CentOS guest.

Change-Id: I7b0b3f27ee012583c22eb1a4372e61cda7a429f1
This commit is contained in:
John Trowbridge 2017-11-02 15:16:16 +00:00 committed by Sagi Shnaidman
parent 2c0e26323e
commit edfbd87f25
5 changed files with 259 additions and 0 deletions

@ -0,0 +1,7 @@
# setup the nodepool nodes
- name: Setup the provisioned virtual machines to look like nodepool nodes
hosts: subnodes
gather_facts: yes
roles:
- nodepool-setup

@ -0,0 +1,65 @@
---
- name: Create /opt/stack directory
file:
path: /opt/stack
owner: zuul
group: zuul
state: directory
- name: Link /opt/stack/new to /opt/stack for backwards compat
file:
src: /opt/stack
dest: /opt/stack/new
owner: zuul
group: zuul
state: link
- name: Ensure git is installed
package:
name: git
state: latest
- name: Clone tripleo-quickstart
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
version: master
- name: Create /opt/cache/files directory
file:
path: /opt/cache/files
state: directory
- name: Make sure git repos are zuul owned
file:
path: /opt/stack
owner: zuul
group: zuul
recurse: yes
state: directory

@ -0,0 +1,69 @@
---
- name: Create /etc/nodepool directory
file:
path: /etc/nodepool
state: directory
owner: zuul
group: zuul
mode: 0755
- name: Create /etc/nodepool/node_private
lineinfile:
create: yes
state: present
name: /etc/nodepool/node_private
owner: zuul
group: zuul
line: "{{ subnode_private_ip }}"
- name: Create /etc/nodepool/primary_node_private
lineinfile:
create: yes
state: present
name: /etc/nodepool/primary_node_private
owner: zuul
group: zuul
line: "{{ hostvars['subnode-0'].subnode_private_ip }}"
- name: Create /etc/nodepool/provider
copy:
content: |
NODEPOOL_PROVIDER=rdo-cloud-tripleo
NODEPOOL_CLOUD=fake-cloud
NODEPOOL_REGION=FAKE
NODEPOOL_AZ=
dest: /etc/nodepool/provider
- name: Create /etc/nodepool/sub_nodes
lineinfile:
create: yes
state: present
name: /etc/nodepool/sub_nodes
line: "{{ hostvars[item].ansible_host }}"
with_inventory_hostnames:
- subnodes:!subnode-0
- name: Create /etc/nodepool/sub_nodes_private
lineinfile:
create: yes
state: present
name: /etc/nodepool/sub_nodes_private
line: "{{ hostvars[item].subnode_private_ip }}"
with_inventory_hostnames:
- subnodes:!subnode-0
- name: Create /etc/nodepool/id_rsa
command: >
ssh-keygen -N "" -f /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
with_items:
- ''
- '.pub'

@ -0,0 +1,49 @@
---
- include: etc-nodepool.yml
become: true
- name: Create /etc/ci directory
file:
path: /etc/ci
state: directory
become: true
# NOTE: (trown) this is just a place holder, but I am not so sure we
# need to create this file.
- name: Create /etc/ci/mirror_info.sh
template:
dest: /etc/ci/mirror_info.sh
src: mirror_info.sh.j2
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
register: primary_key
when: inventory_hostname == "subnode-0"
- name: Add primary key
lineinfile:
dest: ~/.ssh/authorized_keys
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
become: true

@ -0,0 +1,69 @@
#!/bin/bash -xe
# Ansible managed
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
export NODEPOOL_MIRROR_HOST=mirror.ord.rax.openstack.org
# This script generates a descriptor slug to use with AFS, composed of the
# operating system, its version, and the processor architecture.
# Pull in the os release.
# ID is 'fedora', 'centos', 'ubuntu'
# VERSION_ID is '23', '7', '14.04'
# Nothing else is useful and/or reliable across distros
. /etc/os-release
################################################################################
# Generate an OS Release Name
OS_TYPE=$ID
################################################################################
# Generate a version string.
OS_VERSION=$VERSION_ID
if [ "$OS_TYPE" != "ubuntu" ]; then
OS_VERSION=$(echo $OS_VERSION | cut -d'.' -f1)
fi
################################################################################
# Get the processor architecture.
# x86_64, i386, armv7l, armv6l
OS_ARCH=$(uname -m)
################################################################################
# Build the name
AFS_SLUG="$OS_TYPE-$OS_VERSION-$OS_ARCH"
AFS_SLUG=$(echo "$AFS_SLUG" | tr '[:upper:]' '[:lower:]')
export AFS_SLUG
export NODEPOOL_DEBIAN_MIRROR=${NODEPOOL_DEBIAN_MIRROR:-http://$NODEPOOL_MIRROR_HOST/debian}
export NODEPOOL_PYPI_MIRROR=${NODEPOOL_PYPI_MIRROR:-http://$NODEPOOL_MIRROR_HOST/pypi/simple}
export NODEPOOL_WHEEL_MIRROR=${NODEPOOL_WHEEL_MIRROR:-http://$NODEPOOL_MIRROR_HOST/wheel/$AFS_SLUG}
export NODEPOOL_UBUNTU_MIRROR=${NODEPOOL_UBUNTU_MIRROR:-http://$NODEPOOL_MIRROR_HOST/ubuntu}
export NODEPOOL_CENTOS_MIRROR=${NODEPOOL_CENTOS_MIRROR:-http://$NODEPOOL_MIRROR_HOST/centos}
export NODEPOOL_DEBIAN_OPENSTACK_MIRROR=${NODEPOOL_DEBIAN_OPENSTACK_MIRROR:-http://$NODEPOOL_MIRROR_HOST/debian-openstack}
export NODEPOOL_EPEL_MIRROR=${NODEPOOL_EPEL_MIRROR:-http://$NODEPOOL_MIRROR_HOST/epel}
export NODEPOOL_FEDORA_MIRROR=${NODEPOOL_FEDORA_MIRROR:-http://$NODEPOOL_MIRROR_HOST/fedora}
export NODEPOOL_OPENSUSE_MIRROR=${NODEPOOL_OPENSUSE_MIRROR:-http://$NODEPOOL_MIRROR_HOST/opensuse}
export NODEPOOL_CEPH_MIRROR=${NODEPOOL_CEPH_MIRROR:-http://$NODEPOOL_MIRROR_HOST/ceph-deb-hammer}
export NODEPOOL_UCA_MIRROR=${NODEPOOL_UCA_MIRROR:-http://$NODEPOOL_MIRROR_HOST/ubuntu-cloud-archive}
export NODEPOOL_MARIADB_MIRROR=${NODEPOOL_MARIADB_MIRROR:-http://$NODEPOOL_MIRROR_HOST/ubuntu-mariadb}
# Reverse proxy servers
export NODEPOOL_BUILDLOGS_CENTOS_PROXY=${NODEPOOL_BUILDLOGS_CENTOS_PROXY:-http://$NODEPOOL_MIRROR_HOST:8080/buildlogs.centos}
export NODEPOOL_DOCKER_REGISTRY_PROXY=${NODEPOOL_DOCKER_REGISTRY_PROXY:-http://$NODEPOOL_MIRROR_HOST:8081/registry-1.docker/}
export NODEPOOL_RDO_PROXY=${NODEPOOL_RDO_PROXY:-http://$NODEPOOL_MIRROR_HOST:8080/rdo}
export NODEPOOL_RUGYGEMS_PROXY=${NODEPOOL_RUBYGEMS_PROXY:-http://$NODEPOOL_MIRROR_HOST:8080/rubygems/}
export NODEPOOL_NPM_REGISTRY_PROXY=${NODEPOOL_NPM_REGISTRY_PROXY:-http://$NODEPOOL_MIRROR_HOST:8080/registry.npmjs}
export NODEPOOL_TARBALLS_PROXY=${NODEPOOL_TARBALLS_PROXY:-http://$NODEPOOL_MIRROR_HOST:8080/tarballs}
export NODEPOOL_LXC_IMAGE_PROXY=${NODEPOOL_LXC_IMAGE_PROXY:-$NODEPOOL_MIRROR_HOST:8080/images.linuxcontainers}