summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xplaybooks/adhoc/upgrades/library/openshift_upgrade_config.py113
-rw-r--r--playbooks/adhoc/upgrades/upgrade.yml20
-rw-r--r--playbooks/common/openshift-cluster/config.yml6
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