Skip to content

Commit

Permalink
Merge pull request #1676 from samvarankashyap/standardize_docker
Browse files Browse the repository at this point in the history
Merged by Jenkins
  • Loading branch information
cp-bot authored Mar 13, 2020
2 parents 014ddec + 8cfda66 commit be6db0f
Show file tree
Hide file tree
Showing 28 changed files with 252 additions and 64 deletions.
4 changes: 4 additions & 0 deletions .github/workflows/linting.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,7 @@ jobs:
run: |
cd ./linchpin/provision/roles/openstack
molecule lint -s delegated
- name: "Execute linting for Docker role"
run: |
cd ./linchpin/provision/roles/docker
molecule lint -s delegated
3 changes: 3 additions & 0 deletions linchpin/provision/roles/docker/.ansible-lint
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
skip_list:
- "204" # disable LineTooLongRule
- "503" # disable "Tasks run when changed should be handlers"
7 changes: 7 additions & 0 deletions linchpin/provision/roles/docker/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
.*.swp
.*.swo
*.pyc
*.pyo
__pycache__/*
molecule/*/junit.xml
molecule/*/pytestdebug.log
1 change: 1 addition & 0 deletions linchpin/provision/roles/docker/AUTHORS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Ryan Cole <[email protected]>
2 changes: 2 additions & 0 deletions linchpin/provision/roles/docker/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
docker_become: true
docker_become_user: root
1 change: 0 additions & 1 deletion linchpin/provision/roles/docker/filter_plugins

This file was deleted.

1 change: 1 addition & 0 deletions linchpin/provision/roles/docker/handlers/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Handlers for docker
1 change: 0 additions & 1 deletion linchpin/provision/roles/docker/library

This file was deleted.

1 change: 1 addition & 0 deletions linchpin/provision/roles/docker/library/rundb.py
19 changes: 19 additions & 0 deletions linchpin/provision/roles/docker/meta/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
galaxy_info:
author: Samvaran Rallabandi
description: docker provisioning for LinchPin
company: Red Hat, Inc.
license: GPLv3
min_ansible_version: 2.8
platforms:
- name: EL
versions:
- 7
- 8
- name: Fedora
versions:
- 30
- 31
galaxy_tags:
- oasis
- linchpin
- docker
6 changes: 6 additions & 0 deletions linchpin/provision/roles/docker/molecule/delegated/create.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
- name: Create
hosts: all
tasks:
- name: "Create molecule instances"
debug:
msg: "Creating..."
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
- name: Destroy
hosts: localhost
connection: local
gather_facts: false
roles:
- role: oasis_roles.molecule_docker_ci
molecule_docker_ci_state: absent
40 changes: 40 additions & 0 deletions linchpin/provision/roles/docker/molecule/delegated/molecule.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
dependency:
name: galaxy
options:
role-file: molecule/shared/requirements.yml
driver:
name: delegated
options:
managed: false
ansible_connection_options:
ansible_connection: local
lint:
name: yamllint
options:
config-file: tests/yamllint.yml
platforms:
- name: docker-delegated
provisioner:
name: ansible
lint:
name: ansible-lint
playbooks:
prepare: ../shared/prepare.yml
converge: ../shared/playbook.yml
cleanup: ../shared/cleanup.yml
config_options:
defaults:
stdout_callback: yaml
verifier:
name: testinfra
options:
# Add a -v so you see the individual test names,
# particularly useful with parameterized tests
v: true
lint:
name: flake8
# Using the shared directory is useful for sharing tests across scenarios,
# but is not a requirement. For scenario specific tests, add the appropriate
# file path to the test or test directory below
additional_files_or_dirs:
- ../../shared/tests
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Without at least a file here, tests in the additional directory will not
# get picked up. If you add actual tests to this directory, then you can
# safely eliminate this file. Otherwise, it exists only to cause the tests in
# shared/tests to be discovered.
#
# Most tests should be written in the shared/tests directory so that they can
# be captured by all the scenarios. Only add tests here if there are tests
# only relevant to a particular scenario
22 changes: 22 additions & 0 deletions linchpin/provision/roles/docker/molecule/shared/cleanup.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
- name: unregister systems
hosts: all
gather_facts: false
tasks:
- name: wait for host
wait_for_connection:
timeout: 1
register: waiting
ignore_errors: true

- block:
- name: fetch facts
setup: {}

- name: do unregistration
include_role:
name: oasis_roles.rhsm
when: ansible_distribution == 'RedHat'
when: waiting is success
vars:
rhsm_unregister: true
rhsm_username: "{{ omit }}"
5 changes: 5 additions & 0 deletions linchpin/provision/roles/docker/molecule/shared/playbook.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
- name: converge
hosts: all
roles:
- role: docker
post_tasks: []
15 changes: 15 additions & 0 deletions linchpin/provision/roles/docker/molecule/shared/prepare.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
- name: register RHSM
hosts: all
roles:
- role: oasis_roles.rhsm
when: ansible_distribution == 'RedHat'
vars:
rhsm_username: "{{ lookup('env', 'OASIS_RHSM_USERNAME') }}"
rhsm_password: "{{ lookup('env', 'OASIS_RHSM_PASSWORD') }}"
rhsm_server_hostname: "{{ lookup('env', 'OASIS_RHSM_SERVER_HOSTNAME') }}"
rhsm_pool_ids: "{{ lookup('env', 'OASIS_RHSM_POOL_IDS') }}"
rhsm_repositories:
enabled:
- rhel-7-server-rpms
- rhel-7-server-extras-rpms
- rhel-7-server-optional-rpms
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
- oasis_roles.rhsm
- oasis_roles.molecule_docker_ci
9 changes: 6 additions & 3 deletions linchpin/provision/roles/docker/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
---
- name: "declaring output vars"
set_fact:
topology_outputs_docker_container: []
topology_outputs_docker_image: []

- name: "Initiating Provisioning of docker resource group"
include: provision_resource_group.yml res_grp={{ item }}
include_tasks: provision_resource_group.yml
vars:
res_grp: "{{ item }}"
with_items:
- "{{ resources }}"
when: state == "present"

- name: "Initiating Teardown of docker resource group"
include: teardown_resource_group.yml res_grp={{ item }}
include_tasks: teardown_resource_group.yml
vars:
res_grp: "{{ item }}"
with_items:
- "{{ resources }}"
when: state == "absent"
Original file line number Diff line number Diff line change
@@ -1,36 +1,51 @@
---
# Provision a docker container

- set_fact:
- name: "set empty list for docker parameters"
set_fact:
docker_container_params: {}

# Build the list of parameters to Ansible's docker_container module.
# The topology's resource definition parameters should map to
# Ansible's docker_container parameters, except for 'role'.

- set_fact:
docker_container_params: "{{ docker_container_params | combine({res_def_item.key: res_def_item.value}) }}"
- name: "Build list of paramters"
set_fact:
docker_container_params: "{{ docker_container_params |
combine({res_def_item.key:\
res_def_item.value}) }}"
with_dict: "{{ res_def }}"
when: res_def_item.key not in ['role']
loop_control:
loop_var: res_def_item

- block:
- name: Provision Docker container
docker_container: "{{ docker_container_params }}"
register: outputitem
- name: Provision Docker container
docker_container: "{{ docker_container_params }}"
register: outputitem
rescue:
- fail:
msg: 'An error occurred with docker_container module. It might be caused by either the lack of Docker on the host, dependencies, or daemon access denial. Please make sure the dependencies are installed and Docker configured correctly. Try running `linchpin setup docker` to install Docker, or `pip install linchpin[docker] to install Python dependencies.'
- name: "Fail when docker dependencies are not found"
fail:
msg: 'An error occurred with docker_container module.
It might be caused by either the lack of Docker on the host,
dependencies, or daemon access denial.
Please make sure the dependencies are installed
and Docker configured correctly.
Try running `linchpin setup docker`
to install Docker,
or `pip install linchpin[docker]
to install Python dependencies.'

- name: "set tmp var"
set_fact:
tmp: ["{{ outputitem['ansible_facts']['docker_container'] | combine({'resource_definition': res_def}) }}"]
tmp: ["{{ outputitem['ansible_facts']['docker_container'] |
combine({'resource_definition': res_def}) }}"]

- name: "Append outputitem to topology_outputs"
set_fact:
topology_outputs_docker_container: "{{ topology_outputs_docker_container + tmp }}"
topology_outputs_docker_container: "{{ topology_outputs_docker_container\
+ tmp }}"

- name: "Add type to resource"
set_fact:
topology_outputs_docker_container: "{{ topology_outputs_docker_container | add_res_data(res_grp_type, res_def['role']) }}"
topology_outputs_docker_container: "{{ topology_outputs_docker_container |
add_res_data(res_grp_type,
res_def['role']) }}"
78 changes: 45 additions & 33 deletions linchpin/provision/roles/docker/tasks/provision_docker_image.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
---
# Provision a docker container image

# Paths should be relative to workspace if not absolute or relative to OS filesystem
- set_fact:
# Paths should be relative to workspace
# if not absolute or relative to OS filesystem
- name: "Intialize the workspace path"
set_fact:
"{{ path_item }}": "{{ res_def[path_item] | path_relative_to(workspace) }}"
when: path_item is in res_def
with_items:
Expand All @@ -14,39 +14,51 @@
loop_var: path_item

- block:
- name: Provision Docker image
docker_image:
name: "{{ res_def['name'] }}"
buildargs: "{{ res_def['buildargs'] | default(omit) }}"
cacert_path: "{{ cacert_path | default(omit) }}"
cert_path: "{{ cert_path | default(omit) }}"
container_limits: "{{ res_def['buildargs'] | default(omit) }}"
debug: "{{ res_def['debug'] | default(omit) }}"
docker_host: "{{ res_def['docker_host'] | default(omit) }}"
dockerfile: "{{ res_def['dockerfile'] | default(omit) }}"
force: "{{ res_def['force'] | default(omit) }}"
http_timeout: "{{ res_def['http_timeout'] | default(omit) }}"
load_path: "{{ load_path | default(omit) }}"
nocache: "{{ res_def['nocache'] | default(omit) }}"
path: "{{ path | default(omit) }}"
pull: "{{ res_def['pull'] | default(omit) }}"
repository: "{{ res_def['repository'] | default(omit) }}"
rm: "{{ res_def['rm'] | default(omit) }}"
ssl_version: "{{ res_def['ssl_version'] | default(omit) }}"
tag: "{{ res_def['tag'] | default(omit) }}"
timeout: "{{ res_def['timeout'] | default(omit) }}"
tls: "{{ res_def['tls'] | default(omit) }}"
tls_hostname: "{{ res_def['tls_hostname'] | default(omit) }}"
tls_verify: "{{ res_def['tls_verify'] | default(omit) }}"
register: outputitem
- name: Provision Docker image
docker_image:
name: "{{ res_def['name'] }}"
buildargs: "{{ res_def['buildargs'] | default(omit) }}"
cacert_path: "{{ cacert_path | default(omit) }}"
cert_path: "{{ cert_path | default(omit) }}"
container_limits: "{{ res_def['buildargs'] | default(omit) }}"
debug: "{{ res_def['debug'] | default(omit) }}"
docker_host: "{{ res_def['docker_host'] | default(omit) }}"
dockerfile: "{{ res_def['dockerfile'] | default(omit) }}"
force: "{{ res_def['force'] | default(omit) }}"
http_timeout: "{{ res_def['http_timeout'] | default(omit) }}"
load_path: "{{ load_path | default(omit) }}"
nocache: "{{ res_def['nocache'] | default(omit) }}"
path: "{{ path | default(omit) }}"
pull: "{{ res_def['pull'] | default(omit) }}"
repository: "{{ res_def['repository'] | default(omit) }}"
rm: "{{ res_def['rm'] | default(omit) }}"
ssl_version: "{{ res_def['ssl_version'] | default(omit) }}"
tag: "{{ res_def['tag'] | default(omit) }}"
timeout: "{{ res_def['timeout'] | default(omit) }}"
tls: "{{ res_def['tls'] | default(omit) }}"
tls_hostname: "{{ res_def['tls_hostname'] | default(omit) }}"
tls_verify: "{{ res_def['tls_verify'] | default(omit) }}"
register: outputitem
rescue:
- fail:
msg: 'An error occurred with docker_image module. It might be caused by either the lack of Docker on the host, dependencies, or daemon access denial. Please make sure the dependencies are installed and Docker configured correctly. Try running `linchpin setup docker` to install Docker, or `pip install linchpin[docker] to install Python dependencies.'
- name: "Fail when docker dependencies are not found"
fail:
msg: 'An error occurred with docker_image module.
It might be caused by either the lack of Docker on the host,
dependencies, or daemon access denial.
Please make sure the dependencies are installed
and Docker configured correctly.
Try running `linchpin setup docker` to install Docker,
or `pip install linchpin[docker] to install Python dependencies.'

- name: "Append outputitem to topology_outputs"
set_fact:
topology_outputs_docker_image: "{{ topology_outputs_docker_image + ([outputitem['image'] | combine({'resource_definition': res_def})]) }}"
topology_outputs_docker_image: "{{ topology_outputs_docker_image +\
([outputitem['image'] |
combine({'resource_definition':\
res_def})]) }}"

- name: "Add type to resource"
set_fact:
topology_outputs_docker_image: "{{ topology_outputs_docker_image | add_res_data(res_grp_type, res_def['role']) }}"
topology_outputs_docker_image: "{{ topology_outputs_docker_image |
add_res_data(res_grp_type,
res_def['role']) }}"
3 changes: 1 addition & 2 deletions linchpin/provision/roles/docker/tasks/provision_res_defs.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
---
- name: "Provision resource"
include: "provision_{{ res_def['role'] }}.yml"
include_tasks: "provision_{{ res_def['role'] }}.yml"
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
- name: "Provisioning resource definitions of current group"
include: provision_res_defs.yml res_def={{ res_item.0 }} res_grp_name={{ res_item.1 }} res_grp_type={{ res_item.2 }}
include_tasks: provision_res_defs.yml
vars:
res_def: "{{ res_item.0 }}"
res_grp_name: "{{ res_item.1 }}"
res_grp_type: "{{ res_item.2 }}"
with_nested:
- "{{ res_grp['res_defs'] | default(res_grp['resource_definitions']) }}"
- ["{{ res_grp['resource_group_name'] }}"]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
---
- name: Teardown Docker container
docker_container:
docker_host: "{{ output_res['resource_definition']['docker_host'] | default(omit) }}"
docker_host: "{{ output_res['resource_definition']['docker_host'] |
default(omit) }}"
name: "{{ output_res['Config']['Hostname'] }}"
force_kill: "{{ output_res['resource_definition']['force_kill'] | default(omit) }}"
keep_volumes: "{{ output_res['resource_definition']['keep_volumes'] | default(omit) }}"
force_kill: "{{ output_res['resource_definition']['force_kill'] |
default(omit) }}"
keep_volumes: "{{ output_res['resource_definition']['keep_volumes'] |
default(omit) }}"
state: absent
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
# Destroy a docker container

- name: Teardown Docker container
docker_image:
docker_host: "{{ output_res['resource_definition']['docker_host'] | default(omit) }}"
docker_host: "{{ output_res['resource_definition']['docker_host'] |
default(omit) }}"
name: "{{ output_res['resource_definition']['name'] }}"
force: "{{ output_res['resource_definition']['force'] | default(omit) }}"
force: "{{ output_res['resource_definition']['force'] |
default(omit) }}"
tag: "{{ output_res['resource_definition']['tag'] | default(omit) }}"
state: absent
Loading

0 comments on commit be6db0f

Please sign in to comment.