diff options
-rw-r--r-- | playbooks/byo/openshift-cluster/upgrades/v3_3/upgrade.yml | 4 | ||||
-rw-r--r-- | playbooks/byo/openshift-cluster/upgrades/v3_3/upgrade_control_plane.yml | 4 | ||||
-rw-r--r-- | playbooks/byo/openshift-cluster/upgrades/v3_4/upgrade.yml | 4 | ||||
-rw-r--r-- | playbooks/byo/openshift-cluster/upgrades/v3_4/upgrade_control_plane.yml | 6 | ||||
-rw-r--r-- | playbooks/byo/openshift-master/restart.yml | 14 | ||||
-rw-r--r-- | playbooks/common/openshift-cluster/upgrades/upgrade_control_plane.yml | 29 | ||||
-rw-r--r-- | playbooks/common/openshift-master/restart_services.yml | 6 | ||||
-rw-r--r-- | playbooks/common/openshift-master/validate_restart.yml (renamed from playbooks/common/openshift-master/restart.yml) | 13 | ||||
-rwxr-xr-x | roles/lib_openshift/src/generate.py | 30 | ||||
-rw-r--r-- | roles/lib_utils/library/yedit.py | 6 | ||||
-rwxr-xr-x | roles/lib_utils/src/generate.py | 32 | ||||
-rw-r--r-- | setup.py | 54 | ||||
-rw-r--r-- | tox.ini | 3 |
13 files changed, 147 insertions, 58 deletions
diff --git a/playbooks/byo/openshift-cluster/upgrades/v3_3/upgrade.yml b/playbooks/byo/openshift-cluster/upgrades/v3_3/upgrade.yml index 4ce815271..84a5a026f 100644 --- a/playbooks/byo/openshift-cluster/upgrades/v3_3/upgrade.yml +++ b/playbooks/byo/openshift-cluster/upgrades/v3_3/upgrade.yml @@ -66,6 +66,10 @@ tags: - pre_upgrade +- include: ../../../../common/openshift-master/validate_restart.yml + tags: + - pre_upgrade + - include: ../../../../common/openshift-cluster/upgrades/pre/verify_upgrade_targets.yml tags: - pre_upgrade diff --git a/playbooks/byo/openshift-cluster/upgrades/v3_3/upgrade_control_plane.yml b/playbooks/byo/openshift-cluster/upgrades/v3_3/upgrade_control_plane.yml index d6af71827..7717c95e4 100644 --- a/playbooks/byo/openshift-cluster/upgrades/v3_3/upgrade_control_plane.yml +++ b/playbooks/byo/openshift-cluster/upgrades/v3_3/upgrade_control_plane.yml @@ -71,6 +71,10 @@ tags: - pre_upgrade +- include: ../../../../common/openshift-master/validate_restart.yml + tags: + - pre_upgrade + - include: ../../../../common/openshift-cluster/upgrades/pre/verify_upgrade_targets.yml tags: - pre_upgrade diff --git a/playbooks/byo/openshift-cluster/upgrades/v3_4/upgrade.yml b/playbooks/byo/openshift-cluster/upgrades/v3_4/upgrade.yml index d6115e7a5..59dd802ee 100644 --- a/playbooks/byo/openshift-cluster/upgrades/v3_4/upgrade.yml +++ b/playbooks/byo/openshift-cluster/upgrades/v3_4/upgrade.yml @@ -66,6 +66,10 @@ tags: - pre_upgrade +- include: ../../../../common/openshift-master/validate_restart.yml + tags: + - pre_upgrade + - include: ../../../../common/openshift-cluster/upgrades/pre/verify_upgrade_targets.yml tags: - pre_upgrade diff --git a/playbooks/byo/openshift-cluster/upgrades/v3_4/upgrade_control_plane.yml b/playbooks/byo/openshift-cluster/upgrades/v3_4/upgrade_control_plane.yml index 8cde2ac88..92d7c943a 100644 --- a/playbooks/byo/openshift-cluster/upgrades/v3_4/upgrade_control_plane.yml +++ b/playbooks/byo/openshift-cluster/upgrades/v3_4/upgrade_control_plane.yml @@ -71,6 +71,10 @@ tags: - pre_upgrade +- include: ../../../../common/openshift-master/validate_restart.yml + tags: + - pre_upgrade + - include: ../../../../common/openshift-cluster/upgrades/pre/verify_upgrade_targets.yml tags: - pre_upgrade @@ -94,5 +98,7 @@ - include: ../../../../common/openshift-cluster/upgrades/cleanup_unused_images.yml - include: ../../../../common/openshift-cluster/upgrades/upgrade_control_plane.yml + vars: + master_config_hook: "v3_4/master_config_upgrade.yml" - include: ../../../../common/openshift-cluster/upgrades/post_control_plane.yml diff --git a/playbooks/byo/openshift-master/restart.yml b/playbooks/byo/openshift-master/restart.yml index 0a163526a..b60807a71 100644 --- a/playbooks/byo/openshift-master/restart.yml +++ b/playbooks/byo/openshift-master/restart.yml @@ -15,4 +15,16 @@ tasks: - include_vars: ../../byo/openshift-cluster/cluster_hosts.yml -- include: ../../common/openshift-master/restart.yml +- include: ../../common/openshift-cluster/evaluate_groups.yml +- include: ../../common/openshift-master/validate_restart.yml + +- name: Restart masters + hosts: oo_masters_to_config + vars: + openshift_master_ha: "{{ groups.oo_masters_to_config | length > 1 }}" + serial: 1 + tasks: + - include: restart_hosts.yml + when: openshift.common.rolling_restart_mode == 'system' + - include: restart_services.yml + when: openshift.common.rolling_restart_mode == 'services' diff --git a/playbooks/common/openshift-cluster/upgrades/upgrade_control_plane.yml b/playbooks/common/openshift-cluster/upgrades/upgrade_control_plane.yml index 6950b6166..7f738ea0f 100644 --- a/playbooks/common/openshift-cluster/upgrades/upgrade_control_plane.yml +++ b/playbooks/common/openshift-cluster/upgrades/upgrade_control_plane.yml @@ -30,14 +30,6 @@ - name: Upgrade and backup etcd include: ./etcd/main.yml -- name: Upgrade master packages - hosts: oo_masters_to_config - roles: - - openshift_facts - tasks: - - include: rpm_upgrade.yml component=master - when: not openshift.common.is_containerized | bool - # Create service signer cert when missing. Service signer certificate # is added to master config in the master config hook for v3_3. - name: Determine if service signer cert must be created @@ -59,14 +51,20 @@ roles: - openshift_master_facts -- name: Upgrade master config and systemd units +- name: Upgrade master hosts: oo_masters_to_config + vars: + openshift_master_ha: "{{ groups.oo_masters_to_config | length > 1 }}" + serial: 1 handlers: - include: ../../../../roles/openshift_master/handlers/main.yml static: yes roles: - openshift_facts post_tasks: + - include: rpm_upgrade.yml component=master + when: not openshift.common.is_containerized | bool + - include_vars: ../../../../roles/openshift_master_facts/vars/main.yml - include: upgrade_scheduler.yml @@ -104,9 +102,12 @@ state: link when: ca_crt_stat.stat.isreg and not ca_bundle_stat.stat.exists -- name: Set master update status to complete - hosts: oo_masters_to_config - tasks: + - include: ../../openshift-master/restart_hosts.yml + when: openshift.common.rolling_restart_mode == 'system' + + - include: ../../openshift-master/restart_services.yml + when: openshift.common.rolling_restart_mode == 'services' + - set_fact: master_update_complete: True @@ -128,10 +129,6 @@ msg: "Upgrade cannot continue. The following masters did not finish updating: {{ master_update_failed | join(',') }}" when: master_update_failed | length > 0 -# We are now ready to restart master services (or entire system -# depending on openshift_rolling_restart_mode): -- include: ../../openshift-master/restart.yml - ############################################################################### # Reconcile Cluster Roles, Cluster Role Bindings and Security Context Constraints ############################################################################### diff --git a/playbooks/common/openshift-master/restart_services.yml b/playbooks/common/openshift-master/restart_services.yml index b40c32669..508b5a3ac 100644 --- a/playbooks/common/openshift-master/restart_services.yml +++ b/playbooks/common/openshift-master/restart_services.yml @@ -8,14 +8,14 @@ service: name: "{{ openshift.common.service_type }}-master-api" state: restarted - when: openshift_master_ha | bool and openshift.master.cluster_method != 'pacemaker' + when: openshift_master_ha | bool - name: Wait for master API to come back online wait_for: host: "{{ openshift.common.hostname }}" state: started delay: 10 port: "{{ openshift.master.api_port }}" - when: openshift_master_ha | bool and openshift.master.cluster_method != 'pacemaker' + when: openshift_master_ha | bool - name: Restart master controllers service: name: "{{ openshift.common.service_type }}-master-controllers" @@ -23,4 +23,4 @@ # Ignore errrors since it is possible that type != simple for # pre-3.1.1 installations. ignore_errors: true - when: openshift_master_ha | bool and openshift.master.cluster_method != 'pacemaker' + when: openshift_master_ha | bool diff --git a/playbooks/common/openshift-master/restart.yml b/playbooks/common/openshift-master/validate_restart.yml index 7b340887a..5dbb21502 100644 --- a/playbooks/common/openshift-master/restart.yml +++ b/playbooks/common/openshift-master/validate_restart.yml @@ -1,6 +1,4 @@ --- -- include: ../openshift-cluster/evaluate_groups.yml - - name: Validate configuration for rolling restart hosts: oo_masters_to_config roles: @@ -65,14 +63,3 @@ - set_fact: current_host: "{{ exists.stat.exists }}" when: openshift.common.rolling_restart_mode == 'system' - -- name: Restart masters - hosts: oo_masters_to_config - vars: - openshift_master_ha: "{{ groups.oo_masters_to_config | length > 1 }}" - serial: 1 - tasks: - - include: restart_hosts.yml - when: openshift.common.rolling_restart_mode == 'system' - - include: restart_services.yml - when: openshift.common.rolling_restart_mode == 'services' diff --git a/roles/lib_openshift/src/generate.py b/roles/lib_openshift/src/generate.py index 8451d99ab..6daade108 100755 --- a/roles/lib_openshift/src/generate.py +++ b/roles/lib_openshift/src/generate.py @@ -10,6 +10,7 @@ import six OPENSHIFT_ANSIBLE_PATH = os.path.dirname(os.path.realpath(__file__)) OPENSHIFT_ANSIBLE_SOURCES_PATH = os.path.join(OPENSHIFT_ANSIBLE_PATH, 'sources.yml') # noqa: E501 +LIBRARY = os.path.join(OPENSHIFT_ANSIBLE_PATH, '..', 'library/') class GenerateAnsibleException(Exception): @@ -42,22 +43,29 @@ def generate(parts): return data -def main(): - ''' combine the necessary files to create the ansible module ''' - args = parse_args() +def get_sources(): + '''return the path to the generate sources''' + return yaml.load(open(OPENSHIFT_ANSIBLE_SOURCES_PATH).read()) - library = os.path.join(OPENSHIFT_ANSIBLE_PATH, '..', 'library/') - sources = yaml.load(open(OPENSHIFT_ANSIBLE_SOURCES_PATH).read()) - for fname, parts in sources.items(): +def verify(): + '''verify if the generated code matches the library code''' + for fname, parts in get_sources().items(): data = generate(parts) - fname = os.path.join(library, fname) - if args.verify: - if not open(fname).read() == data.getvalue(): - raise GenerateAnsibleException('Generated content does not match for %s' % fname) + fname = os.path.join(LIBRARY, fname) + if not open(fname).read() == data.getvalue(): + raise GenerateAnsibleException('Generated content does not match for %s' % fname) + - continue +def main(): + ''' combine the necessary files to create the ansible module ''' + args = parse_args() + if args.verify: + verify() + for fname, parts in get_sources().items(): + data = generate(parts) + fname = os.path.join(LIBRARY, fname) with open(fname, 'w') as afd: afd.seek(0) afd.write(data.getvalue()) diff --git a/roles/lib_utils/library/yedit.py b/roles/lib_utils/library/yedit.py index d882c983e..6a5b40dcc 100644 --- a/roles/lib_utils/library/yedit.py +++ b/roles/lib_utils/library/yedit.py @@ -134,6 +134,12 @@ options: required: false default: true aliases: [] + separator: + description: + - The separator being used when parsing strings. + required: false + default: '.' + aliases: [] author: - "Kenny Woodson <kwoodson@redhat.com>" extends_documentation_fragment: [] diff --git a/roles/lib_utils/src/generate.py b/roles/lib_utils/src/generate.py index cece68fb4..6daade108 100755 --- a/roles/lib_utils/src/generate.py +++ b/roles/lib_utils/src/generate.py @@ -5,11 +5,12 @@ import argparse import os -import six import yaml +import six OPENSHIFT_ANSIBLE_PATH = os.path.dirname(os.path.realpath(__file__)) OPENSHIFT_ANSIBLE_SOURCES_PATH = os.path.join(OPENSHIFT_ANSIBLE_PATH, 'sources.yml') # noqa: E501 +LIBRARY = os.path.join(OPENSHIFT_ANSIBLE_PATH, '..', 'library/') class GenerateAnsibleException(Exception): @@ -42,22 +43,29 @@ def generate(parts): return data -def main(): - ''' combine the necessary files to create the ansible module ''' - args = parse_args() +def get_sources(): + '''return the path to the generate sources''' + return yaml.load(open(OPENSHIFT_ANSIBLE_SOURCES_PATH).read()) - library = os.path.join(OPENSHIFT_ANSIBLE_PATH, '..', 'library/') - sources = yaml.load(open(OPENSHIFT_ANSIBLE_SOURCES_PATH).read()) - for fname, parts in sources.items(): +def verify(): + '''verify if the generated code matches the library code''' + for fname, parts in get_sources().items(): data = generate(parts) - fname = os.path.join(library, fname) - if args.verify: - if not open(fname).read() == data.getvalue(): - raise GenerateAnsibleException('Generated content does not match for %s' % fname) + fname = os.path.join(LIBRARY, fname) + if not open(fname).read() == data.getvalue(): + raise GenerateAnsibleException('Generated content does not match for %s' % fname) - continue +def main(): + ''' combine the necessary files to create the ansible module ''' + args = parse_args() + if args.verify: + verify() + + for fname, parts in get_sources().items(): + data = generate(parts) + fname = os.path.join(LIBRARY, fname) with open(fname, 'w') as afd: afd.seek(0) afd.write(data.getvalue()) @@ -6,7 +6,7 @@ from __future__ import print_function import os import fnmatch import re - +import sys import yaml # Always prefer setuptools over distutils @@ -146,6 +146,57 @@ class OpenShiftAnsiblePylint(PylintCommand): return func(*func_args, **func_kwargs) +class OpenShiftAnsibleGenerateValidation(Command): + ''' Command to run generated module validation''' + description = "Run generated module validation" + user_options = [] + + def initialize_options(self): + ''' initialize_options ''' + pass + + def finalize_options(self): + ''' finalize_options ''' + pass + + # self isn't used but I believe is required when it is called. + # pylint: disable=no-self-use + def run(self): + ''' run command ''' + # find the files that call generate + generate_files = find_files('roles', + ['inventory', + 'test', + 'playbooks', + 'utils'], + None, + 'generate.py$') + + if len(generate_files) < 1: + print('Did not find any code generation. Please verify module code generation.') # noqa: E501 + raise SystemExit(1) + + errors = False + for gen in generate_files: + print('Checking generated module code: {0}'.format(gen)) + try: + sys.path.insert(0, os.path.dirname(gen)) + # we are importing dynamically. This isn't in + # the python path. + # pylint: disable=import-error + import generate + generate.verify() + except generate.GenerateAnsibleException as gae: + print(gae.args) + errors = True + + if errors: + print('Found errors while generating module code.') + raise SystemExit(1) + + print('\nAll generate scripts passed.\n') + + class UnsupportedCommand(Command): ''' Basic Command to override unsupported commands ''' user_options = [] @@ -188,6 +239,7 @@ setup( 'sdist': UnsupportedCommand, 'lint': OpenShiftAnsiblePylint, 'yamllint': OpenShiftAnsibleYamlLint, + 'generate_validation': OpenShiftAnsibleGenerateValidation, }, packages=[], ) @@ -1,7 +1,7 @@ [tox] minversion=2.3.1 envlist = - py{27,35}-ansible22-{pylint,unit,flake8,yamllint} + py{27,35}-ansible22-{pylint,unit,flake8,yamllint,generate_validation} skipsdist=True skip_missing_interpreters=True @@ -16,3 +16,4 @@ commands = pylint: python setup.py lint yamllint: python setup.py yamllint unit: nosetests + generate_validation: python setup.py generate_validation |