diff options
| author | Michael Gugino <mgugino@redhat.com> | 2017-11-09 17:48:27 -0500 | 
|---|---|---|
| committer | Michael Gugino <mgugino@redhat.com> | 2017-11-09 17:48:27 -0500 | 
| commit | 4877e1c21a26d2aba314e6272478005d12b7f14b (patch) | |
| tree | dffbc50aee9211685265d0a570156aa5103f778c /roles/openshift_master | |
| parent | 7900f45d2d8ef566cf3f330a33364dd217a93c1d (diff) | |
| download | openshift-4877e1c21a26d2aba314e6272478005d12b7f14b.tar.gz openshift-4877e1c21a26d2aba314e6272478005d12b7f14b.tar.bz2 openshift-4877e1c21a26d2aba314e6272478005d12b7f14b.tar.xz openshift-4877e1c21a26d2aba314e6272478005d12b7f14b.zip  | |
Combine master upgrade play with role
Currently, there are plays importing tasks directly from
openshift_master role.  This has caused numerous bugs
and code duplicaiton in the past.
This commit combines the upgrade into openshift_master role
utilizing include_role syntax.
Diffstat (limited to 'roles/openshift_master')
8 files changed, 298 insertions, 3 deletions
diff --git a/roles/openshift_master/defaults/main.yml b/roles/openshift_master/defaults/main.yml index a27fbae7e..a4d928546 100644 --- a/roles/openshift_master/defaults/main.yml +++ b/roles/openshift_master/defaults/main.yml @@ -66,3 +66,6 @@ openshift_master_bootstrap_enabled: False  openshift_master_csr_sa: node-bootstrapper  openshift_master_csr_namespace: openshift-infra + +openshift_master_config_file: "{{ openshift_master_config_dir }}/master-config.yaml" +openshift_master_scheduler_conf: "{{ openshift_master_config_dir }}/scheduler.json" diff --git a/roles/openshift_master/tasks/restart.yml b/roles/openshift_master/tasks/restart.yml new file mode 100644 index 000000000..4f8b758fd --- /dev/null +++ b/roles/openshift_master/tasks/restart.yml @@ -0,0 +1,22 @@ +--- +- name: Restart master API +  service: +    name: "{{ openshift.common.service_type }}-master-api" +    state: restarted +  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 }}" +    timeout: 600 +  when: openshift_master_ha | bool +- name: Restart master controllers +  service: +    name: "{{ openshift.common.service_type }}-master-controllers" +    state: restarted +  # Ignore errrors since it is possible that type != simple for +  # pre-3.1.1 installations. +  ignore_errors: true +  when: openshift_master_ha | bool diff --git a/roles/openshift_master/tasks/systemd_units.yml b/roles/openshift_master/tasks/systemd_units.yml index 8420dfb8c..b0fa72f19 100644 --- a/roles/openshift_master/tasks/systemd_units.yml +++ b/roles/openshift_master/tasks/systemd_units.yml @@ -2,9 +2,6 @@  # systemd_units.yml is included both in the openshift_master role and in the upgrade  # playbooks. -- include: upgrade_facts.yml -  when: openshift_master_defaults_in_use is not defined -  - name: Set HA Service Info for containerized installs    set_fact:      containerized_svc_dir: "/etc/systemd/system" diff --git a/roles/openshift_master/tasks/upgrade.yml b/roles/openshift_master/tasks/upgrade.yml new file mode 100644 index 000000000..92371921d --- /dev/null +++ b/roles/openshift_master/tasks/upgrade.yml @@ -0,0 +1,45 @@ +--- +- include: upgrade/rpm_upgrade.yml +  when: not openshift.common.is_containerized | bool + +- include: upgrade/upgrade_scheduler.yml + +# master_config_hook is passed in from upgrade play. +- include: "upgrade/{{ master_config_hook }}" +  when: master_config_hook is defined + +- include: journald.yml + +- include: systemd_units.yml + +- name: Check for ca-bundle.crt +  stat: +    path: "{{ openshift.common.config_base }}/master/ca-bundle.crt" +  register: ca_bundle_stat +  failed_when: false + +- name: Check for ca.crt +  stat: +    path: "{{ openshift.common.config_base }}/master/ca.crt" +  register: ca_crt_stat +  failed_when: false + +- name: Migrate ca.crt to ca-bundle.crt +  command: mv ca.crt ca-bundle.crt +  args: +    chdir: "{{ openshift.common.config_base }}/master" +  when: ca_crt_stat.stat.isreg and not ca_bundle_stat.stat.exists + +- name: Link ca.crt to ca-bundle.crt +  file: +    src: "{{ openshift.common.config_base }}/master/ca-bundle.crt" +    path: "{{ openshift.common.config_base }}/master/ca.crt" +    state: link +  when: ca_crt_stat.stat.isreg and not ca_bundle_stat.stat.exists + +- name: Update oreg value +  yedit: +    src: "{{ openshift.common.config_base }}/master/master-config.yaml" +    key: 'imageConfig.format' +    value: "{{ oreg_url | default(oreg_url_master) }}" +  when: oreg_url is defined or oreg_url_master is defined diff --git a/roles/openshift_master/tasks/upgrade/rpm_upgrade.yml b/roles/openshift_master/tasks/upgrade/rpm_upgrade.yml new file mode 100644 index 000000000..f914a9978 --- /dev/null +++ b/roles/openshift_master/tasks/upgrade/rpm_upgrade.yml @@ -0,0 +1,20 @@ +--- +# When we update package "a-${version}" and a requires b >= ${version} if we +# don't specify the version of b yum will choose the latest version of b +# available and the whole set of dependencies end up at the latest version. +# Since the package module, unlike the yum module, doesn't flatten a list +# of packages into one transaction we need to do that explicitly. The ansible +# core team tells us not to rely on yum module transaction flattening anyway. + +# TODO: If the sdn package isn't already installed this will install it, we +# should fix that +- name: Upgrade master packages +  package: name={{ master_pkgs | join(',') }} state=present +  vars: +    master_pkgs: +      - "{{ openshift.common.service_type }}{{ openshift_pkg_version }}" +      - "{{ openshift.common.service_type }}-master{{ openshift_pkg_version }}" +      - "{{ openshift.common.service_type }}-node{{ openshift_pkg_version }}" +      - "{{ openshift.common.service_type }}-sdn-ovs{{ openshift_pkg_version }}" +      - "{{ openshift.common.service_type }}-clients{{ openshift_pkg_version }}" +      - "tuned-profiles-{{ openshift.common.service_type }}-node{{ openshift_pkg_version }}" diff --git a/roles/openshift_master/tasks/upgrade/upgrade_scheduler.yml b/roles/openshift_master/tasks/upgrade/upgrade_scheduler.yml new file mode 100644 index 000000000..8558bf3e9 --- /dev/null +++ b/roles/openshift_master/tasks/upgrade/upgrade_scheduler.yml @@ -0,0 +1,173 @@ +--- +# Upgrade predicates +- vars: +    prev_predicates: "{{ lookup('openshift_master_facts_default_predicates', short_version=openshift_upgrade_min, deployment_type=openshift_deployment_type) }}" +    prev_predicates_no_region: "{{ lookup('openshift_master_facts_default_predicates', short_version=openshift_upgrade_min, deployment_type=openshift_deployment_type, regions_enabled=False) }}" +    default_predicates_no_region: "{{ lookup('openshift_master_facts_default_predicates', regions_enabled=False) }}" +    # older_predicates are the set of predicates that have previously been +    # hard-coded into openshift_facts +    older_predicates: +    - - name: MatchNodeSelector +      - name: PodFitsResources +      - name: PodFitsPorts +      - name: NoDiskConflict +      - name: NoVolumeZoneConflict +      - name: MaxEBSVolumeCount +      - name: MaxGCEPDVolumeCount +      - name: Region +        argument: +          serviceAffinity: +            labels: +            - region +    - - name: MatchNodeSelector +      - name: PodFitsResources +      - name: PodFitsPorts +      - name: NoDiskConflict +      - name: NoVolumeZoneConflict +      - name: Region +        argument: +          serviceAffinity: +            labels: +            - region +    - - name: MatchNodeSelector +      - name: PodFitsResources +      - name: PodFitsPorts +      - name: NoDiskConflict +      - name: Region +        argument: +          serviceAffinity: +            labels: +            - region +    # older_predicates_no_region are the set of predicates that have previously +    # been hard-coded into openshift_facts, with the Region predicate removed +    older_predicates_no_region: +    - - name: MatchNodeSelector +      - name: PodFitsResources +      - name: PodFitsPorts +      - name: NoDiskConflict +      - name: NoVolumeZoneConflict +      - name: MaxEBSVolumeCount +      - name: MaxGCEPDVolumeCount +    - - name: MatchNodeSelector +      - name: PodFitsResources +      - name: PodFitsPorts +      - name: NoDiskConflict +      - name: NoVolumeZoneConflict +    - - name: MatchNodeSelector +      - name: PodFitsResources +      - name: PodFitsPorts +      - name: NoDiskConflict +  block: + +  # Handle case where openshift_master_predicates is defined +  - block: +    - debug: +        msg: "WARNING: openshift_master_scheduler_predicates is set to defaults from an earlier release of OpenShift current defaults are: {{ openshift_master_scheduler_default_predicates }}" +      when: openshift_master_scheduler_predicates in older_predicates + older_predicates_no_region + [prev_predicates] + [prev_predicates_no_region] + +    - debug: +        msg: "WARNING: openshift_master_scheduler_predicates does not match current defaults of: {{ openshift_master_scheduler_default_predicates }}" +      when: openshift_master_scheduler_predicates != openshift_master_scheduler_default_predicates +    when: openshift_master_scheduler_predicates | default(none) is not none + +  # Handle cases where openshift_master_predicates is not defined +  - block: +    - debug: +        msg: "WARNING: existing scheduler config does not match previous known defaults automated upgrade of scheduler config is disabled.\nexisting scheduler predicates: {{ openshift_master_scheduler_current_predicates }}\ncurrent scheduler default predicates are: {{ openshift_master_scheduler_default_predicates }}" +      when: +      - openshift_master_scheduler_current_predicates != openshift_master_scheduler_default_predicates +      - openshift_master_scheduler_current_predicates not in older_predicates + [prev_predicates] + +    - set_fact: +        openshift_upgrade_scheduler_predicates: "{{ openshift_master_scheduler_default_predicates }}" +      when: +      - openshift_master_scheduler_current_predicates != openshift_master_scheduler_default_predicates +      - openshift_master_scheduler_current_predicates in older_predicates + [prev_predicates] + +    - set_fact: +        openshift_upgrade_scheduler_predicates: "{{ default_predicates_no_region }}" +      when: +      - openshift_master_scheduler_current_predicates != default_predicates_no_region +      - openshift_master_scheduler_current_predicates in older_predicates_no_region + [prev_predicates_no_region] + +    when: openshift_master_scheduler_predicates | default(none) is none + + +# Upgrade priorities +- vars: +    prev_priorities: "{{ lookup('openshift_master_facts_default_priorities', short_version=openshift_upgrade_min, deployment_type=openshift_deployment_type) }}" +    prev_priorities_no_zone: "{{ lookup('openshift_master_facts_default_priorities', short_version=openshift_upgrade_min, deployment_type=openshift_deployment_type, zones_enabled=False) }}" +    default_priorities_no_zone: "{{ lookup('openshift_master_facts_default_priorities', zones_enabled=False) }}" +    # older_priorities are the set of priorities that have previously been +    # hard-coded into openshift_facts +    older_priorities: +    - - name: LeastRequestedPriority +        weight: 1 +      - name: SelectorSpreadPriority +        weight: 1 +      - name: Zone +        weight: 2 +        argument: +          serviceAntiAffinity: +            label: zone +    # older_priorities_no_region are the set of priorities that have previously +    # been hard-coded into openshift_facts, with the Zone priority removed +    older_priorities_no_zone: +    - - name: LeastRequestedPriority +        weight: 1 +      - name: SelectorSpreadPriority +        weight: 1 +  block: + +  # Handle case where openshift_master_priorities is defined +  - block: +    - debug: +        msg: "WARNING: openshift_master_scheduler_priorities is set to defaults from an earlier release of OpenShift current defaults are: {{ openshift_master_scheduler_default_priorities }}" +      when: openshift_master_scheduler_priorities in older_priorities + older_priorities_no_zone + [prev_priorities] + [prev_priorities_no_zone] + +    - debug: +        msg: "WARNING: openshift_master_scheduler_priorities does not match current defaults of: {{ openshift_master_scheduler_default_priorities }}" +      when: openshift_master_scheduler_priorities != openshift_master_scheduler_default_priorities +    when: openshift_master_scheduler_priorities | default(none) is not none + +  # Handle cases where openshift_master_priorities is not defined +  - block: +    - debug: +        msg: "WARNING: existing scheduler config does not match previous known defaults automated upgrade of scheduler config is disabled.\nexisting scheduler priorities: {{ openshift_master_scheduler_current_priorities }}\ncurrent scheduler default priorities are: {{ openshift_master_scheduler_default_priorities }}" +      when: +      - openshift_master_scheduler_current_priorities != openshift_master_scheduler_default_priorities +      - openshift_master_scheduler_current_priorities not in older_priorities + [prev_priorities] + +    - set_fact: +        openshift_upgrade_scheduler_priorities: "{{ openshift_master_scheduler_default_priorities }}" +      when: +      - openshift_master_scheduler_current_priorities != openshift_master_scheduler_default_priorities +      - openshift_master_scheduler_current_priorities in older_priorities + [prev_priorities] + +    - set_fact: +        openshift_upgrade_scheduler_priorities: "{{ default_priorities_no_zone }}" +      when: +      - openshift_master_scheduler_current_priorities != default_priorities_no_zone +      - openshift_master_scheduler_current_priorities in older_priorities_no_zone + [prev_priorities_no_zone] + +    when: openshift_master_scheduler_priorities | default(none) is none + + +# Update scheduler +- vars: +    scheduler_config: +      kind: Policy +      apiVersion: v1 +      predicates: "{{ openshift_upgrade_scheduler_predicates +                      | default(openshift_master_scheduler_current_predicates) }}" +      priorities: "{{ openshift_upgrade_scheduler_priorities +                      | default(openshift_master_scheduler_current_priorities) }}" +  block: +  - name: Update scheduler config +    copy: +      content: "{{ scheduler_config | to_nice_json }}" +      dest: "{{ openshift_master_scheduler_conf }}" +      backup: true +  when: > +    openshift_upgrade_scheduler_predicates is defined or +    openshift_upgrade_scheduler_priorities is defined diff --git a/roles/openshift_master/tasks/upgrade/v3_6/master_config_upgrade.yml b/roles/openshift_master/tasks/upgrade/v3_6/master_config_upgrade.yml new file mode 100644 index 000000000..db0c8f886 --- /dev/null +++ b/roles/openshift_master/tasks/upgrade/v3_6/master_config_upgrade.yml @@ -0,0 +1,15 @@ +--- +- modify_yaml: +    dest: "{{ openshift.common.config_base}}/master/master-config.yaml" +    yaml_key: 'controllerConfig.serviceServingCert.signer.certFile' +    yaml_value: service-signer.crt + +- modify_yaml: +    dest: "{{ openshift.common.config_base}}/master/master-config.yaml" +    yaml_key: 'controllerConfig.serviceServingCert.signer.keyFile' +    yaml_value: service-signer.key + +- modify_yaml: +    dest: "{{ openshift.common.config_base }}/master/master-config.yaml" +    yaml_key: servingInfo.clientCA +    yaml_value: ca.crt diff --git a/roles/openshift_master/tasks/upgrade/v3_7/master_config_upgrade.yml b/roles/openshift_master/tasks/upgrade/v3_7/master_config_upgrade.yml new file mode 100644 index 000000000..1d4d1919c --- /dev/null +++ b/roles/openshift_master/tasks/upgrade/v3_7/master_config_upgrade.yml @@ -0,0 +1,20 @@ +--- +- modify_yaml: +    dest: "{{ openshift.common.config_base}}/master/master-config.yaml" +    yaml_key: 'controllerConfig.election.lockName' +    yaml_value: 'openshift-master-controllers' + +- modify_yaml: +    dest: "{{ openshift.common.config_base}}/master/master-config.yaml" +    yaml_key: 'controllerConfig.serviceServingCert.signer.certFile' +    yaml_value: service-signer.crt + +- modify_yaml: +    dest: "{{ openshift.common.config_base}}/master/master-config.yaml" +    yaml_key: 'controllerConfig.serviceServingCert.signer.keyFile' +    yaml_value: service-signer.key + +- modify_yaml: +    dest: "{{ openshift.common.config_base }}/master/master-config.yaml" +    yaml_key: servingInfo.clientCA +    yaml_value: ca.crt  | 
