Retire Tripleo: remove repo content
TripleO project is retiring - https://review.opendev.org/c/openstack/governance/+/905145 this commit remove the content of this project repo Change-Id: I3f007ba782e067fe575fb9c348a13b9b84f7834d
This commit is contained in:
parent
e1abb34ef8
commit
43e28b25c2
@ -1,7 +0,0 @@
|
|||||||
skip_list:
|
|
||||||
- role-name
|
|
||||||
- unnamed-task
|
|
||||||
- command-instead-of-shell
|
|
||||||
- no-changed-when
|
|
||||||
- no-handler
|
|
||||||
- yaml
|
|
6
.gitignore
vendored
6
.gitignore
vendored
@ -1,6 +0,0 @@
|
|||||||
.tox
|
|
||||||
__pycache__
|
|
||||||
build
|
|
||||||
tripleo_operator_ansible.egg-info/
|
|
||||||
.stestr
|
|
||||||
*.pyc
|
|
@ -1,49 +0,0 @@
|
|||||||
---
|
|
||||||
repos:
|
|
||||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
||||||
rev: v2.1.0
|
|
||||||
hooks:
|
|
||||||
- id: end-of-file-fixer
|
|
||||||
- id: trailing-whitespace
|
|
||||||
- id: mixed-line-ending
|
|
||||||
- id: check-byte-order-marker
|
|
||||||
- id: check-executables-have-shebangs
|
|
||||||
- id: check-merge-conflict
|
|
||||||
- id: debug-statements
|
|
||||||
- id: flake8
|
|
||||||
entry: flake8 --ignore=E24,E121,E122,E123,E124,E126,E226,E265,E305,E402,F401,F405,E501,E704,F403,F841,W503
|
|
||||||
# TODO(cloudnull): These codes were added to pass the lint check.
|
|
||||||
# All of these ignore codes should be resolved in
|
|
||||||
# future PRs.
|
|
||||||
- id: check-yaml
|
|
||||||
files: .*\.(yaml|yml)$
|
|
||||||
- repo: https://github.com/adrienverge/yamllint.git
|
|
||||||
rev: v1.15.0
|
|
||||||
hooks:
|
|
||||||
- id: yamllint
|
|
||||||
files: \.(yaml|yml)$
|
|
||||||
types: [file, yaml]
|
|
||||||
entry: yamllint --strict -f parsable
|
|
||||||
- repo: https://github.com/ansible/ansible-lint
|
|
||||||
rev: v5.3.2
|
|
||||||
hooks:
|
|
||||||
- id: ansible-lint
|
|
||||||
always_run: true
|
|
||||||
pass_filenames: false
|
|
||||||
# do not add file filters here as ansible-lint does not give reliable
|
|
||||||
# results when called with individual files.
|
|
||||||
# https://github.com/ansible/ansible-lint/issues/611
|
|
||||||
verbose: true
|
|
||||||
entry: env ANSIBLE_LIBRARY=library ansible-lint --force-color -p -v --exclude zuul.d/
|
|
||||||
- repo: https://github.com/openstack-dev/bashate.git
|
|
||||||
rev: 0.6.0
|
|
||||||
hooks:
|
|
||||||
- id: bashate
|
|
||||||
entry: bashate --error . --verbose --ignore=E006,E040
|
|
||||||
# Run bashate check for all bash scripts
|
|
||||||
# Ignores the following rules:
|
|
||||||
# E006: Line longer than 79 columns (as many scripts use jinja
|
|
||||||
# templating, this is very difficult)
|
|
||||||
# E040: Syntax error determined using `bash -n` (as many scripts
|
|
||||||
# use jinja templating, this will often fail and the syntax
|
|
||||||
# error will be discovered in execution anyway)
|
|
@ -1,3 +0,0 @@
|
|||||||
[DEFAULT]
|
|
||||||
test_path=${TEST_PATH:-./tests/}
|
|
||||||
top_dir=./
|
|
11
.yamllint
11
.yamllint
@ -1,11 +0,0 @@
|
|||||||
---
|
|
||||||
extends: default
|
|
||||||
|
|
||||||
rules:
|
|
||||||
line-length:
|
|
||||||
# increase line limit because ansible collections needs more space
|
|
||||||
# ansible-lint is 160 (rule 204)
|
|
||||||
max: 256
|
|
||||||
|
|
||||||
ignore: |
|
|
||||||
zuul.d/*.yaml
|
|
202
LICENSE
202
LICENSE
@ -1,202 +0,0 @@
|
|||||||
|
|
||||||
Apache License
|
|
||||||
Version 2.0, January 2004
|
|
||||||
http://www.apache.org/licenses/
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
||||||
|
|
||||||
1. Definitions.
|
|
||||||
|
|
||||||
"License" shall mean the terms and conditions for use, reproduction,
|
|
||||||
and distribution as defined by Sections 1 through 9 of this document.
|
|
||||||
|
|
||||||
"Licensor" shall mean the copyright owner or entity authorized by
|
|
||||||
the copyright owner that is granting the License.
|
|
||||||
|
|
||||||
"Legal Entity" shall mean the union of the acting entity and all
|
|
||||||
other entities that control, are controlled by, or are under common
|
|
||||||
control with that entity. For the purposes of this definition,
|
|
||||||
"control" means (i) the power, direct or indirect, to cause the
|
|
||||||
direction or management of such entity, whether by contract or
|
|
||||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
||||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
||||||
|
|
||||||
"You" (or "Your") shall mean an individual or Legal Entity
|
|
||||||
exercising permissions granted by this License.
|
|
||||||
|
|
||||||
"Source" form shall mean the preferred form for making modifications,
|
|
||||||
including but not limited to software source code, documentation
|
|
||||||
source, and configuration files.
|
|
||||||
|
|
||||||
"Object" form shall mean any form resulting from mechanical
|
|
||||||
transformation or translation of a Source form, including but
|
|
||||||
not limited to compiled object code, generated documentation,
|
|
||||||
and conversions to other media types.
|
|
||||||
|
|
||||||
"Work" shall mean the work of authorship, whether in Source or
|
|
||||||
Object form, made available under the License, as indicated by a
|
|
||||||
copyright notice that is included in or attached to the work
|
|
||||||
(an example is provided in the Appendix below).
|
|
||||||
|
|
||||||
"Derivative Works" shall mean any work, whether in Source or Object
|
|
||||||
form, that is based on (or derived from) the Work and for which the
|
|
||||||
editorial revisions, annotations, elaborations, or other modifications
|
|
||||||
represent, as a whole, an original work of authorship. For the purposes
|
|
||||||
of this License, Derivative Works shall not include works that remain
|
|
||||||
separable from, or merely link (or bind by name) to the interfaces of,
|
|
||||||
the Work and Derivative Works thereof.
|
|
||||||
|
|
||||||
"Contribution" shall mean any work of authorship, including
|
|
||||||
the original version of the Work and any modifications or additions
|
|
||||||
to that Work or Derivative Works thereof, that is intentionally
|
|
||||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
||||||
or by an individual or Legal Entity authorized to submit on behalf of
|
|
||||||
the copyright owner. For the purposes of this definition, "submitted"
|
|
||||||
means any form of electronic, verbal, or written communication sent
|
|
||||||
to the Licensor or its representatives, including but not limited to
|
|
||||||
communication on electronic mailing lists, source code control systems,
|
|
||||||
and issue tracking systems that are managed by, or on behalf of, the
|
|
||||||
Licensor for the purpose of discussing and improving the Work, but
|
|
||||||
excluding communication that is conspicuously marked or otherwise
|
|
||||||
designated in writing by the copyright owner as "Not a Contribution."
|
|
||||||
|
|
||||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
||||||
on behalf of whom a Contribution has been received by Licensor and
|
|
||||||
subsequently incorporated within the Work.
|
|
||||||
|
|
||||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
copyright license to reproduce, prepare Derivative Works of,
|
|
||||||
publicly display, publicly perform, sublicense, and distribute the
|
|
||||||
Work and such Derivative Works in Source or Object form.
|
|
||||||
|
|
||||||
3. Grant of Patent License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
(except as stated in this section) patent license to make, have made,
|
|
||||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
||||||
where such license applies only to those patent claims licensable
|
|
||||||
by such Contributor that are necessarily infringed by their
|
|
||||||
Contribution(s) alone or by combination of their Contribution(s)
|
|
||||||
with the Work to which such Contribution(s) was submitted. If You
|
|
||||||
institute patent litigation against any entity (including a
|
|
||||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
||||||
or a Contribution incorporated within the Work constitutes direct
|
|
||||||
or contributory patent infringement, then any patent licenses
|
|
||||||
granted to You under this License for that Work shall terminate
|
|
||||||
as of the date such litigation is filed.
|
|
||||||
|
|
||||||
4. Redistribution. You may reproduce and distribute copies of the
|
|
||||||
Work or Derivative Works thereof in any medium, with or without
|
|
||||||
modifications, and in Source or Object form, provided that You
|
|
||||||
meet the following conditions:
|
|
||||||
|
|
||||||
(a) You must give any other recipients of the Work or
|
|
||||||
Derivative Works a copy of this License; and
|
|
||||||
|
|
||||||
(b) You must cause any modified files to carry prominent notices
|
|
||||||
stating that You changed the files; and
|
|
||||||
|
|
||||||
(c) You must retain, in the Source form of any Derivative Works
|
|
||||||
that You distribute, all copyright, patent, trademark, and
|
|
||||||
attribution notices from the Source form of the Work,
|
|
||||||
excluding those notices that do not pertain to any part of
|
|
||||||
the Derivative Works; and
|
|
||||||
|
|
||||||
(d) If the Work includes a "NOTICE" text file as part of its
|
|
||||||
distribution, then any Derivative Works that You distribute must
|
|
||||||
include a readable copy of the attribution notices contained
|
|
||||||
within such NOTICE file, excluding those notices that do not
|
|
||||||
pertain to any part of the Derivative Works, in at least one
|
|
||||||
of the following places: within a NOTICE text file distributed
|
|
||||||
as part of the Derivative Works; within the Source form or
|
|
||||||
documentation, if provided along with the Derivative Works; or,
|
|
||||||
within a display generated by the Derivative Works, if and
|
|
||||||
wherever such third-party notices normally appear. The contents
|
|
||||||
of the NOTICE file are for informational purposes only and
|
|
||||||
do not modify the License. You may add Your own attribution
|
|
||||||
notices within Derivative Works that You distribute, alongside
|
|
||||||
or as an addendum to the NOTICE text from the Work, provided
|
|
||||||
that such additional attribution notices cannot be construed
|
|
||||||
as modifying the License.
|
|
||||||
|
|
||||||
You may add Your own copyright statement to Your modifications and
|
|
||||||
may provide additional or different license terms and conditions
|
|
||||||
for use, reproduction, or distribution of Your modifications, or
|
|
||||||
for any such Derivative Works as a whole, provided Your use,
|
|
||||||
reproduction, and distribution of the Work otherwise complies with
|
|
||||||
the conditions stated in this License.
|
|
||||||
|
|
||||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
||||||
any Contribution intentionally submitted for inclusion in the Work
|
|
||||||
by You to the Licensor shall be under the terms and conditions of
|
|
||||||
this License, without any additional terms or conditions.
|
|
||||||
Notwithstanding the above, nothing herein shall supersede or modify
|
|
||||||
the terms of any separate license agreement you may have executed
|
|
||||||
with Licensor regarding such Contributions.
|
|
||||||
|
|
||||||
6. Trademarks. This License does not grant permission to use the trade
|
|
||||||
names, trademarks, service marks, or product names of the Licensor,
|
|
||||||
except as required for reasonable and customary use in describing the
|
|
||||||
origin of the Work and reproducing the content of the NOTICE file.
|
|
||||||
|
|
||||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
||||||
agreed to in writing, Licensor provides the Work (and each
|
|
||||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
||||||
implied, including, without limitation, any warranties or conditions
|
|
||||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
||||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
||||||
appropriateness of using or redistributing the Work and assume any
|
|
||||||
risks associated with Your exercise of permissions under this License.
|
|
||||||
|
|
||||||
8. Limitation of Liability. In no event and under no legal theory,
|
|
||||||
whether in tort (including negligence), contract, or otherwise,
|
|
||||||
unless required by applicable law (such as deliberate and grossly
|
|
||||||
negligent acts) or agreed to in writing, shall any Contributor be
|
|
||||||
liable to You for damages, including any direct, indirect, special,
|
|
||||||
incidental, or consequential damages of any character arising as a
|
|
||||||
result of this License or out of the use or inability to use the
|
|
||||||
Work (including but not limited to damages for loss of goodwill,
|
|
||||||
work stoppage, computer failure or malfunction, or any and all
|
|
||||||
other commercial damages or losses), even if such Contributor
|
|
||||||
has been advised of the possibility of such damages.
|
|
||||||
|
|
||||||
9. Accepting Warranty or Additional Liability. While redistributing
|
|
||||||
the Work or Derivative Works thereof, You may choose to offer,
|
|
||||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
||||||
or other liability obligations and/or rights consistent with this
|
|
||||||
License. However, in accepting such obligations, You may act only
|
|
||||||
on Your own behalf and on Your sole responsibility, not on behalf
|
|
||||||
of any other Contributor, and only if You agree to indemnify,
|
|
||||||
defend, and hold each Contributor harmless for any liability
|
|
||||||
incurred by, or claims asserted against, such Contributor by reason
|
|
||||||
of your accepting any such warranty or additional liability.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
APPENDIX: How to apply the Apache License to your work.
|
|
||||||
|
|
||||||
To apply the Apache License to your work, attach the following
|
|
||||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
||||||
replaced with your own identifying information. (Don't include
|
|
||||||
the brackets!) The text should be enclosed in the appropriate
|
|
||||||
comment syntax for the file format. We also recommend that a
|
|
||||||
file or class name and description of purpose be included on the
|
|
||||||
same "printed page" as the copyright notice for easier
|
|
||||||
identification within third-party archives.
|
|
||||||
|
|
||||||
Copyright [yyyy] [name of copyright owner]
|
|
||||||
|
|
||||||
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.
|
|
@ -1,9 +0,0 @@
|
|||||||
tripleo-operator-ansible
|
|
||||||
========================
|
|
||||||
|
|
||||||
This repository contains an ansible collection of TripleO roles. This collection
|
|
||||||
contains a set of roles providing an ansible interface for the TripleO cli actions.
|
|
||||||
|
|
||||||
Documentation
|
|
||||||
-------------
|
|
||||||
Documentation can be viewed at https://docs.openstack.org/tripleo-operator-ansible/latest/
|
|
10
README.rst
Normal file
10
README.rst
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
This project is no longer maintained.
|
||||||
|
|
||||||
|
The contents of this repository are still available in the Git
|
||||||
|
source code management system. To see the contents of this
|
||||||
|
repository before it reached its end of life, please check out the
|
||||||
|
previous commit with "git checkout HEAD^1".
|
||||||
|
|
||||||
|
For any further questions, please email
|
||||||
|
openstack-discuss@lists.openstack.org or join #openstack-dev on
|
||||||
|
OFTC.
|
@ -1 +0,0 @@
|
|||||||
ansible-core<2.12
|
|
37
bindep.txt
37
bindep.txt
@ -1,37 +0,0 @@
|
|||||||
# This file facilitates OpenStack-CI package installation
|
|
||||||
# before the execution of any tests.
|
|
||||||
#
|
|
||||||
# See the following for details:
|
|
||||||
# - https://docs.openstack.org/infra/bindep/
|
|
||||||
# - https://opendev.org/opendev/bindep/
|
|
||||||
#
|
|
||||||
# Even if the role does not make use of this facility, it
|
|
||||||
# is better to have this file empty, otherwise OpenStack-CI
|
|
||||||
# will fall back to installing its default packages which
|
|
||||||
# will potentially be detrimental to the tests executed.
|
|
||||||
|
|
||||||
# The gcc compiler
|
|
||||||
gcc
|
|
||||||
|
|
||||||
# Base requirements for RPM distros
|
|
||||||
gcc-c++ [platform:rpm]
|
|
||||||
git [platform:rpm]
|
|
||||||
libffi-devel [platform:rpm]
|
|
||||||
openssl-devel [platform:rpm]
|
|
||||||
python-devel [platform:rpm !platform:rhel-8 !platform:centos-8]
|
|
||||||
python3-devel [platform:rpm !platform:rhel-7 !platform:centos-7]
|
|
||||||
PyYAML [platform:rpm !platform:rhel-8 !platform:centos-8]
|
|
||||||
python3-pyyaml [platform:rpm !platform:rhel-7 !platform:centos-7]
|
|
||||||
python3-dnf [platform:rpm !platform:rhel-7 !platform:centos-7]
|
|
||||||
|
|
||||||
# For SELinux
|
|
||||||
libselinux-python [platform:rpm !platform:rhel-8 !platform:centos-8]
|
|
||||||
libsemanage-python [platform:redhat !platform:rhel-8 !platform:centos-8]
|
|
||||||
libselinux-python3 [platform:rpm !platform:rhel-7 !platform:centos-7]
|
|
||||||
libsemanage-python3 [platform:redhat !platform:rhel-7 !platform:centos-7]
|
|
||||||
|
|
||||||
# Required for compressing collected log files in CI
|
|
||||||
gzip
|
|
||||||
|
|
||||||
# Required to build language docs
|
|
||||||
gettext
|
|
@ -1,76 +0,0 @@
|
|||||||
---
|
|
||||||
- hosts: all
|
|
||||||
vars:
|
|
||||||
collection_path: "{{ ansible_user_dir }}/{{ zuul.projects['opendev.org/openstack/tripleo-operator-ansible'].src_dir }}"
|
|
||||||
build_collection_path: /tmp/collection_built/
|
|
||||||
ansible_galaxy_path: "~/.local/bin/ansible-galaxy"
|
|
||||||
|
|
||||||
tasks:
|
|
||||||
|
|
||||||
- name: Include role for pip
|
|
||||||
include_role:
|
|
||||||
name: ensure-pip
|
|
||||||
|
|
||||||
- name: Install ansible
|
|
||||||
pip:
|
|
||||||
name: ansible-core<2.12
|
|
||||||
|
|
||||||
- name: Discover tag version
|
|
||||||
set_fact:
|
|
||||||
version_tag: "{{ zuul.tag|default('no_version', true) }}"
|
|
||||||
|
|
||||||
- name: Fail if no tag version found
|
|
||||||
fail:
|
|
||||||
msg: "No tag was found in Zuul vars!"
|
|
||||||
when: version_tag == 'no_version'
|
|
||||||
|
|
||||||
- name: Create a directory for collection
|
|
||||||
file:
|
|
||||||
state: "{{ item }}"
|
|
||||||
path: "{{ build_collection_path }}"
|
|
||||||
mode: 0755
|
|
||||||
loop:
|
|
||||||
- absent
|
|
||||||
- directory
|
|
||||||
|
|
||||||
- name: Set galaxy.yml for right version from tag
|
|
||||||
lineinfile:
|
|
||||||
path: '{{ collection_path }}/galaxy.yml'
|
|
||||||
regexp: '^version:.*'
|
|
||||||
line: 'version: {{ version_tag }}'
|
|
||||||
|
|
||||||
- name: Build collection
|
|
||||||
command: "{{ ansible_galaxy_path }} collection build --output-path {{ build_collection_path }} --force"
|
|
||||||
args:
|
|
||||||
chdir: "{{ collection_path }}"
|
|
||||||
|
|
||||||
- name: Publish content to Ansible Galaxy
|
|
||||||
block:
|
|
||||||
- name: Create ansible.cfg configuration file tempfile
|
|
||||||
tempfile:
|
|
||||||
state: file
|
|
||||||
suffix: .cfg
|
|
||||||
register: _ansiblecfg_tmp
|
|
||||||
|
|
||||||
- name: Create ansible.cfg configuration file
|
|
||||||
copy:
|
|
||||||
dest: "{{ _ansiblecfg_tmp.path }}"
|
|
||||||
mode: 0600
|
|
||||||
content: |
|
|
||||||
[galaxy]
|
|
||||||
server_list = release_galaxy
|
|
||||||
|
|
||||||
[galaxy_server.release_galaxy]
|
|
||||||
url = {{ ansible_galaxy_info.url }}
|
|
||||||
token = {{ ansible_galaxy_info.token }}
|
|
||||||
|
|
||||||
- name: Publish collection to Ansible Galaxy / Automation Hub
|
|
||||||
environment:
|
|
||||||
ANSIBLE_CONFIG: "{{ _ansiblecfg_tmp.path }}"
|
|
||||||
shell: >-
|
|
||||||
{{ ansible_galaxy_path }} collection publish -vvv
|
|
||||||
{{ build_collection_path }}/tripleo-operator-{{ version_tag }}.tar.gz
|
|
||||||
|
|
||||||
always:
|
|
||||||
- name: Shred ansible-galaxy credentials
|
|
||||||
command: "shred {{ _ansiblecfg_tmp.path }}"
|
|
@ -1,13 +0,0 @@
|
|||||||
netaddr # BSD
|
|
||||||
stestr>=2.0.0 # Apache-2.0
|
|
||||||
oslotest>=3.2.0 # Apache-2.0
|
|
||||||
ruamel.yaml
|
|
||||||
pre-commit # MIT
|
|
||||||
ansible-core<2.12
|
|
||||||
|
|
||||||
# this is required for the docs build jobs
|
|
||||||
sphinx>=2.0.0,!=2.1.0 # BSD
|
|
||||||
openstackdocstheme>=2.2.1 # Apache-2.0
|
|
||||||
reno>=3.1.0 # Apache-2.0
|
|
||||||
doc8>=0.8.0 # Apache-2.0
|
|
||||||
bashate>=0.6.0 # Apache-2.0
|
|
@ -1,298 +0,0 @@
|
|||||||
# 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.
|
|
||||||
|
|
||||||
|
|
||||||
import imp
|
|
||||||
import os
|
|
||||||
|
|
||||||
from docutils import core
|
|
||||||
from docutils import nodes
|
|
||||||
from docutils.parsers.rst import Directive
|
|
||||||
from docutils.parsers import rst
|
|
||||||
from docutils.writers.html4css1 import Writer
|
|
||||||
|
|
||||||
from ruamel.yaml import YAML as RYAML
|
|
||||||
|
|
||||||
try:
|
|
||||||
import io
|
|
||||||
StringIO = io.StringIO
|
|
||||||
except ImportError:
|
|
||||||
import StringIO
|
|
||||||
|
|
||||||
|
|
||||||
class DocYaml(RYAML):
|
|
||||||
def _license_filter(self, data):
|
|
||||||
"""This will filter out our boilerplate license heading in return data.
|
|
||||||
|
|
||||||
The filter is used to allow documentation we're creating in variable
|
|
||||||
files to be rendered more beautifully.
|
|
||||||
"""
|
|
||||||
lines = list()
|
|
||||||
mark = True
|
|
||||||
for line in data.splitlines():
|
|
||||||
if '# Copyright' in line:
|
|
||||||
mark = False
|
|
||||||
if mark:
|
|
||||||
lines.append(line)
|
|
||||||
if '# under the License' in line:
|
|
||||||
mark = True
|
|
||||||
return '\n'.join(lines)
|
|
||||||
|
|
||||||
def dump(self, data, stream=None, **kw):
|
|
||||||
if not stream:
|
|
||||||
stream = StringIO()
|
|
||||||
try:
|
|
||||||
RYAML.dump(self, data, stream, **kw)
|
|
||||||
return self._license_filter(stream.getvalue().strip())
|
|
||||||
finally:
|
|
||||||
stream.close()
|
|
||||||
|
|
||||||
|
|
||||||
DOCYAML = DocYaml()
|
|
||||||
DOCYAML.default_flow_style = False
|
|
||||||
|
|
||||||
|
|
||||||
class AnsibleAutoPluginDirective(Directive):
|
|
||||||
directive_name = "ansibleautoplugin"
|
|
||||||
has_content = True
|
|
||||||
option_spec = {
|
|
||||||
'module': rst.directives.unchanged,
|
|
||||||
'role': rst.directives.unchanged,
|
|
||||||
'documentation': rst.directives.unchanged,
|
|
||||||
'examples': rst.directives.unchanged
|
|
||||||
}
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def _render_html(source):
|
|
||||||
return core.publish_parts(
|
|
||||||
source=source,
|
|
||||||
writer=Writer(),
|
|
||||||
writer_name='html',
|
|
||||||
settings_overrides={'no_system_messages': True}
|
|
||||||
)
|
|
||||||
|
|
||||||
def make_node(self, title, contents, content_type=None):
|
|
||||||
section = self._section_block(title=title)
|
|
||||||
if not content_type:
|
|
||||||
# Doc section
|
|
||||||
for content in contents['docs']:
|
|
||||||
for paragraph in content.split('\n'):
|
|
||||||
retnode = nodes.paragraph()
|
|
||||||
retnode.append(self._raw_html_block(data=paragraph))
|
|
||||||
section.append(retnode)
|
|
||||||
|
|
||||||
# Options Section
|
|
||||||
options_list = nodes.field_list()
|
|
||||||
options_section = self._section_block(title='Options')
|
|
||||||
for key, value in contents['options'].items():
|
|
||||||
options_list.append(
|
|
||||||
self._raw_fields(
|
|
||||||
data=value['description'],
|
|
||||||
field_name=key
|
|
||||||
)
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
options_section.append(options_list)
|
|
||||||
section.append(options_section)
|
|
||||||
|
|
||||||
# Authors Section
|
|
||||||
authors_list = nodes.field_list()
|
|
||||||
authors_list.append(
|
|
||||||
self._raw_fields(
|
|
||||||
data=contents['author']
|
|
||||||
)
|
|
||||||
)
|
|
||||||
authors_section = self._section_block(title='Authors')
|
|
||||||
authors_section.append(authors_list)
|
|
||||||
section.append(authors_section)
|
|
||||||
|
|
||||||
elif content_type == 'yaml':
|
|
||||||
for content in contents:
|
|
||||||
section.append(
|
|
||||||
self._literal_block(
|
|
||||||
data=content,
|
|
||||||
dump_data=False
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
return section
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def load_module(filename):
|
|
||||||
return imp.load_source('__ansible_module__', filename)
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def build_documentation(module):
|
|
||||||
docs = DOCYAML.load(module.DOCUMENTATION)
|
|
||||||
doc_data = dict()
|
|
||||||
doc_data['docs'] = docs['description']
|
|
||||||
doc_data['author'] = docs.get('author', list())
|
|
||||||
doc_data['options'] = docs.get('options', dict())
|
|
||||||
return doc_data
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def build_examples(module):
|
|
||||||
examples = DOCYAML.load(module.EXAMPLES)
|
|
||||||
return_examples = list()
|
|
||||||
for example in examples:
|
|
||||||
return_examples.append(DOCYAML.dump([example]))
|
|
||||||
return return_examples
|
|
||||||
|
|
||||||
def _raw_html_block(self, data):
|
|
||||||
html = self._render_html(source=data)
|
|
||||||
return nodes.raw('', html['body'], format='html')
|
|
||||||
|
|
||||||
def _raw_fields(self, data, field_name=''):
|
|
||||||
body = nodes.field_body()
|
|
||||||
if isinstance(data, list):
|
|
||||||
for item in data:
|
|
||||||
body.append(self._raw_html_block(data=item))
|
|
||||||
else:
|
|
||||||
body.append(self._raw_html_block(data=data))
|
|
||||||
|
|
||||||
field = nodes.field()
|
|
||||||
field.append(nodes.field_name(text=field_name))
|
|
||||||
field.append(body)
|
|
||||||
return field
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def _literal_block(data, language='yaml', dump_data=True):
|
|
||||||
if dump_data:
|
|
||||||
literal = nodes.literal_block(
|
|
||||||
text=DOCYAML.dump(data)
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
literal = nodes.literal_block(text=data)
|
|
||||||
literal['language'] = 'yaml'
|
|
||||||
return literal
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def _section_block(title, text=None):
|
|
||||||
section = nodes.section(
|
|
||||||
title,
|
|
||||||
nodes.title(text=title),
|
|
||||||
ids=[nodes.make_id('-'.join(title))],
|
|
||||||
)
|
|
||||||
if text:
|
|
||||||
section_body = nodes.field_body()
|
|
||||||
section_body.append(nodes.paragraph(text=text))
|
|
||||||
section.append(section_body)
|
|
||||||
|
|
||||||
return section
|
|
||||||
|
|
||||||
def _yaml_section(self, to_yaml_data, section_title, section_text=None):
|
|
||||||
yaml_section = self._section_block(
|
|
||||||
title=section_title,
|
|
||||||
text=section_text
|
|
||||||
)
|
|
||||||
yaml_section.append(self._literal_block(data=to_yaml_data))
|
|
||||||
return yaml_section
|
|
||||||
|
|
||||||
def _run_role(self, role):
|
|
||||||
section = self._section_block(
|
|
||||||
title='Role Documentation',
|
|
||||||
text='Welcome to the "{}" role documentation.'.format(
|
|
||||||
os.path.basename(role)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
defaults_file = os.path.join(role, 'defaults', 'main.yml')
|
|
||||||
if os.path.exists(defaults_file):
|
|
||||||
with open(defaults_file) as f:
|
|
||||||
role_defaults = DOCYAML.load(f.read())
|
|
||||||
section.append(
|
|
||||||
self._yaml_section(
|
|
||||||
to_yaml_data=role_defaults,
|
|
||||||
section_title='Role Defaults',
|
|
||||||
section_text='This section highlights all of the defaults'
|
|
||||||
' and variables set within the "{}"'
|
|
||||||
' role.'.format(os.path.basename(role))
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
vars_path = os.path.join(role, 'vars')
|
|
||||||
if os.path.exists(vars_path):
|
|
||||||
for v_file in os.listdir(vars_path):
|
|
||||||
vars_file = os.path.join(vars_path, v_file)
|
|
||||||
with open(vars_file) as f:
|
|
||||||
vars_values = DOCYAML.load(f.read())
|
|
||||||
section.append(
|
|
||||||
self._yaml_section(
|
|
||||||
to_yaml_data=vars_values,
|
|
||||||
section_title='Role Variables: {}'.format(v_file)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
self.run_returns.append(section)
|
|
||||||
|
|
||||||
# Document any libraries nested within the role
|
|
||||||
library_path = os.path.join(role, 'library')
|
|
||||||
if os.path.exists(library_path):
|
|
||||||
self.options['documentation'] = True
|
|
||||||
self.options['examples'] = True
|
|
||||||
for lib in os.listdir(library_path):
|
|
||||||
if lib.endswith('.py'):
|
|
||||||
self._run_module(
|
|
||||||
module=self.load_module(
|
|
||||||
filename=os.path.join(
|
|
||||||
library_path,
|
|
||||||
lib
|
|
||||||
)
|
|
||||||
),
|
|
||||||
module_title='Embedded module: {}'.format(lib),
|
|
||||||
example_title='Examples for embedded module'
|
|
||||||
)
|
|
||||||
|
|
||||||
def _run_module(self, module, module_title="Module Documentation",
|
|
||||||
example_title="Example Tasks"):
|
|
||||||
if self.options.get('documentation'):
|
|
||||||
docs = self.build_documentation(module=module)
|
|
||||||
self.run_returns.append(
|
|
||||||
self.make_node(
|
|
||||||
title=module_title,
|
|
||||||
contents=docs
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
if self.options.get('examples'):
|
|
||||||
examples = self.build_examples(module=module)
|
|
||||||
self.run_returns.append(
|
|
||||||
self.make_node(
|
|
||||||
title=example_title,
|
|
||||||
contents=examples,
|
|
||||||
content_type='yaml'
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
self.run_returns = list()
|
|
||||||
|
|
||||||
if self.options.get('module'):
|
|
||||||
module = self.load_module(filename=self.options['module'])
|
|
||||||
self._run_module(module=module)
|
|
||||||
|
|
||||||
if self.options.get('role'):
|
|
||||||
self._run_role(role=self.options['role'])
|
|
||||||
|
|
||||||
return self.run_returns
|
|
||||||
|
|
||||||
|
|
||||||
def setup(app):
|
|
||||||
classes = [
|
|
||||||
AnsibleAutoPluginDirective,
|
|
||||||
]
|
|
||||||
for directive_class in classes:
|
|
||||||
app.add_directive(directive_class.directive_name, directive_class)
|
|
||||||
|
|
||||||
return {'version': '0.2'}
|
|
@ -1,43 +0,0 @@
|
|||||||
==============
|
|
||||||
Best Practices
|
|
||||||
==============
|
|
||||||
|
|
||||||
|
|
||||||
The roles provided in this collection wrap the tripleoclient actions that are
|
|
||||||
used to deploy and manage an undercloud and overcloud. The point of these
|
|
||||||
roles is to establish a common interface for Ansible based automation.
|
|
||||||
|
|
||||||
|
|
||||||
Ansible Collection Namespace
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
tripleo-operator-ansible is an Ansible collection. In order to consume the
|
|
||||||
roles and plugins within this repository, it needs to be installed as a
|
|
||||||
collection. This repository provides the `tripleo.operator` namespace.
|
|
||||||
When writing playbooks, the usage of the `collections:` keyword
|
|
||||||
is required in order for them to be executed. See the `Ansible Collection Documentation`_
|
|
||||||
for additional details.
|
|
||||||
|
|
||||||
.. _Ansible Collection Documentation: https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#using-collections-in-a-playbook
|
|
||||||
|
|
||||||
|
|
||||||
Role Naming Convention
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
To general naming scheme for the roles provide is to take the openstackclient
|
|
||||||
command and replace `openstack` with `tripleo` and use underscores instead
|
|
||||||
of spaces. For example, `openstack overcloud deploy` becomes
|
|
||||||
`tripleo_overcloud_deploy`. The exception to this rule is when the command
|
|
||||||
itself start with `openstack tripleo`. Rather than double the `tripleo` in the
|
|
||||||
role name, we only specify it once. For example `openstack tripleo container image prepare`
|
|
||||||
is simply `tripleo_container_image_prepare`.
|
|
||||||
|
|
||||||
|
|
||||||
Variable Naming Convention
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
The variables used by each role are prefixed with the role name. For example
|
|
||||||
all roles contain a debug variable that can be used to print out the data used
|
|
||||||
when executing the specific commands. For example, `tripleo_overcloud_deploy_debug`
|
|
||||||
can be used to print out the cli command and the environment data used when
|
|
||||||
the command is executed.
|
|
@ -1,87 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
|
|
||||||
# Add the project
|
|
||||||
sys.path.insert(0, os.path.abspath('../..'))
|
|
||||||
# Add the extensions
|
|
||||||
sys.path.insert(0, os.path.join(os.path.abspath('.'), '_exts'))
|
|
||||||
|
|
||||||
# -- General configuration ----------------------------------------------------
|
|
||||||
|
|
||||||
# Add any Sphinx extension module names here, as strings. They can be
|
|
||||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
|
||||||
extensions = [
|
|
||||||
'openstackdocstheme',
|
|
||||||
'sphinx.ext.autodoc',
|
|
||||||
'ansible-autodoc'
|
|
||||||
]
|
|
||||||
|
|
||||||
# autodoc generation is a bit aggressive and a nuisance when doing heavy
|
|
||||||
# text edit cycles.
|
|
||||||
# execute "export SPHINX_DEBUG=1" in your terminal to disable
|
|
||||||
# autodoc_mock_imports = ["django"]
|
|
||||||
|
|
||||||
# The suffix of source filenames.
|
|
||||||
source_suffix = '.rst'
|
|
||||||
|
|
||||||
# The master toctree document.
|
|
||||||
master_doc = 'index'
|
|
||||||
|
|
||||||
# General information about the project.
|
|
||||||
project = u'tripleo-operator-ansible'
|
|
||||||
copyright = u'2019, OpenStack Foundation'
|
|
||||||
|
|
||||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
|
||||||
add_function_parentheses = True
|
|
||||||
|
|
||||||
# If true, the current module name will be prepended to all description
|
|
||||||
# unit titles (such as .. function::).
|
|
||||||
add_module_names = True
|
|
||||||
|
|
||||||
# The name of the Pygments (syntax highlighting) style to use.
|
|
||||||
pygments_style = 'native'
|
|
||||||
|
|
||||||
# -- Options for HTML output --------------------------------------------------
|
|
||||||
|
|
||||||
# The theme to use for HTML and HTML Help pages. Major themes that come with
|
|
||||||
# Sphinx are currently 'default' and 'sphinxdoc'.
|
|
||||||
# html_theme_path = ["."]
|
|
||||||
# html_theme = '_theme'
|
|
||||||
# html_static_path = ['static']
|
|
||||||
|
|
||||||
# Output file base name for HTML help builder.
|
|
||||||
htmlhelp_basename = '%sdoc' % project
|
|
||||||
html_theme = 'openstackdocs'
|
|
||||||
|
|
||||||
# Grouping the document tree into LaTeX files. List of tuples
|
|
||||||
# (source start file, target name, title, author, documentclass
|
|
||||||
# [howto/manual]).
|
|
||||||
latex_documents = [
|
|
||||||
('index',
|
|
||||||
'%s.tex' % project,
|
|
||||||
u'%s Documentation' % project,
|
|
||||||
u'OpenStack Foundation', 'manual'),
|
|
||||||
]
|
|
||||||
|
|
||||||
# Example configuration for intersphinx: refer to the Python standard library.
|
|
||||||
# intersphinx_mapping = {'http://docs.python.org/': None}
|
|
||||||
|
|
||||||
# openstackdocstheme options
|
|
||||||
openstackdocs_repo_name = 'openstack/tripleo-operator-ansible'
|
|
||||||
openstackdocs_auto_name = False
|
|
||||||
openstackdocs_bug_project = 'tripleo'
|
|
||||||
openstackdocs_bug_tag = 'documentation'
|
|
@ -1,26 +0,0 @@
|
|||||||
============
|
|
||||||
Contributing
|
|
||||||
============
|
|
||||||
|
|
||||||
Adding roles into this project is easy and starts with a compatible skeleton.
|
|
||||||
|
|
||||||
|
|
||||||
Create a new role manually
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
Create a new role with automation
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
Local testing of new roles
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
TBD
|
|
||||||
|
|
||||||
Contributing plugins
|
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
TBD
|
|
@ -1,19 +0,0 @@
|
|||||||
Welcome to tripleo-operator-ansible's documentation!
|
|
||||||
====================================================
|
|
||||||
|
|
||||||
Contents:
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
installation
|
|
||||||
usage
|
|
||||||
bestpractices
|
|
||||||
contributing
|
|
||||||
roles
|
|
||||||
|
|
||||||
Indices and tables
|
|
||||||
==================
|
|
||||||
|
|
||||||
* :ref:`genindex`
|
|
||||||
* :ref:`search`
|
|
@ -1,31 +0,0 @@
|
|||||||
============
|
|
||||||
Installation
|
|
||||||
============
|
|
||||||
|
|
||||||
Via Package
|
|
||||||
-----------
|
|
||||||
|
|
||||||
At the command line using `yum`.
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ yum install tripleo-operator-ansible
|
|
||||||
|
|
||||||
|
|
||||||
At the command line using `dnf`.
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ dnf install tripleo-operator-ansible
|
|
||||||
|
|
||||||
From Source
|
|
||||||
-----------
|
|
||||||
|
|
||||||
At the command line install using the ansible-galaxy command.
|
|
||||||
|
|
||||||
.. code-block:: console
|
|
||||||
|
|
||||||
$ git clone https://opendev.org/openstack/tripleo-operator-ansible
|
|
||||||
$ cd tripleo-operator-ansible
|
|
||||||
$ ansible-galaxy collection build --force --output-path ~/collections
|
|
||||||
$ ansible-galaxy collection install --force ~/collections/tripleo-operator*
|
|
@ -1,9 +0,0 @@
|
|||||||
Documented roles in tripleo-operator-ansible
|
|
||||||
============================================
|
|
||||||
|
|
||||||
Contents:
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:glob:
|
|
||||||
|
|
||||||
roles/*
|
|
@ -1,6 +0,0 @@
|
|||||||
=========================
|
|
||||||
Role - test_molecule_prep
|
|
||||||
=========================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/test_molecule_prep
|
|
@ -1,6 +0,0 @@
|
|||||||
======================================
|
|
||||||
Role - tripleo_config_generate_ansible
|
|
||||||
======================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_config_generate_ansible
|
|
@ -1,6 +0,0 @@
|
|||||||
=====================================
|
|
||||||
Role - tripleo_container_image_delete
|
|
||||||
=====================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_container_image_delete
|
|
@ -1,6 +0,0 @@
|
|||||||
===================================
|
|
||||||
Role - tripleo_container_image_list
|
|
||||||
===================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_container_image_list
|
|
@ -1,6 +0,0 @@
|
|||||||
======================================
|
|
||||||
Role - tripleo_container_image_prepare
|
|
||||||
======================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_container_image_prepare
|
|
@ -1,6 +0,0 @@
|
|||||||
==============================================
|
|
||||||
Role - tripleo_container_image_prepare_default
|
|
||||||
==============================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_container_image_prepare_default
|
|
@ -1,6 +0,0 @@
|
|||||||
===================================
|
|
||||||
Role - tripleo_container_image_push
|
|
||||||
===================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_container_image_push
|
|
@ -1,6 +0,0 @@
|
|||||||
===================================
|
|
||||||
Role - tripleo_container_image_show
|
|
||||||
===================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_container_image_show
|
|
@ -1,6 +0,0 @@
|
|||||||
=====================
|
|
||||||
Role - tripleo_deploy
|
|
||||||
=====================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_deploy
|
|
@ -1,6 +0,0 @@
|
|||||||
==============================================
|
|
||||||
Role - tripleo_overcloud_container_image_build
|
|
||||||
==============================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_overcloud_container_image_build
|
|
@ -1,6 +0,0 @@
|
|||||||
================================================
|
|
||||||
Role - tripleo_overcloud_container_image_prepare
|
|
||||||
================================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_overcloud_container_image_prepare
|
|
@ -1,6 +0,0 @@
|
|||||||
===============================
|
|
||||||
Role - tripleo_overcloud_deploy
|
|
||||||
===============================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_overcloud_deploy
|
|
@ -1,6 +0,0 @@
|
|||||||
===============================
|
|
||||||
Role - tripleo_overcloud_export
|
|
||||||
===============================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_overcloud_export
|
|
@ -1,6 +0,0 @@
|
|||||||
=================================
|
|
||||||
Role - tripleo_overcloud_failures
|
|
||||||
=================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_overcloud_failures
|
|
@ -1,6 +0,0 @@
|
|||||||
====================================
|
|
||||||
Role - tripleo_overcloud_image_build
|
|
||||||
====================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_overcloud_image_build
|
|
@ -1,6 +0,0 @@
|
|||||||
=====================================
|
|
||||||
Role - tripleo_overcloud_image_upload
|
|
||||||
=====================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_overcloud_image_upload
|
|
@ -1,6 +0,0 @@
|
|||||||
============================================
|
|
||||||
Role - tripleo_overcloud_node_bios_configure
|
|
||||||
============================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_overcloud_node_bios_configure
|
|
@ -1,6 +0,0 @@
|
|||||||
========================================
|
|
||||||
Role - tripleo_overcloud_node_bios_reset
|
|
||||||
========================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_overcloud_node_bios_reset
|
|
@ -1,6 +0,0 @@
|
|||||||
===================================
|
|
||||||
Role - tripleo_overcloud_node_clean
|
|
||||||
===================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_overcloud_node_clean
|
|
@ -1,6 +0,0 @@
|
|||||||
=======================================
|
|
||||||
Role - tripleo_overcloud_node_configure
|
|
||||||
=======================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_overcloud_node_configure
|
|
@ -1,6 +0,0 @@
|
|||||||
====================================
|
|
||||||
Role - tripleo_overcloud_node_delete
|
|
||||||
====================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_overcloud_node_delete
|
|
@ -1,6 +0,0 @@
|
|||||||
======================================
|
|
||||||
Role - tripleo_overcloud_node_discover
|
|
||||||
======================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_overcloud_node_discover
|
|
@ -1,6 +0,0 @@
|
|||||||
=================================================
|
|
||||||
Role - tripleo_overcloud_node_extract_provisioned
|
|
||||||
=================================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_overcloud_node_extract_provisioned
|
|
@ -1,6 +0,0 @@
|
|||||||
====================================
|
|
||||||
Role - tripleo_overcloud_node_import
|
|
||||||
====================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_overcloud_node_import
|
|
@ -1,6 +0,0 @@
|
|||||||
========================================
|
|
||||||
Role - tripleo_overcloud_node_introspect
|
|
||||||
========================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_overcloud_node_introspect
|
|
@ -1,6 +0,0 @@
|
|||||||
=======================================
|
|
||||||
Role - tripleo_overcloud_node_provision
|
|
||||||
=======================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_overcloud_node_provision
|
|
@ -1,6 +0,0 @@
|
|||||||
===============================
|
|
||||||
Role - tripleo_overcloud_status
|
|
||||||
===============================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_overcloud_status
|
|
@ -1,6 +0,0 @@
|
|||||||
=======================================
|
|
||||||
Role - tripleo_overcloud_update_prepare
|
|
||||||
=======================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_overcloud_update_prepare
|
|
@ -1,6 +0,0 @@
|
|||||||
===================================
|
|
||||||
Role - tripleo_overcloud_update_run
|
|
||||||
===================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_overcloud_update_run
|
|
@ -1,6 +0,0 @@
|
|||||||
====================
|
|
||||||
Role - tripleo_repos
|
|
||||||
====================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_repos
|
|
@ -1,6 +0,0 @@
|
|||||||
================================
|
|
||||||
Role - tripleo_undercloud_backup
|
|
||||||
================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_undercloud_backup
|
|
@ -1,6 +0,0 @@
|
|||||||
=================================
|
|
||||||
Role - tripleo_undercloud_install
|
|
||||||
=================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_undercloud_install
|
|
@ -1,6 +0,0 @@
|
|||||||
========================================
|
|
||||||
Role - tripleo_undercloud_minion_install
|
|
||||||
========================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_undercloud_minion_install
|
|
@ -1,6 +0,0 @@
|
|||||||
========================================
|
|
||||||
Role - tripleo_undercloud_minion_upgrade
|
|
||||||
========================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_undercloud_minion_upgrade
|
|
@ -1,6 +0,0 @@
|
|||||||
=================================
|
|
||||||
Role - tripleo_undercloud_upgrade
|
|
||||||
=================================
|
|
||||||
|
|
||||||
.. ansibleautoplugin::
|
|
||||||
:role: roles/tripleo_undercloud_upgrade
|
|
@ -1,7 +0,0 @@
|
|||||||
=====
|
|
||||||
Usage
|
|
||||||
=====
|
|
||||||
|
|
||||||
Once the tripleo-operator-ansible project has been installed navigate to the share path,
|
|
||||||
usually `/usr/share/ansible` path to access the installed roles, playbooks, and
|
|
||||||
libraries.
|
|
58
galaxy.yml
58
galaxy.yml
@ -1,58 +0,0 @@
|
|||||||
---
|
|
||||||
### REQUIRED
|
|
||||||
|
|
||||||
# The namespace of the collection. This can be a company/brand/organization or product namespace under which all
|
|
||||||
# content lives. May only contain alphanumeric characters and underscores. Additionally namespaces cannot start with
|
|
||||||
# underscores or numbers and cannot contain consecutive underscores
|
|
||||||
namespace: tripleo
|
|
||||||
|
|
||||||
# The name of the collection. Has the same character restrictions as 'namespace'
|
|
||||||
name: operator
|
|
||||||
|
|
||||||
# The version of the collection. Must be compatible with semantic versioning
|
|
||||||
version: 0.6.0
|
|
||||||
|
|
||||||
# The path to the Markdown (.md) readme file. This path is relative to the root of the collection
|
|
||||||
readme: README.md
|
|
||||||
|
|
||||||
# A list of the collection's content authors. Can be just the name or in the format 'Full Name <email> (url)
|
|
||||||
# @nicks:irc/im.site#channel'
|
|
||||||
authors:
|
|
||||||
- OpenStack Developers <openstack-discuss@lists.openstack.org>
|
|
||||||
|
|
||||||
|
|
||||||
### OPTIONAL but strongly recommended
|
|
||||||
|
|
||||||
# A short summary description of the collection
|
|
||||||
description: Collection of roles used to automate TripleO deployments
|
|
||||||
|
|
||||||
# Either a single license or a list of licenses for content inside of a collection. Ansible Galaxy currently only
|
|
||||||
# accepts L(SPDX,https://spdx.org/licenses/) licenses. This key is mutually exclusive with 'license_file'
|
|
||||||
license:
|
|
||||||
- Apache-2.0
|
|
||||||
|
|
||||||
# The path to the license file for the collection. This path is relative to the root of the collection. This key is
|
|
||||||
# mutually exclusive with 'license'
|
|
||||||
license_file: ''
|
|
||||||
|
|
||||||
# A list of tags you want to associate with the collection for indexing/searching. A tag name has the same character
|
|
||||||
# requirements as 'namespace' and 'name'
|
|
||||||
tags: ['tripleo', 'openstack']
|
|
||||||
|
|
||||||
# Collections that this collection requires to be installed for it to be usable. The key of the dict is the
|
|
||||||
# collection label 'namespace.name'. The value is a version range
|
|
||||||
# L(specifiers,https://python-semanticversion.readthedocs.io/en/latest/#requirement-specification). Multiple version
|
|
||||||
# range specifiers can be set and are separated by ','
|
|
||||||
dependencies: {}
|
|
||||||
|
|
||||||
# The URL of the originating SCM repository
|
|
||||||
repository: https://opendev.org/openstack/tripleo-operator-ansible
|
|
||||||
|
|
||||||
# The URL to any online docs
|
|
||||||
documentation: https://docs.openstack.org/tripleo-operator-ansible/latest/
|
|
||||||
|
|
||||||
# The URL to the homepage of the collection/project
|
|
||||||
homepage: https://openstack.org
|
|
||||||
|
|
||||||
# The URL to the collection issue tracker
|
|
||||||
issues: https://bugs.launchpad.net/tripleo/
|
|
@ -1,2 +0,0 @@
|
|||||||
---
|
|
||||||
requires_ansible: ">=2.8"
|
|
@ -1,7 +0,0 @@
|
|||||||
ansible-core<2.12
|
|
||||||
# molecule also has optional extras: docker, podman
|
|
||||||
molecule[test]>=3.5.0,<3.6 # MIT
|
|
||||||
oslotest
|
|
||||||
pytest-molecule>=1.3.3
|
|
||||||
# Latest release of py is 1.11.0, library which is in maintenance mode
|
|
||||||
py==1.11.0 # MIT
|
|
@ -1,15 +0,0 @@
|
|||||||
Playbooks
|
|
||||||
=========
|
|
||||||
|
|
||||||
This folder contains a set of example playbooks that do the minimum required
|
|
||||||
actions to perform specific actions. They can be used as example files to be
|
|
||||||
tailored to your specific requirements.
|
|
||||||
|
|
||||||
Examples
|
|
||||||
--------
|
|
||||||
|
|
||||||
* `container-prepare.yml` - Container prepare playbook
|
|
||||||
* `import-nodes.yml` - Baremetal node import and introspection playbook
|
|
||||||
* `overcloud-deploy.yml` - Basic overcloud deployment
|
|
||||||
* `standalone.yml` - Standalone playbook for PoC
|
|
||||||
* `undercloud.yml` - Undercloud installation playbook
|
|
@ -1,37 +0,0 @@
|
|||||||
---
|
|
||||||
###############################################################################
|
|
||||||
# Container Image Build playbook
|
|
||||||
#
|
|
||||||
# Description:
|
|
||||||
# This is a basic playbook to perform the basic container image build actions
|
|
||||||
# for TripleO containers.
|
|
||||||
#
|
|
||||||
###############################################################################
|
|
||||||
- hosts: undercloud
|
|
||||||
collections:
|
|
||||||
- tripleo.operator
|
|
||||||
vars:
|
|
||||||
build_debug: true
|
|
||||||
registry: quay.io/tripleomaster
|
|
||||||
tag: current-tripleo
|
|
||||||
|
|
||||||
tasks:
|
|
||||||
- name: Gather the rpm package facts
|
|
||||||
package_facts:
|
|
||||||
|
|
||||||
- name: Check if tripleoclient is installed
|
|
||||||
fail:
|
|
||||||
msg: >-
|
|
||||||
TripleO Client is not installed. Please make sure that the client
|
|
||||||
has been installed and the repositories are properly configured.
|
|
||||||
when: (ansible_facts.distribution_major_version|int <= 7 and not 'python2-tripleoclient' in ansible_facts.packages) or
|
|
||||||
(ansible_facts.distribution_major_version|int >= 8 and not 'python3-tripleoclient' in ansible_facts.packages)
|
|
||||||
|
|
||||||
- name: Run container image build
|
|
||||||
include_role:
|
|
||||||
name: tripleo_container_image_build
|
|
||||||
vars:
|
|
||||||
tripleo_container_image_build_debug: "{{ build_debug }}"
|
|
||||||
tripleo_container_image_build_registry: "{{ registry }}"
|
|
||||||
tripleo_container_image_build_tag: "{{ tag }}"
|
|
||||||
tripleo_container_image_build_push: true
|
|
@ -1,50 +0,0 @@
|
|||||||
---
|
|
||||||
###############################################################################
|
|
||||||
# Container preparation playbook
|
|
||||||
#
|
|
||||||
# Description:
|
|
||||||
# This is a basic playbook to perform the basic container prepare actions
|
|
||||||
# for an overcloud or undercloud deployment.
|
|
||||||
#
|
|
||||||
###############################################################################
|
|
||||||
- hosts: undercloud
|
|
||||||
collections:
|
|
||||||
- tripleo.operator
|
|
||||||
vars:
|
|
||||||
prepare_debug: true
|
|
||||||
use_default: true
|
|
||||||
default_push_destination: true
|
|
||||||
output_env_file: "{{ ansible_env.HOME }}/container-image-prepare.yaml"
|
|
||||||
prepare_env_files: []
|
|
||||||
prepare_rolefile:
|
|
||||||
|
|
||||||
tasks:
|
|
||||||
- name: Gather the rpm package facts
|
|
||||||
package_facts:
|
|
||||||
|
|
||||||
- name: Check if tripleoclient is installed
|
|
||||||
fail:
|
|
||||||
msg: >-
|
|
||||||
TripleO Client is not installed. Please make sure that the client
|
|
||||||
has been installed and the repositories are properly configured.
|
|
||||||
when: (ansible_facts.distribution_major_version|int <= 7 and not 'python2-tripleoclient' in ansible_facts.packages) or
|
|
||||||
(ansible_facts.distribution_major_version|int >= 8 and not 'python3-tripleoclient' in ansible_facts.packages)
|
|
||||||
|
|
||||||
- name: Run container image prepare defaults
|
|
||||||
include_role:
|
|
||||||
name: tripleo_container_image_prepare_default
|
|
||||||
vars:
|
|
||||||
tripleo_container_image_prepare_default_debug: "{{ prepare_debug }}"
|
|
||||||
tripleo_container_image_prepare_default_local_push_destination: "{{ default_push_destination }}"
|
|
||||||
tripleo_container_image_prepare_default_output_env_file: "{{ output_env_file }}"
|
|
||||||
when: use_default|bool
|
|
||||||
|
|
||||||
- name: Run container image prepare
|
|
||||||
include_role:
|
|
||||||
name: tripleo_overcloud_node_introspect
|
|
||||||
vars:
|
|
||||||
tripleo_container_image_prepare_debug: "{{ prepare_debug }}"
|
|
||||||
tripleo_container_image_prepare_environment_files: "{{ prepare_env_files }}"
|
|
||||||
tripleo_container_image_prepare_roles_file: "{{ prepare_roles_file }}"
|
|
||||||
tripleo_container_image_prepare_output_env_file: "{{ output_env_file }}"
|
|
||||||
when: not use_default|bool
|
|
@ -1,51 +0,0 @@
|
|||||||
---
|
|
||||||
###############################################################################
|
|
||||||
# Overcloud node import and introspection playbook
|
|
||||||
#
|
|
||||||
# Description:
|
|
||||||
# This is a basic playbook to import overcloud nodes and kick off node
|
|
||||||
# introspection.
|
|
||||||
#
|
|
||||||
###############################################################################
|
|
||||||
- hosts: undercloud
|
|
||||||
collections:
|
|
||||||
- tripleo.operator
|
|
||||||
vars:
|
|
||||||
node_debug: true
|
|
||||||
node_introspect: true
|
|
||||||
node_environment_source_json_file: environment.json
|
|
||||||
tasks:
|
|
||||||
- name: Gather the rpm package facts
|
|
||||||
package_facts:
|
|
||||||
|
|
||||||
- name: Check if tripleoclient is installed
|
|
||||||
fail:
|
|
||||||
msg: >-
|
|
||||||
TripleO Client is not installed. Please make sure that the client
|
|
||||||
has been installed and the repositories are properly configured.
|
|
||||||
when: (ansible_facts.distribution_major_version|int <= 7 and not 'python2-tripleoclient' in ansible_facts.packages) or
|
|
||||||
(ansible_facts.distribution_major_version|int >= 8 and not 'python3-tripleoclient' in ansible_facts.packages)
|
|
||||||
|
|
||||||
- name: Copy environment file to the undercloud
|
|
||||||
copy:
|
|
||||||
src: "{{ node_environment_source_json_file }}"
|
|
||||||
dest: "{{ ansible_env.HOME }}/environment.json"
|
|
||||||
owner: "{{ ansible_env.USER }}"
|
|
||||||
mode: "0600"
|
|
||||||
|
|
||||||
- name: Run node import
|
|
||||||
include_role:
|
|
||||||
name: tripleo_overcloud_node_import
|
|
||||||
vars:
|
|
||||||
tripleo_overcloud_node_import_debug: "{{ node_debug }}"
|
|
||||||
tripleo_overcloud_node_import_environment_file: "{{ ansible_env.HOME }}/environment.json"
|
|
||||||
|
|
||||||
# NOTE(mwhahaha): We can do these actions during import, not sure which is better.
|
|
||||||
- name: Run node introspection
|
|
||||||
include_role:
|
|
||||||
name: tripleo_overcloud_node_introspect
|
|
||||||
vars:
|
|
||||||
tripleo_overcloud_node_introspect_debug: "{{ node_debug }}"
|
|
||||||
tripleo_overcloud_node_introspect_all_manageable: true
|
|
||||||
tripleo_overcloud_node_introspect_provide: true
|
|
||||||
when: node_introspect|bool
|
|
@ -1,60 +0,0 @@
|
|||||||
---
|
|
||||||
###############################################################################
|
|
||||||
# Overcloud deploy playbook
|
|
||||||
#
|
|
||||||
# Description:
|
|
||||||
# This is a basic playbook to execute an overcloud deployment.
|
|
||||||
#
|
|
||||||
###############################################################################
|
|
||||||
- hosts: undercloud
|
|
||||||
collections:
|
|
||||||
- tripleo.operator
|
|
||||||
vars:
|
|
||||||
deploy_debug: true
|
|
||||||
deploy_templates: /usr/share/openstack-tripleo-heat-templates/
|
|
||||||
deploy_controller_count: 1
|
|
||||||
deploy_compute_count: 1
|
|
||||||
deploy_dns:
|
|
||||||
- 1.1.1.1
|
|
||||||
- 8.8.8.8
|
|
||||||
deploy_ntp:
|
|
||||||
- 0.pool.ntp.org
|
|
||||||
- 1.pool.ntp.org
|
|
||||||
- 2.pool.ntp.org
|
|
||||||
- 3.pool.ntp.org
|
|
||||||
deploy_env_files:
|
|
||||||
- /usr/share/openstack-tripleo-heat-templates/environments/enable-swap.yaml
|
|
||||||
- /usr/share/openstack-tripleo-heat-templates/environments/docker-ha.yaml
|
|
||||||
- "{{ ansible_env.HOME }}/container-image-prepare.yaml"
|
|
||||||
- "{{ ansible_env.HOME }}/parameters.yaml"
|
|
||||||
|
|
||||||
tasks:
|
|
||||||
- name: Gather the rpm package facts
|
|
||||||
package_facts:
|
|
||||||
|
|
||||||
- name: Check if tripleoclient is installed
|
|
||||||
fail:
|
|
||||||
msg: >-
|
|
||||||
TripleO Client is not installed. Please make sure that the client
|
|
||||||
has been installed and the repositories are properly configured.
|
|
||||||
when: (ansible_facts.distribution_major_version|int <= 7 and not 'python2-tripleoclient' in ansible_facts.packages) or
|
|
||||||
(ansible_facts.distribution_major_version|int >= 8 and not 'python3-tripleoclient' in ansible_facts.packages)
|
|
||||||
|
|
||||||
- name: Generate parameters.yaml
|
|
||||||
copy:
|
|
||||||
content: |
|
|
||||||
parameter_defaults:
|
|
||||||
ControllerCount: {{ deploy_controller_count | default(1) }}
|
|
||||||
ComputeCount: {{ deploy_compute_count | default(1) }}
|
|
||||||
DnsServers: {{ deploy_dns }}
|
|
||||||
NtpServer: {{ deploy_ntp }}
|
|
||||||
dest: "{{ ansible_env.HOME }}/parameters.yaml"
|
|
||||||
mode: '0644'
|
|
||||||
|
|
||||||
- name: Run overcloud deployment
|
|
||||||
include_role:
|
|
||||||
name: tripleo_overcloud_deploy
|
|
||||||
vars:
|
|
||||||
tripleo_overcloud_deploy_debug: "{{ deploy_debug }}"
|
|
||||||
tripleo_overcloud_deploy_environment_files: "{{ deploy_env_files }}"
|
|
||||||
tripleo_overcloud_deploy_templates: "{{ deploy_templates }}"
|
|
@ -1,67 +0,0 @@
|
|||||||
---
|
|
||||||
###############################################################################
|
|
||||||
# Perform overcloud image build and/or uploads
|
|
||||||
#
|
|
||||||
# Description:
|
|
||||||
# This is a basic playbook that can be used to build and/or upload overcloud
|
|
||||||
# images into the undercloud. This playbook assumes that the repositories
|
|
||||||
# are already configured on the undercloud and checks that the tripleoclient
|
|
||||||
# is installed.
|
|
||||||
#
|
|
||||||
###############################################################################
|
|
||||||
- hosts: undercloud
|
|
||||||
gather_facts: true
|
|
||||||
collections:
|
|
||||||
- tripleo.operator
|
|
||||||
vars:
|
|
||||||
images_debug: true
|
|
||||||
build_images: true
|
|
||||||
upload_images: true
|
|
||||||
tripleo_overcloud_image_build_output_directory: "{{ ansible_env.HOME }}/images"
|
|
||||||
tripleo_overcloud_image_build_dib_yum_repo_conf: "/etc/yum.repos.d/*"
|
|
||||||
tripleo_overcloud_image_build_extra_env_vars: {}
|
|
||||||
tripleo_overcloud_image_upload_update_existing: true
|
|
||||||
|
|
||||||
tasks:
|
|
||||||
- name: Gather the rpm package facts
|
|
||||||
package_facts:
|
|
||||||
|
|
||||||
- name: Check if tripleoclient is installed
|
|
||||||
fail:
|
|
||||||
msg: >-
|
|
||||||
TripleO Client is not installed. Please make sure that the client
|
|
||||||
has been installed and the repositories are properly configured.
|
|
||||||
when: (ansible_facts.distribution_major_version|int <= 7 and not 'python2-tripleoclient' in ansible_facts.packages) or
|
|
||||||
(ansible_facts.distribution_major_version|int >= 8 and not 'python3-tripleoclient' in ansible_facts.packages)
|
|
||||||
|
|
||||||
- name: Set distribution variables
|
|
||||||
set_fact:
|
|
||||||
distro_name: "{{ (ansible_facts.distribution == 'RedHat') | ternary('rhel', 'centos') }}"
|
|
||||||
distro_version: "{{ ansible_facts.distribution_major_version | int }}"
|
|
||||||
images_version: "{{ (ansible_facts.distribution_major_version|int >= 8) | ternary('-python3', '') }}"
|
|
||||||
|
|
||||||
- name: Ensure image folder exists
|
|
||||||
file:
|
|
||||||
path: "{{ tripleo_overcloud_image_build_output_directory }}"
|
|
||||||
state: directory
|
|
||||||
mode: '0755'
|
|
||||||
owner: "{{ ansible_env.USER }}"
|
|
||||||
|
|
||||||
- name: Build images
|
|
||||||
include_role:
|
|
||||||
name: tripleo_overcloud_image_build
|
|
||||||
vars:
|
|
||||||
tripleo_overcloud_image_build_debug: "{{ images_debug }}"
|
|
||||||
tripleo_overcloud_image_build_config_files:
|
|
||||||
- /usr/share/openstack-tripleo-common/image-yaml/overcloud-images{{ images_version }}.yaml
|
|
||||||
- /usr/share/openstack-tripleo-common/image-yaml/overcloud-images-{{ distro_name }}{{ distro_version }}.yaml
|
|
||||||
when: build_images|bool
|
|
||||||
|
|
||||||
- name: Upload images
|
|
||||||
include_role:
|
|
||||||
name: tripleo_overcloud_image_upload
|
|
||||||
vars:
|
|
||||||
tripleo_overcloud_image_upload_debug: "{{ images_debug }}"
|
|
||||||
tripleo_overcloud_image_upload_os_cloud: undercloud
|
|
||||||
tripleo_overcloud_image_upload_image_path: "{{ tripleo_overcloud_image_build_output_directory }}"
|
|
||||||
when: upload_images|bool
|
|
@ -1,93 +0,0 @@
|
|||||||
---
|
|
||||||
###############################################################################
|
|
||||||
# Overcloud post-installation playbook
|
|
||||||
#
|
|
||||||
# Description:
|
|
||||||
# This is a basic playbook to execute post-installation tasks.
|
|
||||||
|
|
||||||
###############################################################################
|
|
||||||
|
|
||||||
- hosts: undercloud
|
|
||||||
collections:
|
|
||||||
- tripleo.operator
|
|
||||||
vars:
|
|
||||||
flavors:
|
|
||||||
- name: m1.tiny
|
|
||||||
ram: 512
|
|
||||||
disk: 0
|
|
||||||
vcpus: 1
|
|
||||||
- name: m1.smaller
|
|
||||||
ram: 1024
|
|
||||||
disk: 0
|
|
||||||
vcpus: 1
|
|
||||||
- name: m1.small
|
|
||||||
ram: 2048
|
|
||||||
disk: 10
|
|
||||||
vcpus: 1
|
|
||||||
- name: m1.medium
|
|
||||||
ram: 3072
|
|
||||||
disk: 10
|
|
||||||
vcpus: 2
|
|
||||||
- name: m1.large
|
|
||||||
ram: 8192
|
|
||||||
disk: 10
|
|
||||||
vcpus: 4
|
|
||||||
- name: m1.xlarge
|
|
||||||
ram: 8192
|
|
||||||
disk: 10
|
|
||||||
vcpus: 8
|
|
||||||
networks:
|
|
||||||
- name: public
|
|
||||||
state: present
|
|
||||||
gateway_ip: 10.1.1.1
|
|
||||||
subnet_range: 10.1.1.0/24
|
|
||||||
external: true
|
|
||||||
- name: provider
|
|
||||||
state: present
|
|
||||||
gateway_ip: 10.9.101.254
|
|
||||||
subnet_range: 10.9.101.0/24
|
|
||||||
external: true
|
|
||||||
- name: private
|
|
||||||
state: present
|
|
||||||
gateway_ip: 10.1.2.1
|
|
||||||
subnet_range: 10.1.2.0/24
|
|
||||||
external: false
|
|
||||||
|
|
||||||
stack_name: overcloud
|
|
||||||
|
|
||||||
gather_facts: true
|
|
||||||
tasks:
|
|
||||||
- name: Get overcloud status
|
|
||||||
import_role:
|
|
||||||
name: tripleo_overcloud_status
|
|
||||||
|
|
||||||
- name: Run all overcloud post installation tasks if conditions are met.
|
|
||||||
block:
|
|
||||||
- name: Create flavor
|
|
||||||
os_nova_flavor:
|
|
||||||
state: present
|
|
||||||
name: "{{ item.name }}"
|
|
||||||
ram: "{{ item.ram }}"
|
|
||||||
vcpus: "{{ item.vcpus }}"
|
|
||||||
disk: "{{ item.disk }}"
|
|
||||||
cloud: "{{ stack_name }}"
|
|
||||||
with_items: "{{ flavors }}"
|
|
||||||
|
|
||||||
- name: Create networks
|
|
||||||
os_network:
|
|
||||||
state: present
|
|
||||||
name: "{{ item.name }}-network"
|
|
||||||
external: "{{ item.external }}"
|
|
||||||
cloud: "{{ stack_name }}"
|
|
||||||
with_items: "{{ networks }}"
|
|
||||||
|
|
||||||
- name: Create subnet
|
|
||||||
os_subnet:
|
|
||||||
state: present
|
|
||||||
network_name: "{{ item.name }}-network"
|
|
||||||
name: "{{ item.name }}-subnet"
|
|
||||||
cidr: "{{ item.subnet_range }}"
|
|
||||||
gateway_ip: "{{ item.gateway_ip }}"
|
|
||||||
cloud: "{{ stack_name }}"
|
|
||||||
with_items: "{{ networks }}"
|
|
||||||
when: tripleo_overcloud_status_output | regex_search('DEPLOY_SUCCESS')
|
|
@ -1,113 +0,0 @@
|
|||||||
---
|
|
||||||
###############################################################################
|
|
||||||
# Standalone installation playbook
|
|
||||||
#
|
|
||||||
# Description:
|
|
||||||
# This is a basic playbook to run a simple standalone node deploymend on an
|
|
||||||
# existing provisioned system.
|
|
||||||
#
|
|
||||||
###############################################################################
|
|
||||||
- hosts: standalone
|
|
||||||
collections:
|
|
||||||
- tripleo.operator
|
|
||||||
vars:
|
|
||||||
standalone_debug: true
|
|
||||||
standalone_dns:
|
|
||||||
- 1.1.1.1
|
|
||||||
- 8.8.8.8
|
|
||||||
standalone_hostname: 'standalone.localdomain'
|
|
||||||
standalone_ip: 192.168.24.2
|
|
||||||
standalone_control_virtual_ip: 192.168.24.3
|
|
||||||
standalone_cidr: 24
|
|
||||||
standalone_gateway:
|
|
||||||
standalone_local_mtu: 1400
|
|
||||||
standalone_local_interface: eth1
|
|
||||||
standalone_enable_selinux: false
|
|
||||||
standalone_virt_type: qemu
|
|
||||||
|
|
||||||
tasks:
|
|
||||||
- name: Set hostname
|
|
||||||
hostname:
|
|
||||||
name: "{{ standalone_hostname }}"
|
|
||||||
become: true
|
|
||||||
|
|
||||||
- name: Configure tripleo repositories
|
|
||||||
include_role:
|
|
||||||
name: tripleo_repos
|
|
||||||
vars:
|
|
||||||
tripleo_repos_debug: "{{ standalone_debug }}"
|
|
||||||
when:
|
|
||||||
- ansible_facts.distribution == 'CentOS'
|
|
||||||
|
|
||||||
- name: Ensure system is up to date
|
|
||||||
yum:
|
|
||||||
name: '*'
|
|
||||||
state: latest # noqa 403
|
|
||||||
register: packages_updated
|
|
||||||
become: true
|
|
||||||
|
|
||||||
- name: Reboot if necessary
|
|
||||||
reboot:
|
|
||||||
become: true
|
|
||||||
when: packages_updated is changed
|
|
||||||
|
|
||||||
- name: Install tripleoclient
|
|
||||||
block:
|
|
||||||
- name: install python2 tripleoclient
|
|
||||||
yum:
|
|
||||||
name: python-tripleoclient
|
|
||||||
state: installed
|
|
||||||
become: true
|
|
||||||
when: ansible_facts.distribution_major_version|int <= 7
|
|
||||||
|
|
||||||
- name: install python3 tripleoclient
|
|
||||||
package:
|
|
||||||
name: python3-tripleoclient
|
|
||||||
state: present
|
|
||||||
become: true
|
|
||||||
when: ansible_facts.distribution_major_version|int >= 8
|
|
||||||
|
|
||||||
- name: Generate parameters.yaml
|
|
||||||
copy:
|
|
||||||
content: |
|
|
||||||
parameter_defaults:
|
|
||||||
CloudName: {{ standalone_hostname }}
|
|
||||||
{% if standalone_gateway | default(False) -%}
|
|
||||||
ControlPlaneStaticRoutes:
|
|
||||||
- ip_netmask: 0.0.0.0/0
|
|
||||||
next_hop: {{ standalone_gateway }}
|
|
||||||
default: true
|
|
||||||
{% endif -%}
|
|
||||||
Debug: {{ standalone_debug|bool }}
|
|
||||||
DeploymentUser: {{ ansible_env.USER }}
|
|
||||||
DnsServers: {{ standalone_dns }}
|
|
||||||
KernelIpNonLocalBind: 1
|
|
||||||
NeutronPublicInterface: {{ standalone_local_interface }}
|
|
||||||
NeutronBridgeMappings: datacenter:br-ctlplane
|
|
||||||
NeutronPhysicalBridge: br-ctlplane
|
|
||||||
StandaloneEnableRoutedNetworks: false
|
|
||||||
StandaloneHomeDir: {{ ansible_env.HOME }}
|
|
||||||
InterfaceLocalMtu: {{ standalone_local_mtu }}
|
|
||||||
NovaComputeLibvirtType: {{ standalone_virt_type }}
|
|
||||||
dest: "{{ ansible_env.HOME }}/parameters.yaml"
|
|
||||||
mode: '0644'
|
|
||||||
|
|
||||||
- name: Generate ContainerImagePrepare
|
|
||||||
include_role:
|
|
||||||
name: tripleo_container_image_prepare_default
|
|
||||||
vars:
|
|
||||||
tripleo_container_image_prepare_default_output_env_file: "{{ ansible_env.HOME }}/container-image-prepare.yaml"
|
|
||||||
|
|
||||||
- name: Run standalone deployment
|
|
||||||
include_role:
|
|
||||||
name: tripleo_deploy
|
|
||||||
vars:
|
|
||||||
tripleo_deploy_debug: "{{ standalone_debug }}"
|
|
||||||
tripleo_deploy_templates: /usr/share/openstack-tripleo-heat-templates
|
|
||||||
tripleo_deploy_local_ip: "{{ standalone_ip }}/{{ standalone_cidr }}"
|
|
||||||
tripleo_deploy_roles_file: /usr/share/openstack-tripleo-heat-templates/roles/Standalone.yaml
|
|
||||||
tripleo_deploy_environment_files:
|
|
||||||
- /usr/share/openstack-tripleo-heat-templates/environments/standalone/standalone-tripleo.yaml
|
|
||||||
- "{{ ansible_env.HOME }}/container-image-prepare.yaml"
|
|
||||||
- "{{ ansible_env.HOME }}/parameters.yaml"
|
|
||||||
tripleo_deploy_output_dir: "{{ ansible_env.HOME }}"
|
|
@ -1,104 +0,0 @@
|
|||||||
---
|
|
||||||
###############################################################################
|
|
||||||
# Undercloud installation playbook
|
|
||||||
#
|
|
||||||
# Description:
|
|
||||||
# This is a basic playbook to install a simple undercloud on an already
|
|
||||||
# provisioned system.
|
|
||||||
#
|
|
||||||
###############################################################################
|
|
||||||
- hosts: undercloud
|
|
||||||
collections:
|
|
||||||
- tripleo.operator
|
|
||||||
vars:
|
|
||||||
install_debug: true
|
|
||||||
undercloud_hostname: 'undercloud.localdomain'
|
|
||||||
undercloud_local_mtu: 1400
|
|
||||||
undercloud_local_interface: eth1
|
|
||||||
undercloud_enable_selinux: false
|
|
||||||
|
|
||||||
tasks:
|
|
||||||
- name: Set hostname
|
|
||||||
hostname:
|
|
||||||
name: "{{ undercloud_hostname }}"
|
|
||||||
become: true
|
|
||||||
|
|
||||||
- name: Configure tripleo repositories
|
|
||||||
include_role:
|
|
||||||
name: tripleo_repos
|
|
||||||
when:
|
|
||||||
- ansible_facts.distribution == 'CentOS'
|
|
||||||
|
|
||||||
- name: Ensure system is up to date
|
|
||||||
yum:
|
|
||||||
name: '*'
|
|
||||||
state: latest # noqa 403
|
|
||||||
register: packages_updated
|
|
||||||
become: true
|
|
||||||
|
|
||||||
- name: Reboot if necessary
|
|
||||||
reboot:
|
|
||||||
become: true
|
|
||||||
when: packages_updated is changed
|
|
||||||
|
|
||||||
- name: Install tripleoclient
|
|
||||||
block:
|
|
||||||
- name: install python2 tripleoclient
|
|
||||||
yum:
|
|
||||||
name: python-tripleoclient
|
|
||||||
state: installed
|
|
||||||
become: true
|
|
||||||
when: ansible_facts.distribution_major_version|int <= 7
|
|
||||||
|
|
||||||
- name: install python3 tripleoclient
|
|
||||||
package:
|
|
||||||
name: python3-tripleoclient
|
|
||||||
state: present
|
|
||||||
become: true
|
|
||||||
when: ansible_facts.distribution_major_version|int >= 8
|
|
||||||
|
|
||||||
- name: Copy sample undercloud.conf
|
|
||||||
copy:
|
|
||||||
src: /usr/share/python-tripleoclient/undercloud.conf.sample
|
|
||||||
dest: "{{ ansible_env.HOME }}/undercloud.conf"
|
|
||||||
remote_src: true
|
|
||||||
mode: '0644'
|
|
||||||
|
|
||||||
- name: Configure undercloud.conf
|
|
||||||
ini_file:
|
|
||||||
path: "{{ ansible_env.HOME }}/undercloud.conf"
|
|
||||||
section: "{{ item.section }}"
|
|
||||||
option: "{{ item.option }}"
|
|
||||||
value: "{{ item.value }}"
|
|
||||||
mode: '0644'
|
|
||||||
loop:
|
|
||||||
- {'section': 'DEFAULT', 'option': 'undercloud_debug', 'value': "{{ install_debug }}"}
|
|
||||||
- {'section': 'DEFAULT', 'option': 'local_mtu', 'value': "{{ undercloud_local_mtu }}"}
|
|
||||||
- {'section': 'DEFAULT', 'option': 'local_interface', 'value': "{{ undercloud_local_interface }}"}
|
|
||||||
- {'section': 'DEFAULT', 'option': 'undercloud_enable_selinux', 'value': "{{ undercloud_enable_selinux }}"}
|
|
||||||
- {'section': 'ctlplane-subnet', 'option': 'masquerade', 'value': 'true'}
|
|
||||||
|
|
||||||
# Example configuration copy/modification with config_template module
|
|
||||||
# (https://opendev.org/openstack/ansible-config_template)
|
|
||||||
#
|
|
||||||
# - name: Configure undercloud.conf
|
|
||||||
# config_template:
|
|
||||||
# src: /usr/share/python-tripleoclient/undercloud.conf.sample
|
|
||||||
# dest: "{{ ansible_env.HOME }}/undercloud.conf"
|
|
||||||
# remote_src: true
|
|
||||||
# render_template: false
|
|
||||||
# config_type: ini
|
|
||||||
# config_overrides:
|
|
||||||
# 'DEFAULT':
|
|
||||||
# undercloud_debug: "{{ install_debug }}"
|
|
||||||
# local_mtu: "{{ undercloud_local_mtu }}"
|
|
||||||
# local_interface: "{{ undercloud_local_interface }}"
|
|
||||||
# undercloud_enable_selinux: "{{ undercloud_enable_selinux }}"
|
|
||||||
# 'ctlplane-subnet':
|
|
||||||
# masquerade: true
|
|
||||||
|
|
||||||
- name: Install undercloud
|
|
||||||
include_role:
|
|
||||||
name: tripleo_undercloud_install
|
|
||||||
vars:
|
|
||||||
tripleo_undercloud_install_debug: "{{ install_debug }}"
|
|
@ -1,31 +0,0 @@
|
|||||||
# Collections Plugins Directory
|
|
||||||
|
|
||||||
This directory can be used to ship various plugins inside an Ansible collection. Each plugin is placed in a folder that
|
|
||||||
is named after the type of plugin it is in. It can also include the `module_utils` and `modules` directory that
|
|
||||||
would contain module utils and modules respectively.
|
|
||||||
|
|
||||||
Here is an example directory of the majority of plugins currently supported by Ansible:
|
|
||||||
|
|
||||||
```
|
|
||||||
└── plugins
|
|
||||||
├── action
|
|
||||||
├── become
|
|
||||||
├── cache
|
|
||||||
├── callback
|
|
||||||
├── cliconf
|
|
||||||
├── connection
|
|
||||||
├── filter
|
|
||||||
├── httpapi
|
|
||||||
├── inventory
|
|
||||||
├── lookup
|
|
||||||
├── module_utils
|
|
||||||
├── modules
|
|
||||||
├── netconf
|
|
||||||
├── shell
|
|
||||||
├── strategy
|
|
||||||
├── terminal
|
|
||||||
├── test
|
|
||||||
└── vars
|
|
||||||
```
|
|
||||||
|
|
||||||
A full list of plugin types can be found at [Working With Plugins](https://docs.ansible.com/ansible/2.9/plugins/plugins.html).
|
|
@ -1,164 +0,0 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# 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.
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
from ansible.errors import AnsibleActionFail
|
|
||||||
from ansible.errors import AnsibleActionSkip
|
|
||||||
from ansible.module_utils.parsing.convert_bool import boolean
|
|
||||||
from ansible.plugins.action import ActionBase
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
import yaml
|
|
||||||
|
|
||||||
ANSIBLE_METADATA = {
|
|
||||||
'metadata_version': '1.1',
|
|
||||||
'status': ['preview'],
|
|
||||||
'supported_by': 'community'
|
|
||||||
}
|
|
||||||
|
|
||||||
DOCUMENTATION = """
|
|
||||||
module: timestamp_file
|
|
||||||
author:
|
|
||||||
- "Alex Schultz (@mwhahaha)"
|
|
||||||
version_added: '2.9'
|
|
||||||
short_description: Take a copy of a file and append a timestamp
|
|
||||||
notes: []
|
|
||||||
description:
|
|
||||||
- Take a copy of a file and append a timestamp
|
|
||||||
requirements:
|
|
||||||
- None
|
|
||||||
options:
|
|
||||||
path:
|
|
||||||
description:
|
|
||||||
- Path to file
|
|
||||||
type: str
|
|
||||||
remove:
|
|
||||||
description:
|
|
||||||
- Remove original file
|
|
||||||
default: False
|
|
||||||
type: bool
|
|
||||||
force:
|
|
||||||
description:
|
|
||||||
- Overwrite destination file if it exists
|
|
||||||
default: False
|
|
||||||
type: bool
|
|
||||||
date_format:
|
|
||||||
description:
|
|
||||||
- Timestamp format to use when appending to destination file
|
|
||||||
default: "%Y-%m-%d_%H:%M:%S"
|
|
||||||
type: str
|
|
||||||
"""
|
|
||||||
EXAMPLES = """
|
|
||||||
- name: Snapshot a file
|
|
||||||
timestamp_file:
|
|
||||||
path: /tmp/file.log
|
|
||||||
- name: Snapshot a file and remove original
|
|
||||||
timestamp_file:
|
|
||||||
path: /tmp/file.log
|
|
||||||
remove: True
|
|
||||||
"""
|
|
||||||
RETURN = """
|
|
||||||
dest:
|
|
||||||
description: Path to the new file
|
|
||||||
returned: if changed
|
|
||||||
type: str
|
|
||||||
sample: "/tmp/file.log.2017-07-27_16:39:00"
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class ActionModule(ActionBase):
|
|
||||||
|
|
||||||
_VALID_ARGS = yaml.safe_load(DOCUMENTATION)['options']
|
|
||||||
|
|
||||||
def _get_args(self):
|
|
||||||
missing = []
|
|
||||||
args = {}
|
|
||||||
|
|
||||||
for option, vals in self._VALID_ARGS.items():
|
|
||||||
if 'default' not in vals:
|
|
||||||
if self._task.args.get(option, None) is None:
|
|
||||||
missing.append(option)
|
|
||||||
continue
|
|
||||||
args[option] = self._task.args.get(option)
|
|
||||||
else:
|
|
||||||
args[option] = self._task.args.get(option, vals['default'])
|
|
||||||
|
|
||||||
if missing:
|
|
||||||
raise AnsibleActionFail('Missing required parameters: {}'.format(
|
|
||||||
', '.join(missing)))
|
|
||||||
return args
|
|
||||||
|
|
||||||
def _get_date_string(self, date_format):
|
|
||||||
return datetime.now().strftime(date_format)
|
|
||||||
|
|
||||||
def run(self, tmp=None, task_vars=None):
|
|
||||||
if task_vars is None:
|
|
||||||
task_vars = dict()
|
|
||||||
result = super(ActionModule, self).run(tmp, task_vars)
|
|
||||||
del tmp
|
|
||||||
# parse args
|
|
||||||
args = self._get_args()
|
|
||||||
|
|
||||||
changed = False
|
|
||||||
src_path = args['path']
|
|
||||||
|
|
||||||
# check if source file exists
|
|
||||||
file_stat = self._execute_module(
|
|
||||||
module_name='stat',
|
|
||||||
module_args=dict(path=src_path),
|
|
||||||
task_vars=task_vars
|
|
||||||
)
|
|
||||||
timestamp = self._get_date_string(args['date_format'])
|
|
||||||
dest_path = '.'.join([src_path, timestamp])
|
|
||||||
if file_stat.get('stat', {}).get('exists', False) is False:
|
|
||||||
# file doesn't exist so we're done
|
|
||||||
raise AnsibleActionSkip("{} does not exist.".format(src_path))
|
|
||||||
|
|
||||||
# check if destination file exists
|
|
||||||
file_stat = self._execute_module(
|
|
||||||
module_name='stat',
|
|
||||||
module_args=dict(path=dest_path),
|
|
||||||
task_vars=task_vars
|
|
||||||
)
|
|
||||||
if (not args['force']
|
|
||||||
and file_stat.get('stat', {}).get('exists', False) is True):
|
|
||||||
raise AnsibleActionFail("Destination file {} exists. Use force "
|
|
||||||
"option to proceed.".format(dest_path))
|
|
||||||
|
|
||||||
# copy file out of the way
|
|
||||||
copy_result = self._execute_module(
|
|
||||||
module_name='copy',
|
|
||||||
module_args=dict(src=src_path, dest=dest_path, remote_src=True),
|
|
||||||
task_vars=task_vars
|
|
||||||
)
|
|
||||||
if copy_result.get('failed', False):
|
|
||||||
return copy_result
|
|
||||||
changed = True
|
|
||||||
|
|
||||||
if boolean(args.get('remove', False), strict=False):
|
|
||||||
# cleanup original file as requested
|
|
||||||
file_result = self._execute_module(
|
|
||||||
module_name='file',
|
|
||||||
module_args=dict(path=src_path, state='absent'),
|
|
||||||
task_vars=task_vars
|
|
||||||
)
|
|
||||||
if file_result.get('failed', False):
|
|
||||||
return file_result
|
|
||||||
|
|
||||||
result['dest'] = copy_result['dest']
|
|
||||||
result['changed'] = changed
|
|
||||||
return result
|
|
@ -1,51 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
try: # py3
|
|
||||||
from shlex import quote
|
|
||||||
except ImportError: # py2
|
|
||||||
from pipes import quote
|
|
||||||
|
|
||||||
|
|
||||||
class FilterModule(object):
|
|
||||||
def filters(self):
|
|
||||||
return {
|
|
||||||
'shell_arg_list': self.shell_arg_list
|
|
||||||
}
|
|
||||||
|
|
||||||
def _add_to_list(self, list_item, arg, parameter):
|
|
||||||
val = quote(arg)
|
|
||||||
if parameter:
|
|
||||||
list_item.append("{} {}".format(parameter, val))
|
|
||||||
else:
|
|
||||||
list_item.append(val)
|
|
||||||
|
|
||||||
def shell_arg_list(self, arg, parameter=None):
|
|
||||||
# Nothing was passed into this, just return an empty string
|
|
||||||
if not arg:
|
|
||||||
return ''
|
|
||||||
if not isinstance(arg, (list, tuple)):
|
|
||||||
arg = [arg]
|
|
||||||
return_value = []
|
|
||||||
for a in arg:
|
|
||||||
if isinstance(a, str) and a.strip():
|
|
||||||
self._add_to_list(return_value, a, parameter)
|
|
||||||
elif isinstance(a, (list, tuple)):
|
|
||||||
# Deal with nested list items.
|
|
||||||
for item in a:
|
|
||||||
if item.strip():
|
|
||||||
self._add_to_list(return_value, item, parameter)
|
|
||||||
return ' '.join(return_value)
|
|
@ -1,144 +0,0 @@
|
|||||||
#!/usr/bin/python
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
# Copyright 2020 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.
|
|
||||||
__metaclass__ = type
|
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
|
||||||
|
|
||||||
import os
|
|
||||||
import yaml
|
|
||||||
|
|
||||||
try: # py3
|
|
||||||
from shlex import quote
|
|
||||||
except ImportError: # py2
|
|
||||||
from pipes import quote
|
|
||||||
|
|
||||||
ANSIBLE_METADATA = {
|
|
||||||
'metadata_version': '1.1',
|
|
||||||
'status': ['preview'],
|
|
||||||
'supported_by': 'community'
|
|
||||||
}
|
|
||||||
|
|
||||||
DOCUMENTATION = """
|
|
||||||
---
|
|
||||||
module: tripleo_shell_script
|
|
||||||
author:
|
|
||||||
- Alex Schultz <aschultz@redhat.com>
|
|
||||||
version_added: '2.8'
|
|
||||||
short_description: Writes out a shell script with environment vars and command
|
|
||||||
notes: []
|
|
||||||
description:
|
|
||||||
- This module will write out a bash script from a shell environment dict
|
|
||||||
and a commandline string.
|
|
||||||
options:
|
|
||||||
dest:
|
|
||||||
description:
|
|
||||||
- Destination file path for the output shell script.
|
|
||||||
required: True
|
|
||||||
type: str
|
|
||||||
shell_command:
|
|
||||||
description:
|
|
||||||
- Shell command that will be run
|
|
||||||
required: True
|
|
||||||
type: str
|
|
||||||
shell_environment:
|
|
||||||
description:
|
|
||||||
- Environment dictionary for the shell execution.
|
|
||||||
default: {}
|
|
||||||
required: False
|
|
||||||
type: dict
|
|
||||||
"""
|
|
||||||
|
|
||||||
EXAMPLES = """
|
|
||||||
- name: Undercloud install
|
|
||||||
tripleo_shell_script:
|
|
||||||
dest: /home/stack/undercloud_install.sh
|
|
||||||
shell_command: "/usr/bin/openstack undercloud install"
|
|
||||||
shell_environment: {}
|
|
||||||
- name: Image upload
|
|
||||||
tripleo_shell_script:
|
|
||||||
dest: /home/stack/overcloud_image_upload.sh
|
|
||||||
shell_command: "/usr/bin/openstack overcloud image upload"
|
|
||||||
shell_environment:
|
|
||||||
OS_CLOUD: undercloud
|
|
||||||
"""
|
|
||||||
|
|
||||||
RETURN = """
|
|
||||||
"""
|
|
||||||
|
|
||||||
_SHELL_HEADER = """#!/bin/bash
|
|
||||||
# This file is managed by ansible
|
|
||||||
set -xeo pipefail
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class TripleoShellScript(object):
|
|
||||||
"""Notes about this module.
|
|
||||||
|
|
||||||
This module will write out a bash script from the provided parameters.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, module, results):
|
|
||||||
|
|
||||||
self.module = module
|
|
||||||
self.results = results
|
|
||||||
|
|
||||||
# parse args
|
|
||||||
args = self.module.params
|
|
||||||
|
|
||||||
# Set parameters
|
|
||||||
dest = args['dest']
|
|
||||||
shell_command = args['shell_command']
|
|
||||||
shell_environment = args.get('shell_environment', {})
|
|
||||||
|
|
||||||
if os.path.exists(dest):
|
|
||||||
self.module.debug('File exists, truncating %s' % dest)
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(dest, 'w') as fh:
|
|
||||||
fh.write(_SHELL_HEADER)
|
|
||||||
for k, v in shell_environment.items():
|
|
||||||
if v:
|
|
||||||
val = quote(str(v))
|
|
||||||
fh.write("export %(key)s=%(val)s\n" % {'key': k,
|
|
||||||
'val': val})
|
|
||||||
fh.write(shell_command)
|
|
||||||
fh.write("\n")
|
|
||||||
os.chmod(dest, 0o755)
|
|
||||||
self.results['changed'] = True
|
|
||||||
except Exception as e:
|
|
||||||
self.results['failed'] = True
|
|
||||||
self.results['error'] = str(e)
|
|
||||||
self.results['msg'] = ("Unable to output shell script %s: %s" % (
|
|
||||||
dest, e))
|
|
||||||
|
|
||||||
self.module.exit_json(**self.results)
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
module = AnsibleModule(
|
|
||||||
argument_spec=yaml.safe_load(DOCUMENTATION)['options'],
|
|
||||||
supports_check_mode=False
|
|
||||||
)
|
|
||||||
results = dict(
|
|
||||||
changed=False
|
|
||||||
)
|
|
||||||
TripleoShellScript(module, results)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
main()
|
|
@ -1,270 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
# 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.
|
|
||||||
#
|
|
||||||
|
|
||||||
# If extensions (or modules to document with autodoc) are in another directory,
|
|
||||||
# add these directories to sys.path here. If the directory is relative to the
|
|
||||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
|
||||||
#sys.path.insert(0, os.path.abspath('.'))
|
|
||||||
|
|
||||||
# -- General configuration ------------------------------------------------
|
|
||||||
|
|
||||||
# If your documentation needs a minimal Sphinx version, state it here.
|
|
||||||
#needs_sphinx = '1.0'
|
|
||||||
|
|
||||||
# Add any Sphinx extension module names here, as strings. They can be
|
|
||||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
|
||||||
# ones.
|
|
||||||
extensions = [
|
|
||||||
'openstackdocstheme',
|
|
||||||
'reno.sphinxext',
|
|
||||||
]
|
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
|
||||||
templates_path = ['_templates']
|
|
||||||
|
|
||||||
# The suffix of source filenames.
|
|
||||||
source_suffix = '.rst'
|
|
||||||
|
|
||||||
# The encoding of source files.
|
|
||||||
#source_encoding = 'utf-8-sig'
|
|
||||||
|
|
||||||
# The master toctree document.
|
|
||||||
master_doc = 'index'
|
|
||||||
|
|
||||||
# General information about the project.
|
|
||||||
project = u'tripleo-operator-ansible Release Notes'
|
|
||||||
copyright = u'2020, TripleO Developers'
|
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
|
||||||
# |version| and |release|, also used in various other places throughout the
|
|
||||||
# built documents.
|
|
||||||
#
|
|
||||||
# The full version, including alpha/beta/rc tags.
|
|
||||||
release = ''
|
|
||||||
# The short X.Y version.
|
|
||||||
version = ''
|
|
||||||
|
|
||||||
# The full version, including alpha/beta/rc tags.
|
|
||||||
|
|
||||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
|
||||||
# for a list of supported languages.
|
|
||||||
#language = None
|
|
||||||
|
|
||||||
# There are two options for replacing |today|: either, you set today to some
|
|
||||||
# non-false value, then it is used:
|
|
||||||
#today = ''
|
|
||||||
# Else, today_fmt is used as the format for a strftime call.
|
|
||||||
#today_fmt = '%B %d, %Y'
|
|
||||||
|
|
||||||
# List of patterns, relative to source directory, that match files and
|
|
||||||
# directories to ignore when looking for source files.
|
|
||||||
exclude_patterns = []
|
|
||||||
|
|
||||||
# The reST default role (used for this markup: `text`) to use for all
|
|
||||||
# documents.
|
|
||||||
#default_role = None
|
|
||||||
|
|
||||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
|
||||||
#add_function_parentheses = True
|
|
||||||
|
|
||||||
# If true, the current module name will be prepended to all description
|
|
||||||
# unit titles (such as .. function::).
|
|
||||||
#add_module_names = True
|
|
||||||
|
|
||||||
# If true, sectionauthor and moduleauthor directives will be shown in the
|
|
||||||
# output. They are ignored by default.
|
|
||||||
#show_authors = False
|
|
||||||
|
|
||||||
# The name of the Pygments (syntax highlighting) style to use.
|
|
||||||
pygments_style = 'native'
|
|
||||||
|
|
||||||
# A list of ignored prefixes for module index sorting.
|
|
||||||
#modindex_common_prefix = []
|
|
||||||
|
|
||||||
# If true, keep warnings as "system message" paragraphs in the built documents.
|
|
||||||
#keep_warnings = False
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for HTML output ----------------------------------------------
|
|
||||||
|
|
||||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
|
||||||
# a list of builtin themes.
|
|
||||||
html_theme = 'openstackdocs'
|
|
||||||
|
|
||||||
# Theme options are theme-specific and customize the look and feel of a theme
|
|
||||||
# further. For a list of options available for each theme, see the
|
|
||||||
# documentation.
|
|
||||||
#html_theme_options = {}
|
|
||||||
|
|
||||||
# Add any paths that contain custom themes here, relative to this directory.
|
|
||||||
#html_theme_path = []
|
|
||||||
|
|
||||||
# The name for this set of Sphinx documents. If None, it defaults to
|
|
||||||
# "<project> v<release> documentation".
|
|
||||||
#html_title = None
|
|
||||||
|
|
||||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
|
||||||
#html_short_title = None
|
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top
|
|
||||||
# of the sidebar.
|
|
||||||
#html_logo = None
|
|
||||||
|
|
||||||
# The name of an image file (within the static path) to use as favicon of the
|
|
||||||
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
|
||||||
# pixels large.
|
|
||||||
#html_favicon = None
|
|
||||||
|
|
||||||
# Add any paths that contain custom static files (such as style sheets) here,
|
|
||||||
# relative to this directory. They are copied after the builtin static files,
|
|
||||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
|
||||||
html_static_path = ['_static']
|
|
||||||
|
|
||||||
# Add any extra paths that contain custom files (such as robots.txt or
|
|
||||||
# .htaccess) here, relative to this directory. These files are copied
|
|
||||||
# directly to the root of the documentation.
|
|
||||||
#html_extra_path = []
|
|
||||||
|
|
||||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
|
||||||
# using the given strftime format.
|
|
||||||
#html_last_updated_fmt = '%b %d, %Y'
|
|
||||||
|
|
||||||
# If true, SmartyPants will be used to convert quotes and dashes to
|
|
||||||
# typographically correct entities.
|
|
||||||
#html_use_smartypants = True
|
|
||||||
|
|
||||||
# Custom sidebar templates, maps document names to template names.
|
|
||||||
#html_sidebars = {}
|
|
||||||
|
|
||||||
# Additional templates that should be rendered to pages, maps page names to
|
|
||||||
# template names.
|
|
||||||
#html_additional_pages = {}
|
|
||||||
|
|
||||||
# If false, no module index is generated.
|
|
||||||
#html_domain_indices = True
|
|
||||||
|
|
||||||
# If false, no index is generated.
|
|
||||||
#html_use_index = True
|
|
||||||
|
|
||||||
# If true, the index is split into individual pages for each letter.
|
|
||||||
#html_split_index = False
|
|
||||||
|
|
||||||
# If true, links to the reST sources are added to the pages.
|
|
||||||
#html_show_sourcelink = True
|
|
||||||
|
|
||||||
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
|
||||||
#html_show_sphinx = True
|
|
||||||
|
|
||||||
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
|
||||||
#html_show_copyright = True
|
|
||||||
|
|
||||||
# If true, an OpenSearch description file will be output, and all pages will
|
|
||||||
# contain a <link> tag referring to it. The value of this option must be the
|
|
||||||
# base URL from which the finished HTML is served.
|
|
||||||
#html_use_opensearch = ''
|
|
||||||
|
|
||||||
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
|
||||||
#html_file_suffix = None
|
|
||||||
|
|
||||||
# Output file base name for HTML help builder.
|
|
||||||
htmlhelp_basename = 'tripleo-operator-ansibleReleaseNotesdoc'
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for LaTeX output ---------------------------------------------
|
|
||||||
|
|
||||||
latex_elements = {
|
|
||||||
# The paper size ('letterpaper' or 'a4paper').
|
|
||||||
#'papersize': 'letterpaper',
|
|
||||||
|
|
||||||
# The font size ('10pt', '11pt' or '12pt').
|
|
||||||
#'pointsize': '10pt',
|
|
||||||
|
|
||||||
# Additional stuff for the LaTeX preamble.
|
|
||||||
#'preamble': '',
|
|
||||||
}
|
|
||||||
|
|
||||||
# Grouping the document tree into LaTeX files. List of tuples
|
|
||||||
# (source start file, target name, title,
|
|
||||||
# author, documentclass [howto, manual, or own class]).
|
|
||||||
latex_documents = [
|
|
||||||
('index', 'tripleo-operator-ansibleReleaseNotes.tex', u'tripleo-operator-ansible Release Notes Documentation',
|
|
||||||
u'2020, TripleO Developers', 'manual'),
|
|
||||||
]
|
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top of
|
|
||||||
# the title page.
|
|
||||||
#latex_logo = None
|
|
||||||
|
|
||||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
|
||||||
# not chapters.
|
|
||||||
#latex_use_parts = False
|
|
||||||
|
|
||||||
# If true, show page references after internal links.
|
|
||||||
#latex_show_pagerefs = False
|
|
||||||
|
|
||||||
# If true, show URL addresses after external links.
|
|
||||||
#latex_show_urls = False
|
|
||||||
|
|
||||||
# Documents to append as an appendix to all manuals.
|
|
||||||
#latex_appendices = []
|
|
||||||
|
|
||||||
# If false, no module index is generated.
|
|
||||||
#latex_domain_indices = True
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for manual page output ---------------------------------------
|
|
||||||
|
|
||||||
# One entry per manual page. List of tuples
|
|
||||||
# (source start file, name, description, authors, manual section).
|
|
||||||
man_pages = [
|
|
||||||
('index', 'tripleo-operator-ansiblereleasenotes', u'tripleo-operator-ansible Release Notes Documentation',
|
|
||||||
[u'2020, TripleO Developers'], 1)
|
|
||||||
]
|
|
||||||
|
|
||||||
# If true, show URL addresses after external links.
|
|
||||||
#man_show_urls = False
|
|
||||||
|
|
||||||
|
|
||||||
# -- Options for Texinfo output -------------------------------------------
|
|
||||||
|
|
||||||
# Grouping the document tree into Texinfo files. List of tuples
|
|
||||||
# (source start file, target name, title, author,
|
|
||||||
# dir menu entry, description, category)
|
|
||||||
texinfo_documents = [
|
|
||||||
('index', 'tripleo-operator-ansibleReleaseNotes', u'tripleo-operator-ansible Release Notes Documentation',
|
|
||||||
u'2020, TripleO Developers', 'tripleo-operator-ansibleReleaseNotes', 'One line description of project.',
|
|
||||||
'Miscellaneous'),
|
|
||||||
]
|
|
||||||
|
|
||||||
# Documents to append as an appendix to all manuals.
|
|
||||||
#texinfo_appendices = []
|
|
||||||
|
|
||||||
# If false, no module index is generated.
|
|
||||||
#texinfo_domain_indices = True
|
|
||||||
|
|
||||||
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
|
||||||
#texinfo_show_urls = 'footnote'
|
|
||||||
|
|
||||||
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
|
||||||
#texinfo_no_detailmenu = False
|
|
||||||
|
|
||||||
# -- Options for Internationalization output ------------------------------
|
|
||||||
locale_dirs = ['locale/']
|
|
||||||
|
|
||||||
# openstackdocstheme options
|
|
||||||
openstackdocs_repo_name = 'openstack/tripleo-operator-ansible'
|
|
||||||
openstackdocs_auto_name = False
|
|
||||||
openstackdocs_bug_project = 'tripleo'
|
|
||||||
openstackdocs_bug_tag = 'documentation'
|
|
@ -1,18 +0,0 @@
|
|||||||
==================================================
|
|
||||||
Welcome to tripleo-operator-ansible Release Notes!
|
|
||||||
==================================================
|
|
||||||
|
|
||||||
Contents
|
|
||||||
========
|
|
||||||
|
|
||||||
.. toctree::
|
|
||||||
:maxdepth: 2
|
|
||||||
|
|
||||||
unreleased
|
|
||||||
|
|
||||||
|
|
||||||
Indices and tables
|
|
||||||
==================
|
|
||||||
|
|
||||||
* :ref:`genindex`
|
|
||||||
* :ref:`search`
|
|
@ -1,5 +0,0 @@
|
|||||||
============================
|
|
||||||
Current Series Release Notes
|
|
||||||
============================
|
|
||||||
|
|
||||||
.. release-notes::
|
|
@ -1,94 +0,0 @@
|
|||||||
tripleo-operator-ansible roles
|
|
||||||
==============================
|
|
||||||
|
|
||||||
These roles wrap tripleo cli functions for use in automation.
|
|
||||||
|
|
||||||
Requirements
|
|
||||||
------------
|
|
||||||
|
|
||||||
None.
|
|
||||||
|
|
||||||
Global Variables
|
|
||||||
----------------
|
|
||||||
|
|
||||||
Accross the roles, there are a few variables that can be defined and would be
|
|
||||||
consumed by default.
|
|
||||||
|
|
||||||
* `tripleo_os_cloud`: (String) OS_CLOUD name to use when a command requires authentication. By default this will be used to populate any role specific os_cloud variable that may be defined. If this is defined, it will take precedence over `tripleo_rc_file`.
|
|
||||||
* `tripleo_rc_file`: (String) File path on the remote system that contains the authentication environment variables that will be used to perform actions that require authentication.
|
|
||||||
|
|
||||||
Dependencies
|
|
||||||
------------
|
|
||||||
|
|
||||||
None.
|
|
||||||
|
|
||||||
Example Playbooks
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
Example undercloud installation
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
---
|
|
||||||
- hosts: undercloud
|
|
||||||
gather_facts: true
|
|
||||||
collections:
|
|
||||||
- tripleo.operator
|
|
||||||
tasks:
|
|
||||||
- name: Create dummy interface
|
|
||||||
command: ip link add prov type dummy
|
|
||||||
become: true
|
|
||||||
when: not 'prov' in ansible_facts.interfaces
|
|
||||||
|
|
||||||
- name: Set hostname
|
|
||||||
hostname:
|
|
||||||
name: 'undercloud.localdomain'
|
|
||||||
become: true
|
|
||||||
|
|
||||||
- name: Configure tripleo repositories
|
|
||||||
import_role:
|
|
||||||
name: tripleo_repos
|
|
||||||
|
|
||||||
- name: Install python2 tripleoclient
|
|
||||||
package:
|
|
||||||
name: python2-tripleoclient
|
|
||||||
state: present
|
|
||||||
become: true
|
|
||||||
when: ansible_distribution_major_version|int <= 7
|
|
||||||
|
|
||||||
- name: Install python3 tripleoclient
|
|
||||||
package:
|
|
||||||
name: python3-tripleoclient
|
|
||||||
state: present
|
|
||||||
become: true
|
|
||||||
when: ansible_distribution_major_version|int >= 8
|
|
||||||
|
|
||||||
# This uses https://opendev.org/openstack/ansible-config_template
|
|
||||||
- name: Generate undercloud.conf
|
|
||||||
become: True
|
|
||||||
config_template:
|
|
||||||
src: /usr/share/python-tripleoclient/undercloud.conf.sample
|
|
||||||
dest: "{{ ansible_env.HOME }}/undercloud.conf"
|
|
||||||
remote_src: true
|
|
||||||
render_template: false
|
|
||||||
config_overrides:
|
|
||||||
'DEFAULT':
|
|
||||||
undercloud_debug: true
|
|
||||||
enable_telemetry: false
|
|
||||||
local_mtu: 1400
|
|
||||||
local_interface: prov
|
|
||||||
undercloud_enable_selinux: false
|
|
||||||
'ctlplane-subnet':
|
|
||||||
masquerade: true
|
|
||||||
config_type: ini
|
|
||||||
|
|
||||||
- name: Install undercloud
|
|
||||||
import_role:
|
|
||||||
name: tripleo_undercloud_install
|
|
||||||
vars:
|
|
||||||
tripleo_undercloud_install_debug: true
|
|
||||||
```
|
|
||||||
|
|
||||||
License
|
|
||||||
-------
|
|
||||||
|
|
||||||
Apache-2.0
|
|
@ -1,44 +0,0 @@
|
|||||||
test_molecule_prep
|
|
||||||
==================
|
|
||||||
|
|
||||||
A role to do collection install for molecule testing. The role assumes it's being
|
|
||||||
run from a molecule path.
|
|
||||||
|
|
||||||
Requirements
|
|
||||||
------------
|
|
||||||
|
|
||||||
None.
|
|
||||||
|
|
||||||
Role Variables
|
|
||||||
--------------
|
|
||||||
|
|
||||||
* `test_module_prep_collections_build_root`: (String) Path a directory to output the collection build to. Default: "{{ ansible_env.HOME }}/collection-buildroot"
|
|
||||||
* `test_module_prep_execution_root`: (String) Path to the directory where the build action should run in. Default: '../../../..'
|
|
||||||
|
|
||||||
Output Variables
|
|
||||||
----------------
|
|
||||||
|
|
||||||
None.
|
|
||||||
|
|
||||||
Dependencies
|
|
||||||
------------
|
|
||||||
|
|
||||||
None.
|
|
||||||
|
|
||||||
Example Playbook
|
|
||||||
----------------
|
|
||||||
|
|
||||||
Example install execution playbook
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- hosts: localhost
|
|
||||||
tasks:
|
|
||||||
- name: Do molecule prep actions
|
|
||||||
import_role:
|
|
||||||
name: test_molecule_prep
|
|
||||||
```
|
|
||||||
|
|
||||||
License
|
|
||||||
-------
|
|
||||||
|
|
||||||
Apache-2.0
|
|
@ -1,4 +0,0 @@
|
|||||||
---
|
|
||||||
# defaults file for test_molecule_prep
|
|
||||||
test_molecule_prep_collections_build_root: "{{ ansible_env.HOME }}/collection-buildroot"
|
|
||||||
test_molecule_prep_execution_root: "../../../.."
|
|
@ -1,44 +0,0 @@
|
|||||||
---
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
|
|
||||||
galaxy_info:
|
|
||||||
role_name: test_molecule_prep
|
|
||||||
namespace: openstack
|
|
||||||
author: OpenStack
|
|
||||||
description: TripleO Operator Role -- test_molecule_prep
|
|
||||||
company: Red Hat
|
|
||||||
license: Apache-2.0
|
|
||||||
min_ansible_version: 2.8
|
|
||||||
#
|
|
||||||
# Provide a list of supported platforms, and for each platform a list of versions.
|
|
||||||
# If you don't wish to enumerate all versions for a particular platform, use 'all'.
|
|
||||||
# To view available platforms and versions (or releases), visit:
|
|
||||||
# https://galaxy.ansible.com/api/v1/platforms/
|
|
||||||
#
|
|
||||||
platforms:
|
|
||||||
- name: CentOS
|
|
||||||
versions:
|
|
||||||
- 7
|
|
||||||
- 8
|
|
||||||
|
|
||||||
galaxy_tags:
|
|
||||||
- tripleo
|
|
||||||
|
|
||||||
|
|
||||||
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
|
|
||||||
# if you add dependencies to this list.
|
|
||||||
dependencies: []
|
|
@ -1,13 +0,0 @@
|
|||||||
---
|
|
||||||
- name: Converge
|
|
||||||
hosts: all
|
|
||||||
tasks:
|
|
||||||
|
|
||||||
- name: Test known collection filter
|
|
||||||
set_fact:
|
|
||||||
test_var: "{{ 'test' | tripleo.operator.shell_arg_list(parameter='--test') }}"
|
|
||||||
|
|
||||||
- name: Assert value
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- test_var == "--test test"
|
|
@ -1,19 +0,0 @@
|
|||||||
---
|
|
||||||
driver:
|
|
||||||
name: delegated
|
|
||||||
options:
|
|
||||||
managed: false
|
|
||||||
ansible_connection_options:
|
|
||||||
ansible_connection: local
|
|
||||||
log: true
|
|
||||||
platforms:
|
|
||||||
- name: instance
|
|
||||||
provisioner:
|
|
||||||
name: ansible
|
|
||||||
scenario:
|
|
||||||
name: default
|
|
||||||
test_sequence:
|
|
||||||
- syntax
|
|
||||||
- prepare
|
|
||||||
- converge
|
|
||||||
- verify
|
|
@ -1,8 +0,0 @@
|
|||||||
---
|
|
||||||
- name: Prepare
|
|
||||||
hosts: all
|
|
||||||
tasks:
|
|
||||||
|
|
||||||
- name: Include molecule prep
|
|
||||||
include_role:
|
|
||||||
name: test_molecule_prep
|
|
@ -1,12 +0,0 @@
|
|||||||
---
|
|
||||||
- name: Build collection
|
|
||||||
shell: >-
|
|
||||||
pwd && ansible-galaxy collection build --force --output-path {{ test_molecule_prep_collections_build_root }}
|
|
||||||
args:
|
|
||||||
chdir: "{{ test_molecule_prep_execution_root }}"
|
|
||||||
changed_when: true
|
|
||||||
|
|
||||||
- name: Install collection
|
|
||||||
shell: >-
|
|
||||||
ansible-galaxy collection install --force {{ test_molecule_prep_collections_build_root }}/tripleo-operator*
|
|
||||||
changed_when: true
|
|
@ -1 +0,0 @@
|
|||||||
localhost
|
|
@ -1,4 +0,0 @@
|
|||||||
---
|
|
||||||
- hosts: localhost
|
|
||||||
roles:
|
|
||||||
- test_molecule_prep
|
|
@ -1,92 +0,0 @@
|
|||||||
tripleo_ceph_deploy
|
|
||||||
=====================
|
|
||||||
|
|
||||||
A role to deploy Ceph on overcloud nodes before deploying the overcloud.
|
|
||||||
|
|
||||||
Requirements
|
|
||||||
------------
|
|
||||||
|
|
||||||
None.
|
|
||||||
|
|
||||||
Role Variables
|
|
||||||
--------------
|
|
||||||
|
|
||||||
* `tripleo_ceph_deploy_become`: (Boolean) Execute command with escalated privileges. Default: false
|
|
||||||
* `tripleo_ceph_deploy_cluster`: (String) Name of the Ceph cluster. If set to 'foo', then the files /etc/ceph/<FSID>/foo.conf and /etc/ceph/<FSID>/foo.client.admin.keyring will be created. Otherwise these files will use the name 'ceph'. Changing this means changing command line calls too, e.g. 'ceph health' will become 'ceph --cluster foo health' unless export CEPH_ARGS='--cluster foo' is used. If unset `openenstack overcloud ceph deploy` will default this value to 'ceph'.
|
|
||||||
* `tripleo_ceph_deploy_crush_hierarchy`: (String) Path to an existing crush hierarchy spec file.
|
|
||||||
* `tripleo_ceph_deploy_debug`: (Boolean) Flag to print out the command that is run. Default: false
|
|
||||||
* `tripleo_ceph_deploy_deployed_baremetal`: (String) Path to the environment file output from "openstack overcloud node provision". This argument may be excluded only if tripleo_ceph_deploy_standalone is True.
|
|
||||||
* `tripleo_ceph_deploy_spec`: (String) Path to an existing Ceph spec file. If not provided a spec will be generated automatically based on `tripleo_ceph_deploy_roles_file` and `tripleo_ceph_deploy_deployed_baremetal`. The `tripleo_ceph_deploy_deployed_baremetal` parameter is optional only if `tripleo_ceph_deploy_spec` is used.
|
|
||||||
* `tripleo_ceph_user_ssh_user`: (String) Name of the SSH user used by cephadm. Warning: if this option is used, it must be used consistently for every 'openstack overcloud ceph' call. Defaults to 'ceph-admin'. (default=Env: CEPHADM_SSH_USER)
|
|
||||||
* `tripleo_ceph_deploy_generate_scripts_only`: (Boolean) Do not run the actual command - to be used in conjunction with `tripleo_ceph_deploy_generate_scripts`. By default uses the value of `tripleo_generate_scripts_only` or False if `tripleo_generate_scripts_only` is not defined.
|
|
||||||
* `tripleo_ceph_deploy_generate_scripts`: (Boolean) Write out a shell script that can be used to reproduce the command being executed. By default uses the value of `tripleo_generate_scripts` or False if `tripleo_generate_scripts` is not defined.
|
|
||||||
* `tripleo_ceph_deploy_mon_ip`: (String) IP address of the first Ceph monitor. If not set, an IP from the Ceph public_network of a server with the mon label from the Ceph spec is used. IP must already be active on server. Only supported if tripleo_ceph_deploy_standalone is True.
|
|
||||||
* `tripleo_ceph_deploy_osd_spec`: (String) Path to an existing OSD spec file. When the Ceph spec file is generated its OSD spec defaults to {data_devices: {all: true}} for all service_type osd. Use this parameter to override the data_devices value inside the Ceph spec file.
|
|
||||||
* `tripleo_ceph_deploy_overwrite`: (Boolean) Flag to skip yes/no prompts about overwriting the deployed_ceph.yaml from a previous run. Default: false
|
|
||||||
* `tripleo_ceph_deploy_poll`: (Integer) Number of seconds to wait between each checks to see if the deployment command has completed. Default: 10
|
|
||||||
* `tripleo_ceph_deploy_roles_file`: (String) Path to an alternative roles_data.yaml. Used to decide which node gets which Ceph mon, mgr, or osd service based on the node's role and `tripleo_ceph_deploy_deployed_baremetal`.
|
|
||||||
* `tripleo_ceph_deploy_stack`: Name or ID of heat stack. Used to find the working directory. If unset `openenstack overcloud ceph deploy` will default this value to 'overcloud'.
|
|
||||||
* `tripleo_ceph_deploy_standalone`: (Boolean) Use single host Ansible inventory. Used only for development or testing environments. Used for single server development or testing environments. Default: false
|
|
||||||
* `tripleo_ceph_deploy_timeout_arg`: (Integer) Number in minutes for the deployment to run. Default: 90
|
|
||||||
* `tripleo_ceph_deploy_timeout`: (Integer) Number in seconds to wait for the ansible execution of the deployment command to finish. This should be larger than the `tripleo_ceph_deploy_timeout_arg` value. Default: 5700
|
|
||||||
* `tripleo_ceph_deploy_working_dir`: (String) The working directory for the deployment where all input, output, and generated files will be stored. Defaults to "$HOME/overcloud-deploy/<stack>"
|
|
||||||
* `tripleo_ceph_deploy_output:`: (String) The path to the output environment file describing the Ceph deployment to pass to the overcloud deployment.
|
|
||||||
* `tripleo_ceph_deploy_skip_user_create`: (Boolean) Do not create the cephadm SSH user. This user is necessary to deploy but may be created in a separate step via 'openstack overcloud ceph user enable'. Default: false
|
|
||||||
* `tripleo_ceph_deploy_skip_hosts_config`: (Boolean) Do not update /etc/hosts on deployed servers. By default this is configured so overcloud nodes can reach each other and the undercloud by name. Default: false
|
|
||||||
* `tripleo_ceph_deploy_skip_container_registry_config`: (Boolean) Do not update /etc/containers/registries.conf on deployed servers. By default this is configured so overcloud nodes can pull containers from the undercloud registry. Default: false
|
|
||||||
* `tripleo_ceph_deploy_network_data`: (String) Path to an alternative network_data.yaml. Used to define Ceph public_network and cluster_network. This file is searched for networks with name_lower values of storage and storage_mgmt. If none found, then search repeats but with service_net_map_replace in place of name_lower. Use `tripleo_ceph_deploy_public_network_name` or `tripleo_ceph_deploy_cluster_network_name` options to override name of the searched for network from storage or storage_mgmt to a customized name. If network_data has no storage networks, both default to ctlplane. If found network has >1 subnet, they are all combined (for routed traffic). If a network has ipv6 true, then the ipv6_subnet is retrieved instead of the ip_subnet, and the Ceph global ms_bind_ipv4 is set false and the ms_bind_ipv6 is set true. Use `tripleo_ceph_deploy_config` to override these defaults if desired.
|
|
||||||
* `tripleo_ceph_deploy_public_network_name`: (String) Name of the network defined in `tripleo_ceph_deploy_network_data` which should be used for the Ceph public_network. If undefined the client defaults this value to 'storage'.
|
|
||||||
* `tripleo_ceph_deploy_cluster_network_name`: (String) Name of the network defined in `tripleo_ceph_deploy_network_data` which should be used for the Ceph cluster_network. If undefined the client defaults this value to 'storage_mgmt'.
|
|
||||||
* `tripleo_ceph_deploy_config`: (String) Path to an existing ceph.conf with settings to be assimilated by the new cluster via 'cephadm bootstrap --config'
|
|
||||||
* `tripleo_ceph_deploy_cephadm_extra_args`: (String) String of extra parameters to pass cephadm. E.g. if this parameter is set to '--log-to-file --skip-prepare-host', then cephadm boostrap will use those options. Warning: requires `tripleo_ceph_deploy_force` to be true as not all possible options ensure a functional deployment.
|
|
||||||
* `tripleo_ceph_deploy_force`: (Boolean) Run command regardless of consequences. Default: false
|
|
||||||
* `tripleo_ceph_deploy_ceph_vip`: (String) Path to an existing Ceph services/network mapping file.
|
|
||||||
* `tripleo_ceph_deploy_daemons`: (String) Path to an existing Ceph daemon options definition.
|
|
||||||
* `tripleo_ceph_deploy_single_host_defaults`: (Boolean) Adjust configuration defaults to suit a single-host Ceph cluster. Default: false
|
|
||||||
* `tripleo_ceph_deploy_container_image_prepare`: (String) Path to an alternative container_image_prepare_defaults.yaml. Used to control which Ceph container is pulled by cephadm via the ceph_namespace, ceph_image, and ceph_tag variables in addition to registry authentication via ContainerImageRegistryCredentials.
|
|
||||||
* `tripleo_ceph_deploy_container_cephadm_default`: (Boolean) Use the default continer defined in cephadm instead of container_image_prepare_defaults.yaml. If this is used, 'cephadm bootstrap' is not passed the --image parameter. Default: false
|
|
||||||
* `tripleo_ceph_deploy_container_namespace`: (String) Override the namespace value set via `tripleo_ceph_deploy_continer_image_prepare`. E.g. quay.io/ceph.
|
|
||||||
* `tripleo_ceph_deploy_container_image`: (String) Override the image value set via `tripleo_ceph_deploy_continer_image_prepare`. E.g. ceph.
|
|
||||||
* `tripleo_ceph_deploy_container_tag`: (String) Override the tag value set via `tripleo_ceph_deploy_continer_image_prepare`. E.g. latest.
|
|
||||||
* `tripleo_ceph_deploy_container_registry_url`: (String) Override the registry URL value set via `tripleo_ceph_deploy_continer_image_prepare`.
|
|
||||||
* `tripleo_ceph_deploy_container_registry_username`: (String) Override the registry username value set via `tripleo_ceph_deploy_continer_image_prepare`.
|
|
||||||
* `tripleo_ceph_deploy_container_registry_password`: (String) Override the registry password value set via `tripleo_ceph_deploy_continer_image_prepare`.
|
|
||||||
|
|
||||||
|
|
||||||
Output Variables
|
|
||||||
----------------
|
|
||||||
|
|
||||||
* `tripleo_ceph_deploy_output`: (String) The command standard output.
|
|
||||||
* `tripleo_ceph_deploy_result`: (String) Ansible shell execution results
|
|
||||||
|
|
||||||
|
|
||||||
Dependencies
|
|
||||||
------------
|
|
||||||
|
|
||||||
None.
|
|
||||||
|
|
||||||
Example Playbook
|
|
||||||
----------------
|
|
||||||
|
|
||||||
Example ceph spec playbook
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- hosts: undercloud
|
|
||||||
gather_facts: true
|
|
||||||
tasks:
|
|
||||||
- name: Deploy Ceph using 'openstack overcloud node provision' output
|
|
||||||
include_role:
|
|
||||||
name: tripleo_ceph_deploy
|
|
||||||
vars:
|
|
||||||
tripleo_ceph_deploy_debug: True
|
|
||||||
tripleo_ceph_deploy_generate_scripts: True
|
|
||||||
tripleo_ceph_deploy_overwrite: True
|
|
||||||
tripleo_ceph_deploy_stack: overcloud
|
|
||||||
tripleo_ceph_deploy_roles_file: /home/stack/custom_roles.yaml
|
|
||||||
tripleo_ceph_deploy_deployed_baremetal: /home/stack/overcloud-baremetal-deployed.yaml
|
|
||||||
```
|
|
||||||
|
|
||||||
License
|
|
||||||
-------
|
|
||||||
|
|
||||||
Apache-2.0
|
|
@ -1,46 +0,0 @@
|
|||||||
---
|
|
||||||
openstack_bin: openstack
|
|
||||||
tripleo_ceph_deploy_become: false
|
|
||||||
tripleo_ceph_deploy_cluster:
|
|
||||||
tripleo_ceph_deploy_crush_hierarchy:
|
|
||||||
tripleo_ceph_deploy_debug: false
|
|
||||||
tripleo_ceph_deploy_deployed_baremetal:
|
|
||||||
tripleo_ceph_deploy_spec:
|
|
||||||
tripleo_ceph_deploy_generate_scripts: "{{ tripleo_generate_scripts | default(False) }}"
|
|
||||||
tripleo_ceph_deploy_generate_scripts_only: "{{ tripleo_generate_scripts_only | default(False) }}"
|
|
||||||
tripleo_ceph_deploy_mon_ip:
|
|
||||||
tripleo_ceph_deploy_osd_spec:
|
|
||||||
tripleo_ceph_deploy_overwrite: false
|
|
||||||
tripleo_ceph_deploy_poll: 10
|
|
||||||
tripleo_ceph_deploy_roles_file:
|
|
||||||
tripleo_ceph_user_ssh_user: ceph-admin
|
|
||||||
tripleo_ceph_deploy_stack:
|
|
||||||
tripleo_ceph_deploy_standalone: false
|
|
||||||
tripleo_ceph_deploy_timeout: 5700
|
|
||||||
tripleo_ceph_deploy_timeout_arg: 90
|
|
||||||
tripleo_ceph_deploy_working_dir:
|
|
||||||
tripleo_ceph_deploy_output:
|
|
||||||
tripleo_ceph_deploy_skip_user_create: false
|
|
||||||
tripleo_ceph_deploy_skip_hosts_config: false
|
|
||||||
tripleo_ceph_deploy_skip_container_registry_config: false
|
|
||||||
tripleo_ceph_deploy_skip_ntp: false
|
|
||||||
tripleo_ceph_deploy_network_data:
|
|
||||||
tripleo_ceph_deploy_public_network_name:
|
|
||||||
tripleo_ceph_deploy_cluster_network_name:
|
|
||||||
tripleo_ceph_deploy_config:
|
|
||||||
tripleo_ceph_deploy_cephadm_extra_args:
|
|
||||||
tripleo_ceph_deploy_force: false
|
|
||||||
tripleo_ceph_deploy_ceph_vip:
|
|
||||||
tripleo_ceph_deploy_daemons:
|
|
||||||
tripleo_ceph_deploy_single_host_defaults: false
|
|
||||||
tripleo_ceph_deploy_ntp_server:
|
|
||||||
tripleo_ceph_deploy_ntp_heat_env_file:
|
|
||||||
tripleo_ceph_deploy_with_ntp: false
|
|
||||||
tripleo_ceph_deploy_container_cephadm_default: false
|
|
||||||
tripleo_ceph_deploy_container_image_prepare:
|
|
||||||
tripleo_ceph_deploy_container_namespace:
|
|
||||||
tripleo_ceph_deploy_container_image:
|
|
||||||
tripleo_ceph_deploy_container_tag:
|
|
||||||
tripleo_ceph_deploy_container_registry_url:
|
|
||||||
tripleo_ceph_deploy_container_registry_username:
|
|
||||||
tripleo_ceph_deploy_container_registry_password:
|
|
@ -1,45 +0,0 @@
|
|||||||
---
|
|
||||||
# Copyright 2022 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.
|
|
||||||
|
|
||||||
|
|
||||||
galaxy_info:
|
|
||||||
role_name: tripleo_ceph_deploy
|
|
||||||
namespace: openstack
|
|
||||||
author: OpenStack
|
|
||||||
description: TripleO Operator Role -- tripleo_ceph_deploy
|
|
||||||
company: Red Hat
|
|
||||||
license: Apache-2.0
|
|
||||||
min_ansible_version: 2.8
|
|
||||||
#
|
|
||||||
# Provide a list of supported platforms, and for each platform a list of versions.
|
|
||||||
# If you don't wish to enumerate all versions for a particular platform, use 'all'.
|
|
||||||
# To view available platforms and versions (or releases), visit:
|
|
||||||
# https://galaxy.ansible.com/api/v1/platforms/
|
|
||||||
#
|
|
||||||
platforms:
|
|
||||||
- name: CentOS
|
|
||||||
versions:
|
|
||||||
- 7
|
|
||||||
- 8
|
|
||||||
- 9
|
|
||||||
|
|
||||||
galaxy_tags:
|
|
||||||
- tripleo
|
|
||||||
|
|
||||||
|
|
||||||
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
|
|
||||||
# if you add dependencies to this list.
|
|
||||||
dependencies: []
|
|
@ -1,30 +0,0 @@
|
|||||||
---
|
|
||||||
- name: Converge
|
|
||||||
hosts: all
|
|
||||||
collections:
|
|
||||||
- tripleo.operator
|
|
||||||
vars:
|
|
||||||
openstack_bin: echo
|
|
||||||
tripleo_os_cloud: undercloud
|
|
||||||
tripleo_ceph_deploy_run_debug: true
|
|
||||||
tasks:
|
|
||||||
|
|
||||||
- name: Call tripleo_ceph_deploy role for standlone
|
|
||||||
include_role:
|
|
||||||
name: "tripleo_ceph_deploy"
|
|
||||||
vars:
|
|
||||||
tripleo_ceph_deploy_standalone: true
|
|
||||||
tripleo_ceph_deploy_mon_ip: 192.168.122.42
|
|
||||||
tripleo_ceph_deploy_spec: /home/zuul/ceph_spec.yaml
|
|
||||||
tripleo_ceph_deploy_stack: standalone
|
|
||||||
tripleo_ceph_deploy_output: /home/zuul/deployed_ceph.yaml
|
|
||||||
|
|
||||||
- name: Show result tripleo_ceph_deploy_result
|
|
||||||
debug:
|
|
||||||
msg: "{{ tripleo_ceph_deploy_result }}"
|
|
||||||
|
|
||||||
- name: Assert tripleo_ceph_deploy command for standalone
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- tripleo_ceph_deploy_result.stdout ==
|
|
||||||
"overcloud ceph deploy --output /home/zuul/deployed_ceph.yaml --standalone --mon-ip 192.168.122.42 --ceph-spec /home/zuul/ceph_spec.yaml --stack standalone --cephadm-ssh-user ceph-admin"
|
|
@ -1,19 +0,0 @@
|
|||||||
---
|
|
||||||
driver:
|
|
||||||
name: delegated
|
|
||||||
options:
|
|
||||||
managed: false
|
|
||||||
ansible_connection_options:
|
|
||||||
ansible_connection: local
|
|
||||||
log: true
|
|
||||||
platforms:
|
|
||||||
- name: instance
|
|
||||||
provisioner:
|
|
||||||
name: ansible
|
|
||||||
scenario:
|
|
||||||
name: default
|
|
||||||
test_sequence:
|
|
||||||
- prepare
|
|
||||||
- syntax
|
|
||||||
- converge
|
|
||||||
- verify
|
|
@ -1,8 +0,0 @@
|
|||||||
---
|
|
||||||
- name: Prepare
|
|
||||||
hosts: all
|
|
||||||
tasks:
|
|
||||||
|
|
||||||
- name: Include molecule prep
|
|
||||||
include_role:
|
|
||||||
name: test_molecule_prep
|
|
@ -1,110 +0,0 @@
|
|||||||
---
|
|
||||||
- name: Setup ceph deploy facts
|
|
||||||
set_fact:
|
|
||||||
_deploy_cmd: >-
|
|
||||||
{{ openstack_bin }} overcloud ceph deploy
|
|
||||||
{{ tripleo_ceph_deploy_deployed_baremetal }}
|
|
||||||
{{ tripleo_ceph_deploy_output | ternary('--output $DEPLOYED_CEPH', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_overwrite | ternary('--yes', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_standalone | ternary('--standalone', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_mon_ip | ternary('--mon-ip $CEPH_MON_IP', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_cluster | ternary('--cluster $CLUSTER', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_spec | ternary('--ceph-spec $CEPH_SPEC', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_stack | ternary('--stack $DEPLOY_STACK', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_working_dir | ternary('--working-dir $DEPLOY_WORKING_DIR', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_roles_file | ternary('--roles $DEPLOY_ROLES_FILE', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_osd_spec | ternary('--osd-spec $CEPH_OSD_SPEC', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_crush_hierarchy | ternary('--crush-hierarchy $CEPH_CRUSH_HIERARCHY', '') }}
|
|
||||||
{{ tripleo_ceph_user_ssh_user | ternary('--cephadm-ssh-user $CEPHADM_SSH_USER', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_skip_user_create | ternary('--skip-user-create', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_skip_hosts_config | ternary('--skip-hosts-config', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_skip_ntp | ternary('--skip-ntp', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_skip_container_registry_config | ternary('--skip-container-registry-config', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_force | ternary('--force', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_single_host_defaults | ternary('--single-host-defaults', '') }}
|
|
||||||
{% if tripleo_ceph_deploy_with_ntp %}
|
|
||||||
{{ tripleo_ceph_deploy_ntp_server | ternary('--ntp-server $CEPH_NTP_SERVER', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_ntp_heat_env_file | ternary('--ntp-heat-env-file $CEPH_NTP_HEAT_ENV_FILE', '') }}
|
|
||||||
{% endif %}
|
|
||||||
{{ tripleo_ceph_deploy_network_data | ternary('--network-data $NETWORK_DATA', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_public_network_name | ternary('--public-network-name $PUBLIC_NETWORK_NAME', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_cluster_network_name | ternary('--cluster-network-name $CLUSTER_NETWORK_NAME', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_config | ternary('--config $CONFIG', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_cephadm_extra_args | ternary('--cephadm-extra-args "$CEPHADM_EXTRA_ARGS"', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_ceph_vip | ternary('--ceph-vip $CEPH_VIP', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_daemons | ternary('--daemons $DAEMONS', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_container_cephadm_default | ternary('--cephadm-default-container', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_container_image_prepare | ternary('--container-image-prepare $CONTAINER_IMAGE_PREPARE', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_container_namespace | ternary('--container-namespace $CONTAINER_NAMESPACE', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_container_image | ternary('--container-image $CONTAINER_IMAGE', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_container_tag | ternary('--container-tag $CONTAINER_TAG', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_container_registry_url | ternary('--registry-url $REGISTRY_URL', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_container_registry_username | ternary('--registry-username $REGISTRY_USERNAME', '') }}
|
|
||||||
{{ tripleo_ceph_deploy_container_registry_password | ternary('--registry-password $REGISTRY_PASSWORD', '') }}
|
|
||||||
_deploy_env:
|
|
||||||
DEPLOYED_CEPH: "{{ tripleo_ceph_deploy_output }}"
|
|
||||||
DEPLOY_STACK: "{{ tripleo_ceph_deploy_stack }}"
|
|
||||||
DEPLOY_WORKING_DIR: "{{ tripleo_ceph_deploy_working_dir }}"
|
|
||||||
DEPLOY_ROLES_FILE: "{{ tripleo_ceph_deploy_roles_file }}"
|
|
||||||
CEPH_SPEC: "{{ tripleo_ceph_deploy_spec }}"
|
|
||||||
CEPH_MON_IP: "{{ tripleo_ceph_deploy_mon_ip }}"
|
|
||||||
CLUSTER: "{{ tripleo_ceph_deploy_cluster }}"
|
|
||||||
CEPH_OSD_SPEC: "{{ tripleo_ceph_deploy_osd_spec }}"
|
|
||||||
CEPH_NTP_SERVER: "{{ tripleo_ceph_deploy_ntp_server }}"
|
|
||||||
CEPH_NTP_HEAT_ENV_FILE: "{{ tripleo_ceph_deploy_ntp_heat_env_file }}"
|
|
||||||
CEPH_CRUSH_HIERARCHY: "{{ tripleo_ceph_deploy_crush_hierarchy }}"
|
|
||||||
CEPHADM_SSH_USER: "{{ tripleo_ceph_user_ssh_user }}"
|
|
||||||
NETWORK_DATA: "{{ tripleo_ceph_deploy_network_data }}"
|
|
||||||
PUBLIC_NETWORK_NAME: "{{ tripleo_ceph_deploy_public_network_name }}"
|
|
||||||
CLUSTER_NETWORK_NAME: "{{ tripleo_ceph_deploy_cluster_network_name }}"
|
|
||||||
CONFIG: "{{ tripleo_ceph_deploy_config }}"
|
|
||||||
CEPHADM_EXTRA_ARGS: "{{ tripleo_ceph_deploy_cephadm_extra_args }}"
|
|
||||||
CEPH_VIP: "{{ tripleo_ceph_deploy_ceph_vip }}"
|
|
||||||
DAEMONS: "{{ tripleo_ceph_deploy_daemons }}"
|
|
||||||
CONTAINER_IMAGE_PREPARE: "{{ tripleo_ceph_deploy_container_image_prepare }}"
|
|
||||||
CONTAINER_NAMESPACE: "{{ tripleo_ceph_deploy_container_namespace }}"
|
|
||||||
CONTAINER_IMAGE: "{{ tripleo_ceph_deploy_container_image }}"
|
|
||||||
CONTAINER_TAG: "{{ tripleo_ceph_deploy_container_tag }}"
|
|
||||||
REGISTRY_URL: "{{ tripleo_ceph_deploy_container_registry_url }}"
|
|
||||||
REGISTRY_USERNAME: "{{ tripleo_ceph_deploy_container_registry_username }}"
|
|
||||||
REGISTRY_PASSWORD: "{{ tripleo_ceph_deploy_container_registry_password }}"
|
|
||||||
|
|
||||||
- name: Show debug information
|
|
||||||
when:
|
|
||||||
tripleo_ceph_deploy_debug|bool
|
|
||||||
block:
|
|
||||||
- name: Show openstack overcloud ceph deploy command
|
|
||||||
debug:
|
|
||||||
var: _deploy_cmd
|
|
||||||
|
|
||||||
- name: Show the openstack overcloud ceph deploy environment
|
|
||||||
debug:
|
|
||||||
var: _deploy_env
|
|
||||||
|
|
||||||
- name: Write reproducer script
|
|
||||||
tripleo_shell_script:
|
|
||||||
dest: "{{ ansible_env.HOME }}/openstack_overcloud_ceph_deploy.sh"
|
|
||||||
shell_command: "{{ _deploy_cmd }}"
|
|
||||||
shell_environment: "{{ _deploy_env }}"
|
|
||||||
when: tripleo_ceph_deploy_generate_scripts|bool
|
|
||||||
|
|
||||||
- name: Run Ceph Deploy
|
|
||||||
shell: "{{ _deploy_cmd }}" # noqa 305
|
|
||||||
environment: "{{ _deploy_env }}"
|
|
||||||
args:
|
|
||||||
executable: /bin/bash
|
|
||||||
chdir: "{{ ansible_env.HOME }}"
|
|
||||||
become: "{{ tripleo_ceph_deploy_become }}"
|
|
||||||
register: tripleo_ceph_deploy_result
|
|
||||||
async: "{{ tripleo_ceph_deploy_timeout }}"
|
|
||||||
poll: "{{ tripleo_ceph_deploy_poll }}"
|
|
||||||
changed_when: false
|
|
||||||
when:
|
|
||||||
- not ansible_check_mode|bool
|
|
||||||
- not tripleo_ceph_deploy_generate_scripts_only|bool
|
|
||||||
|
|
||||||
- name: Set output fact
|
|
||||||
when:
|
|
||||||
- tripleo_ceph_deploy_result.stdout is defined
|
|
||||||
set_fact:
|
|
||||||
tripleo_ceph_deploy_output: "{{ tripleo_ceph_deploy_result.stdout }}"
|
|
@ -1,79 +0,0 @@
|
|||||||
tripleo_ceph_spec
|
|
||||||
=====================
|
|
||||||
|
|
||||||
A role to generate Ceph spec files.
|
|
||||||
|
|
||||||
Requirements
|
|
||||||
------------
|
|
||||||
|
|
||||||
None.
|
|
||||||
|
|
||||||
Role Variables
|
|
||||||
--------------
|
|
||||||
|
|
||||||
* `tripleo_ceph_spec_become`: (Boolean) Execute command with escalated privileges. Default: false
|
|
||||||
* `tripleo_ceph_spec_crush_hierarchy`: (String) Path to an existing crush hierarchy spec file.
|
|
||||||
* `tripleo_ceph_spec_debug`: (Boolean) Flag to print out the command that is run. Default: false
|
|
||||||
* `tripleo_ceph_spec_deployed_baremetal`: (String) Path to the environment file output from "openstack overcloud node provision". This argument may be excluded only if tripleo_ceph_spec_standalone is True.
|
|
||||||
* `tripleo_ceph_spec_file`: "{{ ansible_env.HOME }}/ceph_spec.yaml"
|
|
||||||
* `tripleo_ceph_spec_generate_scripts_only`: (Boolean) Do not run the actual command - to be used in conjunction with `tripleo_ceph_spec_generate_scripts`. By default uses the value of `tripleo_generate_scripts_only` or False if `tripleo_generate_scripts_only` is not defined.
|
|
||||||
* `tripleo_ceph_spec_generate_scripts`: (Boolean) Write out a shell script that can be used to reproduce the command being executed. By default uses the value of `tripleo_generate_scripts` or False if `tripleo_generate_scripts` is not defined.
|
|
||||||
* `tripleo_ceph_spec_mon_ip`: (String) IP address of the first Ceph monitor. Only supported if tripleo_ceph_spec_standalone is True.
|
|
||||||
* `tripleo_ceph_spec_osd_spec`: (String) Path to an existing OSD spec file. When the Ceph spec file is generated its OSD spec defaults to {data_devices: {all: true}} for all service_type osd. Use this parameter to override the data_devices value inside the Ceph spec file.
|
|
||||||
* `tripleo_ceph_spec_overwrite`: (Boolean) Flag to skip yes/no prompts about overwriting the tripleo_ceph_spec_file from a previous run. Default: false
|
|
||||||
* `tripleo_ceph_spec_poll`: (Integer) Number of seconds to wait between each checks to see if the deployment command has completed. Default: 10
|
|
||||||
* `tripleo_ceph_spec_roles_file`: (String) Path to an alternative roles_data.yaml. Used to decide which node gets which Ceph mon, mgr, or osd service based on the node's role tripleo_ceph_spec_deployed_baremetal.
|
|
||||||
* `tripleo_ceph_spec_stack`: Name or ID of heat stack. Used to find the working directory.
|
|
||||||
* `tripleo_ceph_spec_standalone`: (Boolean) Create a spec file for a standalone deployment. Used for single server development or testing environments.
|
|
||||||
* `tripleo_ceph_spec_timeout_arg`: (Integer) Number in minutes for the deployment to run. Default: 90
|
|
||||||
* `tripleo_ceph_spec_timeout`: (Integer) Number in seconds to wait for the ansible execution of the deployment command to finish. This should be larger than the `tripleo_ceph_spec_timeout_arg` value. Default: 5700
|
|
||||||
* `tripleo_ceph_spec_working_dir`: (String) The working directory for the deployment where all input, output, and generated files will be stored. Defaults to "$HOME/overcloud-deploy/<stack>"
|
|
||||||
|
|
||||||
|
|
||||||
Output Variables
|
|
||||||
----------------
|
|
||||||
|
|
||||||
* `tripleo_ceph_spec_output`: (String) The command standard output.
|
|
||||||
* `tripleo_ceph_spec_result`: Ansible shell execution results
|
|
||||||
|
|
||||||
|
|
||||||
Dependencies
|
|
||||||
------------
|
|
||||||
|
|
||||||
None.
|
|
||||||
|
|
||||||
Example Playbook
|
|
||||||
----------------
|
|
||||||
|
|
||||||
Example ceph spec playbook
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- hosts: undercloud
|
|
||||||
gather_facts: true
|
|
||||||
tasks:
|
|
||||||
- name: Create Ceph Spec for Standalone
|
|
||||||
include_role:
|
|
||||||
name: tripleo_ceph_spec
|
|
||||||
vars:
|
|
||||||
tripleo_ceph_spec_standalone: True
|
|
||||||
tripleo_ceph_spec_mon_ip: 192.168.122.42
|
|
||||||
tripleo_ceph_spec_file: /home/stack/ceph_spec.yaml
|
|
||||||
tripleo_ceph_spec_overwrite: True
|
|
||||||
|
|
||||||
- name: Create Ceph Spec from 'openstack overcloud node provision' output
|
|
||||||
include_role:
|
|
||||||
name: tripleo_ceph_spec
|
|
||||||
vars:
|
|
||||||
tripleo_ceph_spec_debug: True
|
|
||||||
tripleo_ceph_spec_generate_scripts: True
|
|
||||||
tripleo_ceph_spec_overwrite: True
|
|
||||||
tripleo_ceph_spec_stack: overcloud
|
|
||||||
tripleo_ceph_spec_roles_file: /home/stack/custom_roles.yaml
|
|
||||||
tripleo_ceph_spec_file: /home/stack/ceph_spec.yaml
|
|
||||||
tripleo_ceph_spec_deployed_baremetal: /home/stack/overcloud-baremetal-deployed.yaml
|
|
||||||
```
|
|
||||||
|
|
||||||
License
|
|
||||||
-------
|
|
||||||
|
|
||||||
Apache-2.0
|
|
@ -1,19 +0,0 @@
|
|||||||
---
|
|
||||||
openstack_bin: openstack
|
|
||||||
tripleo_ceph_spec_become: false
|
|
||||||
tripleo_ceph_spec_crush_hierarchy:
|
|
||||||
tripleo_ceph_spec_debug: false
|
|
||||||
tripleo_ceph_spec_deployed_baremetal:
|
|
||||||
tripleo_ceph_spec_file: "{{ ansible_env.HOME }}/ceph_spec.yaml"
|
|
||||||
tripleo_ceph_spec_generate_scripts: "{{ tripleo_generate_scripts | default(False) }}"
|
|
||||||
tripleo_ceph_spec_generate_scripts_only: "{{ tripleo_generate_scripts_only | default(False) }}"
|
|
||||||
tripleo_ceph_spec_mon_ip:
|
|
||||||
tripleo_ceph_spec_osd_spec:
|
|
||||||
tripleo_ceph_spec_overwrite: false
|
|
||||||
tripleo_ceph_spec_poll: 10
|
|
||||||
tripleo_ceph_spec_roles_file:
|
|
||||||
tripleo_ceph_spec_stack:
|
|
||||||
tripleo_ceph_spec_standalone: false
|
|
||||||
tripleo_ceph_spec_timeout: 5700
|
|
||||||
tripleo_ceph_spec_timeout_arg: 90
|
|
||||||
tripleo_ceph_spec_working_dir:
|
|
@ -1,45 +0,0 @@
|
|||||||
---
|
|
||||||
# Copyright 2022 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.
|
|
||||||
|
|
||||||
|
|
||||||
galaxy_info:
|
|
||||||
role_name: tripleo_ceph_spec
|
|
||||||
namespace: openstack
|
|
||||||
author: OpenStack
|
|
||||||
description: TripleO Operator Role -- tripleo_ceph_spec
|
|
||||||
company: Red Hat
|
|
||||||
license: Apache-2.0
|
|
||||||
min_ansible_version: 2.8
|
|
||||||
#
|
|
||||||
# Provide a list of supported platforms, and for each platform a list of versions.
|
|
||||||
# If you don't wish to enumerate all versions for a particular platform, use 'all'.
|
|
||||||
# To view available platforms and versions (or releases), visit:
|
|
||||||
# https://galaxy.ansible.com/api/v1/platforms/
|
|
||||||
#
|
|
||||||
platforms:
|
|
||||||
- name: CentOS
|
|
||||||
versions:
|
|
||||||
- 7
|
|
||||||
- 8
|
|
||||||
- 9
|
|
||||||
|
|
||||||
galaxy_tags:
|
|
||||||
- tripleo
|
|
||||||
|
|
||||||
|
|
||||||
# List your role dependencies here, one per line. Be sure to remove the '[]' above,
|
|
||||||
# if you add dependencies to this list.
|
|
||||||
dependencies: []
|
|
@ -1,28 +0,0 @@
|
|||||||
---
|
|
||||||
- name: Converge
|
|
||||||
hosts: all
|
|
||||||
collections:
|
|
||||||
- tripleo.operator
|
|
||||||
vars:
|
|
||||||
openstack_bin: echo
|
|
||||||
tripleo_os_cloud: undercloud
|
|
||||||
tripleo_ceph_spec_run_debug: true
|
|
||||||
tasks:
|
|
||||||
|
|
||||||
- name: Call tripleo_ceph_spec role for standlone
|
|
||||||
include_role:
|
|
||||||
name: "tripleo_ceph_spec"
|
|
||||||
vars:
|
|
||||||
tripleo_ceph_spec_standalone: true
|
|
||||||
tripleo_ceph_spec_mon_ip: 192.168.122.42
|
|
||||||
tripleo_ceph_spec_file: /home/zuul/ceph_spec.yaml
|
|
||||||
|
|
||||||
- name: Show result tripleo_ceph_spec_result
|
|
||||||
debug:
|
|
||||||
msg: "{{ tripleo_ceph_spec_result }}"
|
|
||||||
|
|
||||||
- name: Assert tripleo_ceph_spec command for standalone
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- tripleo_ceph_spec_result.stdout ==
|
|
||||||
"overcloud ceph spec --standalone --mon-ip 192.168.122.42 --output /home/zuul/ceph_spec.yaml"
|
|
@ -1,19 +0,0 @@
|
|||||||
---
|
|
||||||
driver:
|
|
||||||
name: delegated
|
|
||||||
options:
|
|
||||||
managed: false
|
|
||||||
ansible_connection_options:
|
|
||||||
ansible_connection: local
|
|
||||||
log: true
|
|
||||||
platforms:
|
|
||||||
- name: instance
|
|
||||||
provisioner:
|
|
||||||
name: ansible
|
|
||||||
scenario:
|
|
||||||
name: default
|
|
||||||
test_sequence:
|
|
||||||
- prepare
|
|
||||||
- syntax
|
|
||||||
- converge
|
|
||||||
- verify
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user