126 lines
4.3 KiB
YAML
126 lines
4.3 KiB
YAML
---
|
|
# Copyright 2019 Red Hat, Inc.
|
|
# All Rights Reserved.
|
|
#
|
|
# 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.
|
|
|
|
- name: Create a new role for TripleO-Ansible
|
|
hosts: localhost
|
|
connection: local
|
|
gather_facts: false
|
|
tasks:
|
|
- name: Check for role name
|
|
fail:
|
|
msg: >-
|
|
The required variable `role_name` is undefined. Check your settings.
|
|
when:
|
|
- role_name is undefined
|
|
|
|
- name: Create role
|
|
command: >-
|
|
ansible-galaxy init
|
|
--role-skeleton=_skeleton_role_
|
|
--init-path=tripleo_ansible/roles {{ role_name }}
|
|
args:
|
|
creates: "tripleo_ansible/roles/{{ role_name }}"
|
|
|
|
- name: Add tox config
|
|
ini_file:
|
|
path: tox.ini
|
|
section: "testenv:mol-{{ role_name }}"
|
|
option: "{{ item.key }}"
|
|
value: "{{ item.value }}"
|
|
with_items:
|
|
- key: "basepython"
|
|
value: "{[testenv:mol]basepython}"
|
|
- key: "deps"
|
|
value: "{[testenv:mol]deps}"
|
|
- key: "changedir"
|
|
value: "{toxinidir}/tripleo_ansible/roles/{{ role_name }}"
|
|
- key: "commands"
|
|
value: "python -m pytest --color=yes --html={envlogdir}/reports.html --self-contained-html {tty:-s} {toxinidir}/tests/test_molecule.py"
|
|
|
|
- name: Read zuul molecule file
|
|
slurp:
|
|
src: zuul.d/molecule.yaml
|
|
register: molecule_yaml
|
|
|
|
- name: Create molecule entry
|
|
copy:
|
|
content: |-
|
|
---
|
|
{% set items = molecule_yaml['content'] | b64decode | from_yaml %}
|
|
{% set job_index = [] %}
|
|
{% set new_job_name = "tripleo-ansible-centos-7-molecule-" ~ role_name %}
|
|
{% for item in items %}
|
|
{% if 'project-template' in item %}
|
|
{% if item['project-template']['name'] == "tripleo-ansible-molecule-jobs" %}
|
|
{% if not (new_job_name in item['project-template']['check']['jobs']) %}
|
|
{% set _ = item['project-template']['check']['jobs'].append(new_job_name) %}
|
|
{% endif %}
|
|
{% if not (new_job_name in item['project-template']['gate']['jobs']) %}
|
|
{% set _ = item['project-template']['gate']['jobs'].append(new_job_name) %}
|
|
{% endif %}
|
|
{% endif %}
|
|
{% else %}
|
|
{% if item['job']['name'] == new_job_name %}
|
|
{% set _ = job_index.append(new_job_name) %}
|
|
{% endif %}
|
|
{% endif %}
|
|
{% endfor %}
|
|
{% if (job_index | length) < 1 %}
|
|
{% set new_job = {
|
|
"name": new_job_name,
|
|
"parent": "tripleo-ansible-centos",
|
|
"files": [
|
|
"^roles/" ~ role_name ~ "/.*"
|
|
],
|
|
"vars": {
|
|
"tox_envlist": "mol-" ~ role_name
|
|
}
|
|
}
|
|
%}
|
|
{% set _ = items.append({"job": new_job}) %}
|
|
{% endif %}
|
|
{{ items | to_nice_yaml(indent=2, width=1337) }}
|
|
dest: zuul.d/molecule.yaml
|
|
|
|
- name: Create role documentation
|
|
copy:
|
|
content: |
|
|
{% set opening = 'TripleO-Ansible Role - ' ~ role_name %}
|
|
{{ '=' * (opening | length) }}
|
|
{{ opening }}
|
|
{{ '=' * (opening | length) }}
|
|
|
|
This role provides for the following services:
|
|
|
|
* {{ role_name }}
|
|
|
|
|
|
Default variables
|
|
~~~~~~~~~~~~~~~~~
|
|
|
|
.. literalinclude:: ../../../tripleo_ansible/roles/{{ role_name }}/defaults/main.yml
|
|
:language: yaml
|
|
:start-after: under the License.
|
|
|
|
|
|
Example playbook
|
|
~~~~~~~~~~~~~~~~
|
|
|
|
.. literalinclude:: ../../../tripleo_ansible/roles/{{ role_name }}/molecule/default/playbook.yml
|
|
:language: yaml
|
|
:start-after: under the License.
|
|
dest: "doc/source/roles/role-{{ role_name }}.rst"
|