diff options
| author | Devan Goodwin <dgoodwin@redhat.com> | 2015-11-04 08:48:20 -0400 | 
|---|---|---|
| committer | Devan Goodwin <dgoodwin@redhat.com> | 2015-11-04 08:48:20 -0400 | 
| commit | 864abc6ee9e1d8265f6e5f755d803189bdc62802 (patch) | |
| tree | c0f0341c3035cbb318f1bda2a7401fca864031ab | |
| parent | 8ca4308854c44649d2dcfd94f441790c2e5c5d2b (diff) | |
| parent | 74420660b1b12a00392a6d88a257e0cfe1b0a08e (diff) | |
| download | openshift-864abc6ee9e1d8265f6e5f755d803189bdc62802.tar.gz openshift-864abc6ee9e1d8265f6e5f755d803189bdc62802.tar.bz2 openshift-864abc6ee9e1d8265f6e5f755d803189bdc62802.tar.xz openshift-864abc6ee9e1d8265f6e5f755d803189bdc62802.zip  | |
Merge branch 'config-upgrade' into upgrade
| -rwxr-xr-x | playbooks/adhoc/upgrades/library/openshift_upgrade_config.py | 113 | ||||
| -rw-r--r-- | playbooks/adhoc/upgrades/upgrade.yml | 20 | ||||
| -rw-r--r-- | playbooks/common/openshift-cluster/config.yml | 6 | 
3 files changed, 128 insertions, 11 deletions
diff --git a/playbooks/adhoc/upgrades/library/openshift_upgrade_config.py b/playbooks/adhoc/upgrades/library/openshift_upgrade_config.py new file mode 100755 index 000000000..95c7b1664 --- /dev/null +++ b/playbooks/adhoc/upgrades/library/openshift_upgrade_config.py @@ -0,0 +1,113 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# vim: expandtab:tabstop=4:shiftwidth=4 + +import os +import shutil +import yaml + +from datetime import datetime + +"""Ansible module for modifying OpenShift configs during an upgrade""" + +DOCUMENTATION = ''' +--- +module: openshift_upgrade_config +short_description: OpenShift Upgrade Config +author: Jason DeTiberus +requirements: [ ] +''' +EXAMPLES = ''' +''' + +def get_cfg_dir(): +    cfg_path = '/etc/origin/' +    if not os.path.exists(cfg_path): +        cfg_path = '/etc/openshift/' +    return cfg_path + + +def upgrade_master_3_0_to_3_1(backup): +    changed = False + +    # Facts do not get transferred to the hosts where custom modules run, +    # need to make some assumptions here. +    master_config = os.path.join(get_cfg_dir(), 'master/master-config.yaml') + +    f = open(master_config, 'r') +    config = yaml.safe_load(f.read()) +    f.close() + +    # Remove v1beta3 from apiLevels: +    if 'apiLevels' in config and \ +        'v1beta3' in config['apiLevels']: +            config['apiLevels'].remove('v1beta3') +            changed = True +    if 'apiLevels' in config['kubernetesMasterConfig'] and \ +        'v1beta3' in config['kubernetesMasterConfig']['apiLevels']: +            config['kubernetesMasterConfig']['apiLevels'].remove('v1beta3') +            changed = True + +    # Add the new master proxy client certs: +    if 'proxyClientInfo' not in config['kubernetesMasterConfig']: +        config['kubernetesMasterConfig']['proxyClientInfo'] = { +            'certFile': 'master.proxy-client.crt', +            'keyFile': 'master.proxy-client.key' +        } + +    if changed: +        if backup: +            timestamp = datetime.now().strftime('%Y%m%d%H%M%S') +            basedir = os.path.split(master_config)[0] +            backup_file = os.path.join(basedir, 'master-config.yaml.bak-%s' +                % timestamp) +            shutil.copyfile(master_config, backup_file) +        # Write the modified config: +        out_file = open(master_config, 'w') +        out_file.write(yaml.safe_dump(config, default_flow_style=False)) +        out_file.close() + +    return changed + + +def upgrade_master(from_version, to_version, backup): +    if from_version == '3.0': +        if to_version == '3.1': +            return upgrade_master_3_0_to_3_1(backup) + + +def main(): +    """ main """ +    # disabling pylint errors for global-variable-undefined and invalid-name +    # for 'global module' usage, since it is required to use ansible_facts +    # pylint: disable=global-variable-undefined, invalid-name +    global module + +    module = AnsibleModule( +        argument_spec=dict( +            from_version=dict(required=True, choices=['3.0']), +            to_version=dict(required=True, choices=['3.1']), +            role=dict(required=True, choices=['master']), +            backup=dict(required=False, default=True, type='bool') +        ), +        supports_check_mode=True, +    ) + +    from_version = module.params['from_version'] +    to_version = module.params['to_version'] +    role = module.params['role'] +    backup = module.params['backup'] + +    changed = False +    if role == 'master': +        changed = upgrade_master(from_version, to_version, backup) + +    return module.exit_json(changed=changed) + +# ignore pylint errors related to the module_utils import +# pylint: disable=redefined-builtin, unused-wildcard-import, wildcard-import +# import module snippets +from ansible.module_utils.basic import * + +if __name__ == '__main__': +    main() diff --git a/playbooks/adhoc/upgrades/upgrade.yml b/playbooks/adhoc/upgrades/upgrade.yml index a959aa881..8c1138797 100644 --- a/playbooks/adhoc/upgrades/upgrade.yml +++ b/playbooks/adhoc/upgrades/upgrade.yml @@ -93,14 +93,14 @@    - fail: msg="Deployment type 'enterprise' must be updated to 'openshift-enterprise' for upgrade to proceed"      when: deployment_type == "enterprise" and (_new_version.stdout | version_compare('1.0.7', '>=') or _new_version.stdout | version_compare('3.1', '>=')) -- name: Re-Run cluster configuration to apply latest configuration changes -  include: ../../common/openshift-cluster/config.yml -  vars: -    g_etcd_group: "{{ 'etcd' }}" -    g_masters_group: "{{ 'masters' }}" -    g_nodes_group: "{{ 'nodes' }}" -    openshift_cluster_id: "{{ cluster_id | default('default') }}" -    openshift_deployment_type: "{{ deployment_type }}" +      #- name: Re-Run cluster configuration to apply latest configuration changes +      #  include: ../../common/openshift-cluster/config.yml +      #  vars: +      #    g_etcd_group: "{{ 'etcd' }}" +      #    g_masters_group: "{{ 'masters' }}" +      #    g_nodes_group: "{{ 'nodes' }}" +      #    openshift_cluster_id: "{{ cluster_id | default('default') }}" +      #    openshift_deployment_type: "{{ deployment_type }}"  - name: Upgrade masters    hosts: masters @@ -111,6 +111,8 @@        yum: pkg=kernel state=latest      - name: Upgrade master packages        yum: pkg={{ openshift.common.service_type }}-master{{ openshift_version }} state=latest +    - name: Upgrade master configuration. +      openshift_upgrade_config: from_version=3.0 to_version=3.1 role=master      - name: Restart master services        service: name="{{ openshift.common.service_type}}-master" state=restarted @@ -118,6 +120,8 @@    hosts: nodes    vars:      openshift_version: "{{ openshift_pkg_version | default('') }}" +  roles: +  - openshift_facts    tasks:      - name: Upgrade node packages        yum: pkg={{ openshift.common.service_type }}-node{{ openshift_version }} state=latest diff --git a/playbooks/common/openshift-cluster/config.yml b/playbooks/common/openshift-cluster/config.yml index 4c74f96db..e6bf41ae4 100644 --- a/playbooks/common/openshift-cluster/config.yml +++ b/playbooks/common/openshift-cluster/config.yml @@ -4,15 +4,15 @@    gather_facts: no    tasks:    - fail: -      msg: This playbook rquires g_etcd_group to be set +      msg: This playbook requires g_etcd_group to be set      when: g_etcd_group is not defined    - fail: -      msg: This playbook rquires g_masters_group to be set +      msg: This playbook requires g_masters_group to be set      when: g_masters_group is not defined    - fail: -      msg: This playbook rquires g_nodes_group to be set +      msg: This playbook requires g_nodes_group to be set      when: g_nodes_group is not defined    - name: Evaluate oo_etcd_to_config  | 
