diff --git a/roles/mirror-info/README.rst b/roles/mirror-info/README.rst new file mode 100644 index 00000000..1b892de5 --- /dev/null +++ b/roles/mirror-info/README.rst @@ -0,0 +1,7 @@ +An ansible role to configure the ``/etc/ci/mirror_info.sh`` script + +**Role Variables** + +.. zuul:rolevar:: mirror_fqdn + + The base host for mirror servers. diff --git a/roles/mirror-info/tasks/main.yaml b/roles/mirror-info/tasks/main.yaml new file mode 100644 index 00000000..241b1481 --- /dev/null +++ b/roles/mirror-info/tasks/main.yaml @@ -0,0 +1,17 @@ +- name: Create /etc/ci + become: yes + file: + path: /etc/ci + state: directory + owner: root + group: root + mode: 0755 + +- name: Install ci_mirror script + become: yes + template: + dest: '/etc/ci/mirror_info.sh' + owner: root + group: root + mode: 0644 + src: mirror_info.sh.j2 diff --git a/roles/mirror-info/templates/mirror_info.sh.j2 b/roles/mirror-info/templates/mirror_info.sh.j2 new file mode 100644 index 00000000..e3ae31e1 --- /dev/null +++ b/roles/mirror-info/templates/mirror_info.sh.j2 @@ -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_fqdn }} + +# 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} diff --git a/tests/base.yaml b/tests/base.yaml index 0989d039..4ed8d074 100644 --- a/tests/base.yaml +++ b/tests/base.yaml @@ -1,3 +1,4 @@ # Roles that are part of the 'base' job - include: configure-mirrors.yaml +- include: mirror-info.yaml \ No newline at end of file diff --git a/tests/mirror-info.yaml b/tests/mirror-info.yaml new file mode 100644 index 00000000..94c1b98f --- /dev/null +++ b/tests/mirror-info.yaml @@ -0,0 +1,19 @@ +- name: Test the creation of the mirror-info script + hosts: all + roles: + - role: mirror-info + mirror_fqdn: "{{ zuul_site_mirror_fqdn }}" + post_tasks: + - name: Stat mirror script + stat: + path: /etc/ci/mirror_info.sh + register: stat_result + # note this is "sh" (not bash) just to make sure + # it sources as POSIX + - name: Check mirror script can be sourced + shell: set -ex && . /etc/ci/mirror_info.sh && echo $AFS_SLUG + - name: Check /etc/ci/mirror_info.sh + assert: + that: + - stat_result.stat.exists + - stat_result.stat.mode == '0644'