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:
Ghanshyam Mann 2024-02-24 11:33:22 -08:00
parent e1abb34ef8
commit 43e28b25c2
748 changed files with 10 additions and 30617 deletions

View File

@ -1,7 +0,0 @@
skip_list:
- role-name
- unnamed-task
- command-instead-of-shell
- no-changed-when
- no-handler
- yaml

6
.gitignore vendored
View File

@ -1,6 +0,0 @@
.tox
__pycache__
build
tripleo_operator_ansible.egg-info/
.stestr
*.pyc

1
.mdlrc
View File

@ -1 +0,0 @@
rules "~MD013", "~MD033"

View File

@ -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)

View File

@ -1,3 +0,0 @@
[DEFAULT]
test_path=${TEST_PATH:-./tests/}
top_dir=./

View File

@ -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
View File

@ -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.

View File

@ -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
View 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.

View File

@ -1 +0,0 @@
ansible-core<2.12

View File

@ -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

View File

@ -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 }}"

View File

@ -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

View File

@ -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'}

View File

@ -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.

View File

@ -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'

View File

@ -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

View File

@ -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`

View File

@ -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*

View File

@ -1,9 +0,0 @@
Documented roles in tripleo-operator-ansible
============================================
Contents:
.. toctree::
:glob:
roles/*

View File

@ -1,6 +0,0 @@
=========================
Role - test_molecule_prep
=========================
.. ansibleautoplugin::
:role: roles/test_molecule_prep

View File

@ -1,6 +0,0 @@
======================================
Role - tripleo_config_generate_ansible
======================================
.. ansibleautoplugin::
:role: roles/tripleo_config_generate_ansible

View File

@ -1,6 +0,0 @@
=====================================
Role - tripleo_container_image_delete
=====================================
.. ansibleautoplugin::
:role: roles/tripleo_container_image_delete

View File

@ -1,6 +0,0 @@
===================================
Role - tripleo_container_image_list
===================================
.. ansibleautoplugin::
:role: roles/tripleo_container_image_list

View File

@ -1,6 +0,0 @@
======================================
Role - tripleo_container_image_prepare
======================================
.. ansibleautoplugin::
:role: roles/tripleo_container_image_prepare

View File

@ -1,6 +0,0 @@
==============================================
Role - tripleo_container_image_prepare_default
==============================================
.. ansibleautoplugin::
:role: roles/tripleo_container_image_prepare_default

View File

@ -1,6 +0,0 @@
===================================
Role - tripleo_container_image_push
===================================
.. ansibleautoplugin::
:role: roles/tripleo_container_image_push

View File

@ -1,6 +0,0 @@
===================================
Role - tripleo_container_image_show
===================================
.. ansibleautoplugin::
:role: roles/tripleo_container_image_show

View File

@ -1,6 +0,0 @@
=====================
Role - tripleo_deploy
=====================
.. ansibleautoplugin::
:role: roles/tripleo_deploy

View File

@ -1,6 +0,0 @@
==============================================
Role - tripleo_overcloud_container_image_build
==============================================
.. ansibleautoplugin::
:role: roles/tripleo_overcloud_container_image_build

View File

@ -1,6 +0,0 @@
================================================
Role - tripleo_overcloud_container_image_prepare
================================================
.. ansibleautoplugin::
:role: roles/tripleo_overcloud_container_image_prepare

View File

@ -1,6 +0,0 @@
===============================
Role - tripleo_overcloud_deploy
===============================
.. ansibleautoplugin::
:role: roles/tripleo_overcloud_deploy

View File

@ -1,6 +0,0 @@
===============================
Role - tripleo_overcloud_export
===============================
.. ansibleautoplugin::
:role: roles/tripleo_overcloud_export

View File

@ -1,6 +0,0 @@
=================================
Role - tripleo_overcloud_failures
=================================
.. ansibleautoplugin::
:role: roles/tripleo_overcloud_failures

View File

@ -1,6 +0,0 @@
====================================
Role - tripleo_overcloud_image_build
====================================
.. ansibleautoplugin::
:role: roles/tripleo_overcloud_image_build

View File

@ -1,6 +0,0 @@
=====================================
Role - tripleo_overcloud_image_upload
=====================================
.. ansibleautoplugin::
:role: roles/tripleo_overcloud_image_upload

View File

@ -1,6 +0,0 @@
============================================
Role - tripleo_overcloud_node_bios_configure
============================================
.. ansibleautoplugin::
:role: roles/tripleo_overcloud_node_bios_configure

View File

@ -1,6 +0,0 @@
========================================
Role - tripleo_overcloud_node_bios_reset
========================================
.. ansibleautoplugin::
:role: roles/tripleo_overcloud_node_bios_reset

View File

@ -1,6 +0,0 @@
===================================
Role - tripleo_overcloud_node_clean
===================================
.. ansibleautoplugin::
:role: roles/tripleo_overcloud_node_clean

View File

@ -1,6 +0,0 @@
=======================================
Role - tripleo_overcloud_node_configure
=======================================
.. ansibleautoplugin::
:role: roles/tripleo_overcloud_node_configure

View File

@ -1,6 +0,0 @@
====================================
Role - tripleo_overcloud_node_delete
====================================
.. ansibleautoplugin::
:role: roles/tripleo_overcloud_node_delete

View File

@ -1,6 +0,0 @@
======================================
Role - tripleo_overcloud_node_discover
======================================
.. ansibleautoplugin::
:role: roles/tripleo_overcloud_node_discover

View File

@ -1,6 +0,0 @@
=================================================
Role - tripleo_overcloud_node_extract_provisioned
=================================================
.. ansibleautoplugin::
:role: roles/tripleo_overcloud_node_extract_provisioned

View File

@ -1,6 +0,0 @@
====================================
Role - tripleo_overcloud_node_import
====================================
.. ansibleautoplugin::
:role: roles/tripleo_overcloud_node_import

View File

@ -1,6 +0,0 @@
========================================
Role - tripleo_overcloud_node_introspect
========================================
.. ansibleautoplugin::
:role: roles/tripleo_overcloud_node_introspect

View File

@ -1,6 +0,0 @@
=======================================
Role - tripleo_overcloud_node_provision
=======================================
.. ansibleautoplugin::
:role: roles/tripleo_overcloud_node_provision

View File

@ -1,6 +0,0 @@
===============================
Role - tripleo_overcloud_status
===============================
.. ansibleautoplugin::
:role: roles/tripleo_overcloud_status

View File

@ -1,6 +0,0 @@
=======================================
Role - tripleo_overcloud_update_prepare
=======================================
.. ansibleautoplugin::
:role: roles/tripleo_overcloud_update_prepare

View File

@ -1,6 +0,0 @@
===================================
Role - tripleo_overcloud_update_run
===================================
.. ansibleautoplugin::
:role: roles/tripleo_overcloud_update_run

View File

@ -1,6 +0,0 @@
====================
Role - tripleo_repos
====================
.. ansibleautoplugin::
:role: roles/tripleo_repos

View File

@ -1,6 +0,0 @@
================================
Role - tripleo_undercloud_backup
================================
.. ansibleautoplugin::
:role: roles/tripleo_undercloud_backup

View File

@ -1,6 +0,0 @@
=================================
Role - tripleo_undercloud_install
=================================
.. ansibleautoplugin::
:role: roles/tripleo_undercloud_install

View File

@ -1,6 +0,0 @@
========================================
Role - tripleo_undercloud_minion_install
========================================
.. ansibleautoplugin::
:role: roles/tripleo_undercloud_minion_install

View File

@ -1,6 +0,0 @@
========================================
Role - tripleo_undercloud_minion_upgrade
========================================
.. ansibleautoplugin::
:role: roles/tripleo_undercloud_minion_upgrade

View File

@ -1,6 +0,0 @@
=================================
Role - tripleo_undercloud_upgrade
=================================
.. ansibleautoplugin::
:role: roles/tripleo_undercloud_upgrade

View File

@ -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.

View File

@ -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/

View File

@ -1,2 +0,0 @@
---
requires_ansible: ">=2.8"

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 }}"

View File

@ -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

View File

@ -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')

View File

@ -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 }}"

View File

@ -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 }}"

View File

@ -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).

View File

@ -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

View File

@ -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)

View File

@ -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()

View File

@ -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'

View File

@ -1,18 +0,0 @@
==================================================
Welcome to tripleo-operator-ansible Release Notes!
==================================================
Contents
========
.. toctree::
:maxdepth: 2
unreleased
Indices and tables
==================
* :ref:`genindex`
* :ref:`search`

View File

@ -1,5 +0,0 @@
============================
Current Series Release Notes
============================
.. release-notes::

View File

View File

View File

@ -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

View File

@ -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

View File

@ -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: "../../../.."

View File

@ -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: []

View File

@ -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"

View File

@ -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

View File

@ -1,8 +0,0 @@
---
- name: Prepare
hosts: all
tasks:
- name: Include molecule prep
include_role:
name: test_molecule_prep

View File

@ -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

View File

@ -1 +0,0 @@
localhost

View File

@ -1,4 +0,0 @@
---
- hosts: localhost
roles:
- test_molecule_prep

View File

@ -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

View File

@ -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:

View File

@ -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: []

View File

@ -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"

View File

@ -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

View File

@ -1,8 +0,0 @@
---
- name: Prepare
hosts: all
tasks:
- name: Include molecule prep
include_role:
name: test_molecule_prep

View File

@ -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 }}"

View File

@ -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

View File

@ -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:

View File

@ -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: []

View File

@ -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"

View File

@ -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