Add CI job for podified VF
Add CI for podified in order to test the build and the run, to make sure nothing breaks. Change-Id: Ide984601c01e8f2a1f1c522ea547be0a770f9a79
This commit is contained in:
parent
5076004733
commit
791203c79a
39
.zuul.yaml
39
.zuul.yaml
|
@ -1,4 +1,33 @@
|
||||||
---
|
---
|
||||||
|
- job:
|
||||||
|
name: validations-libs-podified-podman
|
||||||
|
parent: devstack-platform-fedora-latest
|
||||||
|
run: playbooks/validations-libs-podified.yaml
|
||||||
|
post-run: playbooks/post.yaml
|
||||||
|
timeout: 7200
|
||||||
|
voting: true
|
||||||
|
required-projects:
|
||||||
|
- openstack/validations-libs
|
||||||
|
- openstack/validations-common
|
||||||
|
- name: openstack/openstacksdk
|
||||||
|
override-checkout: master
|
||||||
|
- name: opendev.org/openstack/devstack
|
||||||
|
override-checkout: master
|
||||||
|
vars:
|
||||||
|
container_engine: podman
|
||||||
|
devstack_localrc:
|
||||||
|
USE_PYTHON3: true
|
||||||
|
irrelevant-files:
|
||||||
|
- ^.*\.rst$
|
||||||
|
- ^doc/.*$
|
||||||
|
- ^releasenotes/.*$
|
||||||
|
|
||||||
|
- job:
|
||||||
|
name: validations-libs-podified-docker
|
||||||
|
parent: validations-libs-podified-podman
|
||||||
|
vars:
|
||||||
|
container_engine: docker
|
||||||
|
|
||||||
- job:
|
- job:
|
||||||
name: validations-libs-functional
|
name: validations-libs-functional
|
||||||
parent: devstack
|
parent: devstack
|
||||||
|
@ -58,6 +87,8 @@
|
||||||
- openstack-tox-linters
|
- openstack-tox-linters
|
||||||
- openstack-tox-cover
|
- openstack-tox-cover
|
||||||
- validations-libs-functional
|
- validations-libs-functional
|
||||||
|
- validations-libs-podified-podman
|
||||||
|
- validations-libs-podified-docker
|
||||||
- openstack-tox-docs: &tripleo-docs
|
- openstack-tox-docs: &tripleo-docs
|
||||||
files:
|
files:
|
||||||
- ^doc/.*
|
- ^doc/.*
|
||||||
|
@ -65,11 +96,15 @@
|
||||||
- ^validations_libs/.*
|
- ^validations_libs/.*
|
||||||
- ^CONTRIBUTING.rst
|
- ^CONTRIBUTING.rst
|
||||||
- validations-libs-functional
|
- validations-libs-functional
|
||||||
|
- validations-libs-podified-podman
|
||||||
|
- validations-libs-podified-docker
|
||||||
- tripleo-ci-centos-9-undercloud-containers: &undercloud_containers_job_params
|
- tripleo-ci-centos-9-undercloud-containers: &undercloud_containers_job_params
|
||||||
dependencies:
|
dependencies:
|
||||||
- openstack-tox-linters
|
- openstack-tox-linters
|
||||||
- openstack-tox-cover
|
- openstack-tox-cover
|
||||||
- validations-libs-functional
|
- validations-libs-functional
|
||||||
|
- validations-libs-podified-podman
|
||||||
|
- validations-libs-podified-docker
|
||||||
gate:
|
gate:
|
||||||
jobs:
|
jobs:
|
||||||
- openstack-tox-linters
|
- openstack-tox-linters
|
||||||
|
@ -77,11 +112,15 @@
|
||||||
- openstack-tox-py39
|
- openstack-tox-py39
|
||||||
- openstack-tox-docs: *tripleo-docs
|
- openstack-tox-docs: *tripleo-docs
|
||||||
- validations-libs-functional
|
- validations-libs-functional
|
||||||
|
- validations-libs-podified-podman
|
||||||
|
- validations-libs-podified-docker
|
||||||
- tripleo-ci-centos-9-standalone-validation-libs:
|
- tripleo-ci-centos-9-standalone-validation-libs:
|
||||||
vars: *standalone_consumer_job_vars
|
vars: *standalone_consumer_job_vars
|
||||||
dependencies:
|
dependencies:
|
||||||
- openstack-tox-linters
|
- openstack-tox-linters
|
||||||
- validations-libs-functional
|
- validations-libs-functional
|
||||||
|
- validations-libs-podified-podman
|
||||||
|
- validations-libs-podified-docker
|
||||||
- tripleo-ci-centos-9-undercloud-containers:
|
- tripleo-ci-centos-9-undercloud-containers:
|
||||||
dependencies:
|
dependencies:
|
||||||
- openstack-tox-linters
|
- openstack-tox-linters
|
||||||
|
|
|
@ -26,9 +26,11 @@ import sys
|
||||||
DESCRIPTION = "Build and execute Validations from a container."
|
DESCRIPTION = "Build and execute Validations from a container."
|
||||||
EPILOG = "Example: ./validation --run --cmd run --validation check-ftype,512e"
|
EPILOG = "Example: ./validation --run --cmd run --validation check-ftype,512e"
|
||||||
|
|
||||||
VALIDATIONS_LOG_BASEDIR = os.path.expanduser('~/validations')
|
LOCAL_USER = os.environ.get('SUDO_USER', os.environ.get('USER'))
|
||||||
|
VALIDATIONS_LOG_BASEDIR = os.path.expanduser(f'~{LOCAL_USER}/validations')
|
||||||
CONTAINER_INVENTORY_PATH = '/tmp/inventory.yaml'
|
CONTAINER_INVENTORY_PATH = '/tmp/inventory.yaml'
|
||||||
COMMUNITY_VALIDATION_PATH = os.path.expanduser('~/community-validations')
|
COMMUNITY_VALIDATION_PATH = \
|
||||||
|
os.path.expanduser(f'~{LOCAL_USER}/community-validations')
|
||||||
|
|
||||||
CONTAINERFILE_TEMPLATE = """
|
CONTAINERFILE_TEMPLATE = """
|
||||||
FROM %(image)s
|
FROM %(image)s
|
||||||
|
@ -38,7 +40,7 @@ LABEL name="VF dockerfile"
|
||||||
RUN groupadd -g %(gid)s -o %(user)s
|
RUN groupadd -g %(gid)s -o %(user)s
|
||||||
RUN useradd -m -u %(uid)s -g %(gid)s -o -s /bin/bash %(user)s
|
RUN useradd -m -u %(uid)s -g %(gid)s -o -s /bin/bash %(user)s
|
||||||
|
|
||||||
RUN dnf install -y python3-pip gcc python3-devel jq %(extra_pkgs)s
|
RUN dnf install -y python3-pip gcc python3-devel libffi-devel jq openssh openssh-clients %(extra_pkgs)s
|
||||||
|
|
||||||
# Clone the Framework and common Validations
|
# Clone the Framework and common Validations
|
||||||
RUN python3 -m pip install validations-libs validations-common
|
RUN python3 -m pip install validations-libs validations-common
|
||||||
|
@ -90,13 +92,16 @@ class Validation(argparse.ArgumentParser):
|
||||||
'use --help to get more information. '
|
'use --help to get more information. '
|
||||||
'Only available in non-interactive mode. ')
|
'Only available in non-interactive mode. ')
|
||||||
parser.add_argument('--user', '-u', type=str, default='validation',
|
parser.add_argument('--user', '-u', type=str, default='validation',
|
||||||
help=('Set user in container. '))
|
help=('Set user in the container. '))
|
||||||
|
parser.add_argument('--user-home', type=str, default='/home/validation',
|
||||||
|
help=('User home path in the container. '
|
||||||
|
'Example: --user-home /home/validation '))
|
||||||
parser.add_argument('--uid', '-U', type=int, default=user_entry.pw_uid,
|
parser.add_argument('--uid', '-U', type=int, default=user_entry.pw_uid,
|
||||||
help=('User UID in container. '))
|
help=('User UID in container. '))
|
||||||
parser.add_argument('--gid', '-G', type=int, default=user_entry.pw_gid,
|
parser.add_argument('--gid', '-G', type=int, default=user_entry.pw_gid,
|
||||||
help=('Group UID in container. '))
|
help=('Group UID in container. '))
|
||||||
parser.add_argument('--image', type=str, default='fedora:30',
|
parser.add_argument('--image', type=str, default='fedora:35',
|
||||||
help='Container base image. Defaults to fedora:30')
|
help='Container base image. Defaults to fedora:35')
|
||||||
parser.add_argument('--extra-pkgs', type=str, default='',
|
parser.add_argument('--extra-pkgs', type=str, default='',
|
||||||
help=('Extra packages to install in the container.'
|
help=('Extra packages to install in the container.'
|
||||||
'Comma or space separated list. '
|
'Comma or space separated list. '
|
||||||
|
@ -147,6 +152,7 @@ class Validation(argparse.ArgumentParser):
|
||||||
self.interactive = parsed_args.interactive
|
self.interactive = parsed_args.interactive
|
||||||
self.cmd = parsed_args.cmd
|
self.cmd = parsed_args.cmd
|
||||||
self.user = parsed_args.user
|
self.user = parsed_args.user
|
||||||
|
self.user_home = parsed_args.user_home
|
||||||
self.uid = parsed_args.uid
|
self.uid = parsed_args.uid
|
||||||
self.gid = parsed_args.gid
|
self.gid = parsed_args.gid
|
||||||
self.repository = parsed_args.repository
|
self.repository = parsed_args.repository
|
||||||
|
@ -173,22 +179,20 @@ class Validation(argparse.ArgumentParser):
|
||||||
clone_user_repo, install_user_repo, entrypoint = "", "", ""
|
clone_user_repo, install_user_repo, entrypoint = "", "", ""
|
||||||
if self.repository:
|
if self.repository:
|
||||||
clone_user_repo = ("RUN git clone {} -b {} "
|
clone_user_repo = ("RUN git clone {} -b {} "
|
||||||
"/root/user_repo").format(self.repository,
|
"{}/user_repo").format(self.repository,
|
||||||
self.branch)
|
self.branch,
|
||||||
install_user_repo = ("RUN cd /root/user_repo && \\"
|
self.user_home)
|
||||||
"python3 -m pip install .")
|
install_user_repo = ("RUN cd {}/user_repo && \\"
|
||||||
|
"python3 -m pip install .").format(
|
||||||
|
self.user_home)
|
||||||
if self.interactive:
|
if self.interactive:
|
||||||
entrypoint = "ENTRYPOINT /usr/local/bin/validation"
|
entrypoint = "ENTRYPOINT /usr/local/bin/validation"
|
||||||
if self.user == 'root':
|
|
||||||
user_dir = '/root'
|
|
||||||
else:
|
|
||||||
user_dir = '/home/{}'.format(self.user)
|
|
||||||
param = {'image': self.image, 'extra_pkgs': self.extra_pkgs,
|
param = {'image': self.image, 'extra_pkgs': self.extra_pkgs,
|
||||||
'clone_user_repo': clone_user_repo,
|
'clone_user_repo': clone_user_repo,
|
||||||
'install_user_repo': install_user_repo,
|
'install_user_repo': install_user_repo,
|
||||||
'entrypoint': entrypoint,
|
'entrypoint': entrypoint,
|
||||||
'user': self.user, 'uid': self.uid, 'gid': self.gid,
|
'user': self.user, 'uid': self.uid, 'gid': self.gid,
|
||||||
'user_dir': user_dir}
|
'user_dir': self.user_home}
|
||||||
with open('./Containerfile', 'w+') as containerfile:
|
with open('./Containerfile', 'w+') as containerfile:
|
||||||
containerfile.write(CONTAINERFILE_TEMPLATE % param)
|
containerfile.write(CONTAINERFILE_TEMPLATE % param)
|
||||||
|
|
||||||
|
@ -234,18 +238,18 @@ class Validation(argparse.ArgumentParser):
|
||||||
container_args = '--rm'
|
container_args = '--rm'
|
||||||
cmd = [self.engine, 'run', container_args]
|
cmd = [self.engine, 'run', container_args]
|
||||||
# Keyfile
|
# Keyfile
|
||||||
cmd.append('-v%s:/root/containerhost_private_key:z' %
|
cmd.append('-v%s:%s/containerhost_private_key:z' %
|
||||||
self.keyfile)
|
(self.keyfile, self.user_home))
|
||||||
# log path
|
# log path
|
||||||
self._create_volume(self.validation_log_dir)
|
self._create_volume(self.validation_log_dir)
|
||||||
if os.path.isdir(os.path.abspath(self.validation_log_dir)):
|
if os.path.isdir(os.path.abspath(self.validation_log_dir)):
|
||||||
cmd.append('-v%s:/root/validations:z' %
|
cmd.append('-v%s:%s/validations:z' %
|
||||||
self.validation_log_dir)
|
(self.validation_log_dir, self.user_home))
|
||||||
# community validation path
|
# community validation path
|
||||||
self._create_volume(COMMUNITY_VALIDATION_PATH)
|
self._create_volume(COMMUNITY_VALIDATION_PATH)
|
||||||
if os.path.isdir(os.path.abspath(COMMUNITY_VALIDATION_PATH)):
|
if os.path.isdir(os.path.abspath(COMMUNITY_VALIDATION_PATH)):
|
||||||
cmd.append('-v%s:/root/community-validations:z' %
|
cmd.append('-v%s:%s/community-validations:z' %
|
||||||
COMMUNITY_VALIDATION_PATH)
|
(COMMUNITY_VALIDATION_PATH, self.user_home))
|
||||||
# Volumes
|
# Volumes
|
||||||
if self.volumes:
|
if self.volumes:
|
||||||
self._print('Adding volumes:')
|
self._print('Adding volumes:')
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
---
|
||||||
|
- hosts: tempest
|
||||||
|
name: validations-libs-podified
|
||||||
|
vars:
|
||||||
|
- container_executable: "{{ container_engine|default('podman') }}"
|
||||||
|
roles:
|
||||||
|
- ensure-tox
|
||||||
|
- ensure-pip
|
||||||
|
- ensure-virtualenv
|
||||||
|
- role: ensure-docker
|
||||||
|
when:
|
||||||
|
- "'{{ container_executable }}' == 'docker'"
|
||||||
|
- role: ensure-podman
|
||||||
|
when:
|
||||||
|
- "'{{ container_executable }}' == 'podman'"
|
||||||
|
- role: ensure-if-python
|
||||||
|
vars:
|
||||||
|
zuul_work_dir: "src/opendev.org/openstack/validations-libs"
|
||||||
|
tasks:
|
||||||
|
- name: gen key
|
||||||
|
shell: |
|
||||||
|
yes | ssh-keygen -f /home/zuul/.ssh/vf-key -N ""
|
||||||
|
|
||||||
|
- name: get key
|
||||||
|
register: key
|
||||||
|
shell: cat /home/zuul/.ssh/vf-key.pub
|
||||||
|
|
||||||
|
- name: add key
|
||||||
|
ansible.builtin.lineinfile:
|
||||||
|
path: /home/zuul/.ssh/authorized_keys
|
||||||
|
line: "{{ key.stdout }}"
|
||||||
|
create: yes
|
||||||
|
|
||||||
|
- name: Create VF inventory
|
||||||
|
ansible.builtin.lineinfile:
|
||||||
|
path: /home/zuul/inventory.yaml
|
||||||
|
line: "[controller]\n{{ ansible_default_ipv4.address }}"
|
||||||
|
create: yes
|
||||||
|
|
||||||
|
- name: Create home log directory for Validations
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: /home/zuul/validations
|
||||||
|
state: directory
|
||||||
|
mode: '0755'
|
||||||
|
|
||||||
|
- name: Build Validation container
|
||||||
|
shell:
|
||||||
|
cmd: >-
|
||||||
|
src/opendev.org/openstack/validations-libs/container/validation
|
||||||
|
-e {{ container_executable }} --user validation --build
|
||||||
|
executable: /bin/bash
|
||||||
|
|
||||||
|
- name: Run Validation container
|
||||||
|
become: true
|
||||||
|
shell:
|
||||||
|
cmd: >-
|
||||||
|
src/opendev.org/openstack/validations-libs/container/validation -D
|
||||||
|
--user validation --keyfile /home/zuul/.ssh/vf-key
|
||||||
|
-e {{ container_executable }} -R
|
||||||
|
--cmd run --validation check-ram
|
||||||
|
--output-log /home/validation/output.log
|
||||||
|
--inventory /home/zuul/inventory.yaml --extra-vars minimal_ram_gb=1
|
||||||
|
executable: /bin/bash
|
Loading…
Reference in New Issue