diff options
51 files changed, 545 insertions, 125 deletions
| diff --git a/.tito/packages/openshift-ansible b/.tito/packages/openshift-ansible index cbfb1fd48..e3b46d6c3 100644 --- a/.tito/packages/openshift-ansible +++ b/.tito/packages/openshift-ansible @@ -1 +1 @@ -3.7.0-0.148.0 ./ +3.7.0-0.149.0 ./ diff --git a/openshift-ansible.spec b/openshift-ansible.spec index aee30b29b..aab0633a3 100644 --- a/openshift-ansible.spec +++ b/openshift-ansible.spec @@ -10,7 +10,7 @@  Name:           openshift-ansible  Version:        3.7.0 -Release:        0.148.0%{?dist} +Release:        0.149.0%{?dist}  Summary:        Openshift and Atomic Enterprise Ansible  License:        ASL 2.0  URL:            https://github.com/openshift/openshift-ansible @@ -276,6 +276,16 @@ Atomic OpenShift Utilities includes  %changelog +* Thu Oct 12 2017 Jenkins CD Merge Bot <smunilla@redhat.com> 3.7.0-0.149.0 +- Fix broken debug_level (mgugino@redhat.com) +- Ensure host was reached for proper conditional validation +  (rteague@redhat.com) +- Ensure docker service status actually changes (mgugino@redhat.com) +- Display warnings at the end of the control plane upgrade (sdodson@redhat.com) +- Force reconciliation of role for 3.6 (simo@redhat.com) +- Remove etcd health check (sdodson@redhat.com) +- migrate embedded etcd to external etcd (jchaloup@redhat.com) +  * Wed Oct 11 2017 Jenkins CD Merge Bot <smunilla@redhat.com> 3.7.0-0.148.0  - Bug 1490647 - logging-fluentd deployed with openshift_logging_use_mux=false    fails to start due to missing (nhosoi@redhat.com) diff --git a/playbooks/byo/openshift-etcd/embedded2external.yml b/playbooks/byo/openshift-etcd/embedded2external.yml new file mode 100644 index 000000000..6690a7624 --- /dev/null +++ b/playbooks/byo/openshift-etcd/embedded2external.yml @@ -0,0 +1,6 @@ +--- +- include: ../openshift-cluster/initialize_groups.yml + +- include: ../../common/openshift-cluster/std_include.yml + +- include: ../../common/openshift-etcd/embedded2external.yml diff --git a/playbooks/common/openshift-cluster/upgrades/files/shared_resource_viewer_role.yaml b/playbooks/common/openshift-cluster/upgrades/files/shared_resource_viewer_role.yaml new file mode 100644 index 000000000..9c9c260fb --- /dev/null +++ b/playbooks/common/openshift-cluster/upgrades/files/shared_resource_viewer_role.yaml @@ -0,0 +1,37 @@ +--- +apiVersion: v1 +kind: Role +metadata: +  name: shared-resource-viewer +  namespace: openshift +rules: +- apiGroups: +  - "" +  - template.openshift.io +  attributeRestrictions: null +  resources: +  - templates +  verbs: +  - get +  - list +  - watch +- apiGroups: +  - "" +  - image.openshift.io +  attributeRestrictions: null +  resources: +  - imagestreamimages +  - imagestreams +  - imagestreamtags +  verbs: +  - get +  - list +  - watch +- apiGroups: +  - "" +  - image.openshift.io +  attributeRestrictions: null +  resources: +  - imagestreams/layers +  verbs: +  - get diff --git a/playbooks/common/openshift-cluster/upgrades/initialize_nodes_to_upgrade.yml b/playbooks/common/openshift-cluster/upgrades/initialize_nodes_to_upgrade.yml index 72de63070..fc1cbf32a 100644 --- a/playbooks/common/openshift-cluster/upgrades/initialize_nodes_to_upgrade.yml +++ b/playbooks/common/openshift-cluster/upgrades/initialize_nodes_to_upgrade.yml @@ -30,6 +30,7 @@          ansible_become: "{{ g_sudo | default(omit) }}"        with_items: " {{ groups['oo_nodes_to_config'] }}"        when: +      - hostvars[item].openshift is defined        - hostvars[item].openshift.common.hostname in nodes_to_upgrade.results.results[0]['items'] | map(attribute='metadata.name') | list        changed_when: false diff --git a/playbooks/common/openshift-cluster/upgrades/post_control_plane.yml b/playbooks/common/openshift-cluster/upgrades/post_control_plane.yml index 07e521a89..122066955 100644 --- a/playbooks/common/openshift-cluster/upgrades/post_control_plane.yml +++ b/playbooks/common/openshift-cluster/upgrades/post_control_plane.yml @@ -103,9 +103,16 @@      openshift_hosted_templates_import_command: replace  # Check for warnings to be printed at the end of the upgrade: -- name: Check for warnings +- name: Clean up and display warnings    hosts: oo_masters_to_config -  tasks: +  tags: +  - always +  gather_facts: no +  roles: +  - role: openshift_excluder +    r_openshift_excluder_action: enable +    r_openshift_excluder_service_type: "{{ openshift.common.service_type }}" +  post_tasks:    # Check if any masters are using pluginOrderOverride and warn if so, only for 1.3/3.3 and beyond:    - name: grep pluginOrderOverride      command: grep pluginOrderOverride {{ openshift.common.config_base }}/master/master-config.yaml @@ -121,12 +128,8 @@      - not grep_plugin_order_override | skipped      - grep_plugin_order_override.rc == 0 -- name: Re-enable excluder if it was previously enabled -  hosts: oo_masters_to_config -  tags: -  - always -  gather_facts: no -  roles: -  - role: openshift_excluder -    r_openshift_excluder_action: enable -    r_openshift_excluder_service_type: "{{ openshift.common.service_type }}" +  - name: Warn if shared-resource-viewer could not be updated +    debug: +      msg: "WARNING the shared-resource-viewer role could not be upgraded to 3.6 spec because it's marked protected, please see https://bugzilla.redhat.com/show_bug.cgi?id=1493213" +    when: +    - __shared_resource_viewer_protected | default(false) diff --git a/playbooks/common/openshift-cluster/upgrades/upgrade_control_plane.yml b/playbooks/common/openshift-cluster/upgrades/upgrade_control_plane.yml index da47491c1..c37a5f9ab 100644 --- a/playbooks/common/openshift-cluster/upgrades/upgrade_control_plane.yml +++ b/playbooks/common/openshift-cluster/upgrades/upgrade_control_plane.yml @@ -31,7 +31,6 @@        role: master        local_facts:          embedded_etcd: "{{ groups.oo_etcd_to_config | default([]) | length == 0 }}" -        debug_level: "{{ openshift_master_debug_level | default(openshift.common.debug_level | default(2)) }}"  - name: Upgrade and backup etcd    include: ./etcd/main.yml @@ -193,6 +192,7 @@      # Another spot where we assume docker is running and do not want to accidentally trigger an unsafe      # restart.      skip_docker_role: True +    __master_shared_resource_viewer_file: "shared_resource_viewer_role.yaml"    tasks:    - name: Reconcile Cluster Roles      command: > @@ -231,6 +231,44 @@      - reconcile_jenkins_role_binding_result.rc == 0      when: (not openshift.common.version_gte_3_7 | bool) and (openshift.common.version_gte_3_4_or_1_4 | bool) +  - when: (openshift.common.version_gte_3_6 | bool) and (not openshift.common.version_gte_3_7 | bool) +    block: +    - name: Retrieve shared-resource-viewer +      oc_obj: +        state: list +        kind: role +        name: "shared-resource-viewer" +        namespace: "openshift" +      register: objout + +    - name: Determine if shared-resource-viewer is protected +      set_fact: +        __shared_resource_viewer_protected: true +      when: +      - "'results' in objout" +      - "'results' in objout['results']" +      - "'annotations' in objout['results']['results'][0]['metadata']" +      - "'openshift.io/reconcile-protect' in objout['results']['results'][0]['metadata']['annotations']" +      - "objout['results']['results'][0]['metadata']['annotations']['openshift.io/reconcile-protect'] == 'true'" + +    - copy: +        src: "{{ item }}" +        dest: "/tmp/{{ item }}" +      with_items: +      - "{{ __master_shared_resource_viewer_file }}" +      when: __shared_resource_viewer_protected is not defined + +    - name: Fixup shared-resource-viewer role +      oc_obj: +        state: present +        kind: role +        name: "shared-resource-viewer" +        namespace: "openshift" +        files: +        - "/tmp/{{ __master_shared_resource_viewer_file }}" +        delete_after: true +      when: __shared_resource_viewer_protected is not defined +    - name: Reconcile Security Context Constraints      command: >        {{ openshift.common.client_binary }} adm policy --config={{ openshift.common.config_base }}/master/admin.kubeconfig reconcile-sccs --confirm --additive-only=true -o name diff --git a/playbooks/common/openshift-etcd/certificates.yml b/playbooks/common/openshift-etcd/certificates.yml index 31a0f50d8..eb6b94f33 100644 --- a/playbooks/common/openshift-etcd/certificates.yml +++ b/playbooks/common/openshift-etcd/certificates.yml @@ -1,29 +1,4 @@  --- -- name: Create etcd server certificates for etcd hosts -  hosts: oo_etcd_to_config -  any_errors_fatal: true -  roles: -    - role: openshift_etcd_facts -  post_tasks: -    - include_role: -        name: etcd -        tasks_from: server_certificates -      vars: -        etcd_ca_host: "{{ groups.oo_etcd_to_config.0 }}" -        etcd_peers: "{{ groups.oo_etcd_to_config | default([], true) }}" -        etcd_certificates_etcd_hosts: "{{ groups.oo_etcd_to_config | default([], true) }}" -        r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}" +- include: server_certificates.yml -- name: Create etcd client certificates for master hosts -  hosts: oo_masters_to_config -  any_errors_fatal: true -  roles: -    - role: openshift_etcd_facts -    - role: openshift_etcd_client_certificates -      etcd_ca_host: "{{ groups.oo_etcd_to_config.0 }}" -      etcd_cert_subdir: "openshift-master-{{ openshift.common.hostname }}" -      etcd_cert_config_dir: "{{ openshift.common.config_base }}/master" -      etcd_cert_prefix: "master.etcd-" -      openshift_ca_host: "{{ groups.oo_first_master.0 }}" -      r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}" -      when: groups.oo_etcd_to_config is defined and groups.oo_etcd_to_config +- include: master_etcd_certificates.yml diff --git a/playbooks/common/openshift-etcd/embedded2external.yml b/playbooks/common/openshift-etcd/embedded2external.yml new file mode 100644 index 000000000..9264f3c32 --- /dev/null +++ b/playbooks/common/openshift-etcd/embedded2external.yml @@ -0,0 +1,172 @@ +--- +- name: Pre-migrate checks +  hosts: localhost +  tasks: +  # Check there is only one etcd host +  - assert: +      that: groups.oo_etcd_to_config | default([]) | length == 1 +      msg: "[etcd] group must contain only one host" +  # Check there is only one master +  - assert: +      that: groups.oo_masters_to_config | default([]) | length == 1 +      msg: "[master] group must contain only one host" + +# 1. stop a master +- name: Prepare masters for etcd data migration +  hosts: oo_first_master +  roles: +  - role: openshift_facts +  tasks: +  - name: Check the master API is ready +    include_role: +      name: openshift_master +      tasks_from: check_master_api_is_ready +  - set_fact: +      master_service: "{{ openshift.common.service_type + '-master' }}" +      embedded_etcd_backup_suffix: "{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }}" +  - debug: +      msg: "master service name: {{ master_service }}" +  - name: Stop master +    service: +      name: "{{ master_service }}" +      state: stopped +  # 2. backup embedded etcd +  # Can't use with_items with include_role: https://github.com/ansible/ansible/issues/21285 +  - include_role: +      name: etcd +      tasks_from: backup +    vars: +      r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}" +      r_etcd_common_backup_tag: pre-migrate +      r_etcd_common_embedded_etcd: "{{ true }}" +      r_etcd_common_backup_sufix_name: "{{ embedded_etcd_backup_suffix }}" + +  - include_role: +      name: etcd +      tasks_from: backup.archive +    vars: +      r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}" +      r_etcd_common_backup_tag: pre-migrate +      r_etcd_common_embedded_etcd: "{{ true }}" +      r_etcd_common_backup_sufix_name: "{{ embedded_etcd_backup_suffix }}" + +# 3. deploy certificates (for etcd and master) +- include: ca.yml + +- include: server_certificates.yml + +- name: Backup etcd client certificates for master host +  hosts: oo_first_master +  tasks: +  - include_role: +      name: etcd +      tasks_from: backup_master_etcd_certificates + +- name: Redeploy master etcd certificates +  include: master_etcd_certificates.yml +  vars: +    etcd_certificates_redeploy: "{{ true }}" + +# 4. deploy external etcd +- include: ../openshift-etcd/config.yml + +# 5. stop external etcd +- name: Cleanse etcd +  hosts: oo_etcd_to_config[0] +  gather_facts: no +  pre_tasks: +  - include_role: +      name: etcd +      tasks_from: disable_etcd +    vars: +      r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}" +  - include_role: +      name: etcd +      tasks_from: clean_data +    vars: +      r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}" + +# 6. copy the embedded etcd backup to the external host +# TODO(jchaloup): if the etcd and first master are on the same host, just copy the directory +- name: Copy embedded etcd backup to the external host +  hosts: localhost +  tasks: +  - name: Create local temp directory for syncing etcd backup +    local_action: command mktemp -d /tmp/etcd_backup-XXXXXXX +    register: g_etcd_client_mktemp +    changed_when: False +    become: no + +  - include_role: +      name: etcd +      tasks_from: backup.fetch +    vars: +      r_etcd_common_etcd_runtime: "{{ hostvars[groups.oo_first_master.0].openshift.common.etcd_runtime }}" +      etcd_backup_sync_directory: "{{ g_etcd_client_mktemp.stdout }}" +      r_etcd_common_backup_tag: pre-migrate +      r_etcd_common_embedded_etcd: "{{ true }}" +      r_etcd_common_backup_sufix_name: "{{ hostvars[groups.oo_first_master.0].embedded_etcd_backup_suffix }}" +    delegate_to: "{{ groups.oo_first_master[0] }}" + +  - include_role: +      name: etcd +      tasks_from: backup.copy +    vars: +      r_etcd_common_etcd_runtime: "{{ hostvars[groups.oo_etcd_to_config.0].openshift.common.etcd_runtime }}" +      etcd_backup_sync_directory: "{{ g_etcd_client_mktemp.stdout }}" +      r_etcd_common_backup_tag: pre-migrate +      r_etcd_common_backup_sufix_name: "{{ hostvars[groups.oo_first_master.0].embedded_etcd_backup_suffix }}" +    delegate_to: "{{ groups.oo_etcd_to_config[0] }}" + +  - debug: +      msg: "etcd_backup_dest_directory: {{ g_etcd_client_mktemp.stdout }}" + +  - name: Delete temporary directory +    local_action: file path="{{ g_etcd_client_mktemp.stdout }}" state=absent +    changed_when: False +    become: no + +# 7. force new cluster from the backup +- name: Force new etcd cluster +  hosts: oo_etcd_to_config[0] +  tasks: +  - include_role: +      name: etcd +      tasks_from: backup.unarchive +    vars: +      r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}" +      r_etcd_common_backup_tag: pre-migrate +      r_etcd_common_backup_sufix_name: "{{ hostvars[groups.oo_first_master.0].embedded_etcd_backup_suffix }}" + +  - include_role: +      name: etcd +      tasks_from: backup.force_new_cluster +    vars: +      r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}" +      r_etcd_common_backup_tag: pre-migrate +      r_etcd_common_backup_sufix_name: "{{ hostvars[groups.oo_first_master.0].embedded_etcd_backup_suffix }}" +      etcd_peer: "{{ openshift.common.ip }}" +      etcd_url_scheme: "https" +      etcd_peer_url_scheme: "https" + +# 8. re-configure master to use the external etcd +- name: Configure master to use external etcd +  hosts: oo_first_master +  tasks: +  - include_role: +      name: openshift_master +      tasks_from: configure_external_etcd +    vars: +      etcd_peer_url_scheme: "https" +      etcd_ip: "{{ openshift.common.ip }}" +      etcd_peer_port: 2379 + +  # 9. start the master +  - name: Start master +    service: +      name: "{{ master_service }}" +      state: started +    register: service_status +    until: service_status.state is defined and service_status.state == "started" +    retries: 5 +    delay: 10 diff --git a/playbooks/common/openshift-etcd/master_etcd_certificates.yml b/playbooks/common/openshift-etcd/master_etcd_certificates.yml new file mode 100644 index 000000000..0a25aac57 --- /dev/null +++ b/playbooks/common/openshift-etcd/master_etcd_certificates.yml @@ -0,0 +1,14 @@ +--- +- name: Create etcd client certificates for master hosts +  hosts: oo_masters_to_config +  any_errors_fatal: true +  roles: +    - role: openshift_etcd_facts +    - role: openshift_etcd_client_certificates +      etcd_ca_host: "{{ groups.oo_etcd_to_config.0 }}" +      etcd_cert_subdir: "openshift-master-{{ openshift.common.hostname }}" +      etcd_cert_config_dir: "{{ openshift.common.config_base }}/master" +      etcd_cert_prefix: "master.etcd-" +      openshift_ca_host: "{{ groups.oo_first_master.0 }}" +      r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}" +      when: groups.oo_etcd_to_config is defined and groups.oo_etcd_to_config diff --git a/playbooks/common/openshift-etcd/server_certificates.yml b/playbooks/common/openshift-etcd/server_certificates.yml new file mode 100644 index 000000000..10e06747b --- /dev/null +++ b/playbooks/common/openshift-etcd/server_certificates.yml @@ -0,0 +1,15 @@ +--- +- name: Create etcd server certificates for etcd hosts +  hosts: oo_etcd_to_config +  any_errors_fatal: true +  roles: +    - role: openshift_etcd_facts +  post_tasks: +    - include_role: +        name: etcd +        tasks_from: server_certificates +      vars: +        etcd_ca_host: "{{ groups.oo_etcd_to_config.0 }}" +        etcd_peers: "{{ groups.oo_etcd_to_config | default([], true) }}" +        etcd_certificates_etcd_hosts: "{{ groups.oo_etcd_to_config | default([], true) }}" +        r_etcd_common_etcd_runtime: "{{ openshift.common.etcd_runtime }}" diff --git a/roles/docker/tasks/package_docker.yml b/roles/docker/tasks/package_docker.yml index dbe0b0d28..888ae40e7 100644 --- a/roles/docker/tasks/package_docker.yml +++ b/roles/docker/tasks/package_docker.yml @@ -139,6 +139,13 @@    notify:    - restart docker +# The following task is needed as the systemd module may report a change in +# state even though docker is already running. +- name: Detect if docker is already started +  command: "systemctl show docker -p ActiveState" +  changed_when: False +  register: r_docker_already_running_result +  - name: Start the Docker service    systemd:      name: docker @@ -151,7 +158,7 @@    delay: 30  - set_fact: -    docker_service_status_changed: "{{ r_docker_package_docker_start_result | changed }}" +    docker_service_status_changed: "{{ (r_docker_package_docker_start_result | changed) and (r_docker_already_running_result.stdout != 'ActiveState=active' ) }}"  - name: Check for credentials file for registry auth    stat: diff --git a/roles/etcd/defaults/main.yaml b/roles/etcd/defaults/main.yaml index 807b9541a..78f231416 100644 --- a/roles/etcd/defaults/main.yaml +++ b/roles/etcd/defaults/main.yaml @@ -70,7 +70,8 @@ etcd_listen_peer_urls: "{{ etcd_peer_url_scheme }}://{{ etcd_ip }}:{{ etcd_peer_  etcd_advertise_client_urls: "{{ etcd_url_scheme }}://{{ etcd_ip }}:{{ etcd_client_port }}"  etcd_listen_client_urls: "{{ etcd_url_scheme }}://{{ etcd_ip }}:{{ etcd_client_port }}" -etcd_peer: 127.0.0.1 +# required role variable +#etcd_peer: 127.0.0.1  etcdctlv2: "etcdctl --cert-file {{ etcd_peer_cert_file }} --key-file {{ etcd_peer_key_file }} --ca-file {{ etcd_peer_ca_file }} -C https://{{ etcd_peer }}:{{ etcd_client_port }}"  etcd_service: "{{ 'etcd_container' if r_etcd_common_etcd_runtime == 'docker' else 'etcd' }}" diff --git a/roles/etcd/tasks/auxiliary/clean_data.yml b/roles/etcd/tasks/auxiliary/clean_data.yml index 95a0e7c0a..1ed2db5bc 100644 --- a/roles/etcd/tasks/auxiliary/clean_data.yml +++ b/roles/etcd/tasks/auxiliary/clean_data.yml @@ -1,5 +1,5 @@  ---  - name: Remove member data    file: -    path: /var/lib/etcd/member +    path: "{{ etcd_data_dir }}/member"      state: absent diff --git a/roles/etcd/tasks/auxiliary/disable_etcd.yml b/roles/etcd/tasks/auxiliary/disable_etcd.yml new file mode 100644 index 000000000..7c6d0409d --- /dev/null +++ b/roles/etcd/tasks/auxiliary/disable_etcd.yml @@ -0,0 +1,5 @@ +--- +- name: Disable etcd members +  service: +    name: "{{ etcd_service }}" +    state: stopped diff --git a/roles/etcd/tasks/auxiliary/force_new_cluster.yml b/roles/etcd/tasks/auxiliary/force_new_cluster.yml new file mode 100644 index 000000000..ae8a36130 --- /dev/null +++ b/roles/etcd/tasks/auxiliary/force_new_cluster.yml @@ -0,0 +1,31 @@ +--- +- name: Set ETCD_FORCE_NEW_CLUSTER=true on first etcd host +  lineinfile: +    line: "ETCD_FORCE_NEW_CLUSTER=true" +    dest: /etc/etcd/etcd.conf +    backup: true + +- name: Start etcd +  systemd: +    name: "{{ etcd_service }}" +    state: started + +- name: Wait for cluster to become healthy after bringing up first member +  command: > +    etcdctl --cert-file {{ etcd_peer_cert_file }} --key-file {{ etcd_peer_key_file }} --ca-file {{ etcd_peer_ca_file }} --endpoint https://{{ etcd_peer }}:{{ etcd_client_port }} cluster-health +  register: l_etcd_migrate_health +  until: l_etcd_migrate_health.rc == 0 +  retries: 3 +  delay: 30 + +- name: Unset ETCD_FORCE_NEW_CLUSTER=true on first etcd host +  lineinfile: +    line: "ETCD_FORCE_NEW_CLUSTER=true" +    dest: /etc/etcd/etcd.conf +    state: absent +    backup: true + +- name: Restart first etcd host +  systemd: +    name: "{{ etcd_service }}" +    state: restarted diff --git a/roles/etcd/tasks/backup.archive.yml b/roles/etcd/tasks/backup.archive.yml new file mode 100644 index 000000000..6daa6dc51 --- /dev/null +++ b/roles/etcd/tasks/backup.archive.yml @@ -0,0 +1,3 @@ +--- +- include: backup/vars.yml +- include: backup/archive.yml diff --git a/roles/etcd/tasks/backup.copy.yml b/roles/etcd/tasks/backup.copy.yml new file mode 100644 index 000000000..cc540cbca --- /dev/null +++ b/roles/etcd/tasks/backup.copy.yml @@ -0,0 +1,3 @@ +--- +- include: backup/vars.yml +- include: backup/copy.yml diff --git a/roles/etcd/tasks/backup.fetch.yml b/roles/etcd/tasks/backup.fetch.yml new file mode 100644 index 000000000..26ec15043 --- /dev/null +++ b/roles/etcd/tasks/backup.fetch.yml @@ -0,0 +1,3 @@ +--- +- include: backup/vars.yml +- include: backup/fetch.yml diff --git a/roles/etcd/tasks/backup.force_new_cluster.yml b/roles/etcd/tasks/backup.force_new_cluster.yml new file mode 100644 index 000000000..24bd0540d --- /dev/null +++ b/roles/etcd/tasks/backup.force_new_cluster.yml @@ -0,0 +1,12 @@ +--- +- include: backup/vars.yml + +- name: Move content of etcd backup under the etcd data directory +  command: > +    mv "{{ l_etcd_backup_dir }}/member" "{{ l_etcd_data_dir }}" + +- name: Set etcd group for the etcd data directory +  command: > +    chown -R etcd:etcd "{{ l_etcd_data_dir }}" + +- include: auxiliary/force_new_cluster.yml diff --git a/roles/etcd/tasks/backup.unarchive.yml b/roles/etcd/tasks/backup.unarchive.yml new file mode 100644 index 000000000..77a637360 --- /dev/null +++ b/roles/etcd/tasks/backup.unarchive.yml @@ -0,0 +1,3 @@ +--- +- include: backup/vars.yml +- include: backup/unarchive.yml diff --git a/roles/etcd/tasks/backup/archive.yml b/roles/etcd/tasks/backup/archive.yml new file mode 100644 index 000000000..f6aa68a6e --- /dev/null +++ b/roles/etcd/tasks/backup/archive.yml @@ -0,0 +1,5 @@ +--- +- name: Archive backup +  archive: +    path: "{{ l_etcd_backup_dir }}" +    dest: "{{ l_etcd_backup_dir }}.tgz" diff --git a/roles/etcd/tasks/backup/backup.yml b/roles/etcd/tasks/backup/backup.yml index 42d27c081..ec1a1989c 100644 --- a/roles/etcd/tasks/backup/backup.yml +++ b/roles/etcd/tasks/backup/backup.yml @@ -1,21 +1,5 @@  --- -# set the etcd backup directory name here in case the tag or sufix consists of dynamic value that changes over time -# e.g. openshift-backup-{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }} value will change every second so if the date changes -# right after setting l_etcd_incontainer_backup_dir and before l_etcd_backup_dir facts, the backup directory name is different -- set_fact: -    l_backup_dir_name: "openshift-backup-{{ r_etcd_common_backup_tag }}{{ r_etcd_common_backup_sufix_name }}" - -- set_fact: -    l_etcd_data_dir: "{{ etcd_data_dir }}{{ '/etcd.etcd' if r_etcd_common_etcd_runtime == 'runc' else '' }}" - -- set_fact: -    l_etcd_incontainer_data_dir: "{{ etcd_data_dir }}" - -- set_fact: -    l_etcd_incontainer_backup_dir: "{{ l_etcd_incontainer_data_dir }}/{{ l_backup_dir_name }}" - -- set_fact: -    l_etcd_backup_dir: "{{ l_etcd_data_dir }}/{{ l_backup_dir_name }}" +- include: vars.yml  # TODO: replace shell module with command and update later checks  - name: Check available disk space for etcd backup diff --git a/roles/etcd/tasks/backup/copy.yml b/roles/etcd/tasks/backup/copy.yml new file mode 100644 index 000000000..16604bae8 --- /dev/null +++ b/roles/etcd/tasks/backup/copy.yml @@ -0,0 +1,5 @@ +--- +- name: Copy etcd backup +  copy: +    src: "{{ etcd_backup_sync_directory }}/{{ l_backup_dir_name }}.tgz" +    dest: "{{ l_etcd_data_dir }}" diff --git a/roles/etcd/tasks/backup/fetch.yml b/roles/etcd/tasks/backup/fetch.yml new file mode 100644 index 000000000..610ce1960 --- /dev/null +++ b/roles/etcd/tasks/backup/fetch.yml @@ -0,0 +1,8 @@ +--- +- name: Fetch etcd backup +  fetch: +    src: "{{ l_etcd_backup_dir }}.tgz" +    dest: "{{ etcd_backup_sync_directory }}/" +    flat: yes +    fail_on_missing: yes +    validate_checksum: yes diff --git a/roles/etcd/tasks/backup/unarchive.yml b/roles/etcd/tasks/backup/unarchive.yml new file mode 100644 index 000000000..6c75d00a7 --- /dev/null +++ b/roles/etcd/tasks/backup/unarchive.yml @@ -0,0 +1,14 @@ +--- +- shell: ls /var/lib/etcd +  register: output + +- debug: +    msg: "output: {{ output }}" + +- name: Unarchive backup +  # can't use unarchive https://github.com/ansible/ansible/issues/30821 +  # unarchive: +  #   src: "{{ l_etcd_backup_dir }}.tgz" +  #   dest: "{{ l_etcd_backup_dir }}" +  command: > +    tar -xf "{{ l_etcd_backup_dir }}.tgz" -C "{{ l_etcd_data_dir }}" diff --git a/roles/etcd/tasks/backup/vars.yml b/roles/etcd/tasks/backup/vars.yml new file mode 100644 index 000000000..3c009f557 --- /dev/null +++ b/roles/etcd/tasks/backup/vars.yml @@ -0,0 +1,18 @@ +--- +# set the etcd backup directory name here in case the tag or sufix consists of dynamic value that changes over time +# e.g. openshift-backup-{{ lookup('pipe', 'date +%Y%m%d%H%M%S') }} value will change every second so if the date changes +# right after setting l_etcd_incontainer_backup_dir and before l_etcd_backup_dir facts, the backup directory name is different +- set_fact: +    l_backup_dir_name: "openshift-backup-{{ r_etcd_common_backup_tag }}{{ r_etcd_common_backup_sufix_name }}" + +- set_fact: +    l_etcd_data_dir: "{{ etcd_data_dir }}{{ '/etcd.etcd' if r_etcd_common_etcd_runtime == 'runc' else '' }}" + +- set_fact: +    l_etcd_incontainer_data_dir: "{{ etcd_data_dir }}" + +- set_fact: +    l_etcd_incontainer_backup_dir: "{{ l_etcd_incontainer_data_dir }}/{{ l_backup_dir_name }}" + +- set_fact: +    l_etcd_backup_dir: "{{ l_etcd_data_dir }}/{{ l_backup_dir_name }}" diff --git a/roles/etcd/tasks/backup_master_etcd_certificates.yml b/roles/etcd/tasks/backup_master_etcd_certificates.yml new file mode 100644 index 000000000..129e1831c --- /dev/null +++ b/roles/etcd/tasks/backup_master_etcd_certificates.yml @@ -0,0 +1,2 @@ +--- +- include: certificates/backup_master_etcd_certificates.yml diff --git a/roles/etcd/tasks/certificates/backup_master_etcd_certificates.yml b/roles/etcd/tasks/certificates/backup_master_etcd_certificates.yml new file mode 100644 index 000000000..e65b3e5a2 --- /dev/null +++ b/roles/etcd/tasks/certificates/backup_master_etcd_certificates.yml @@ -0,0 +1,7 @@ +--- +- name: Backup master etcd certificates +  shell: > +    tar -czvf /etc/origin/master/master-etcd-certificate-backup-{{ ansible_date_time.epoch }}.tgz +    /etc/origin/master/master.etcd-* +  args: +    warn: no diff --git a/roles/etcd/tasks/check_cluster_health.yml b/roles/etcd/tasks/check_cluster_health.yml new file mode 100644 index 000000000..75c110972 --- /dev/null +++ b/roles/etcd/tasks/check_cluster_health.yml @@ -0,0 +1,2 @@ +--- +- include: migration/check_cluster_health.yml diff --git a/roles/etcd/tasks/disable_etcd.yml b/roles/etcd/tasks/disable_etcd.yml new file mode 100644 index 000000000..9202e6e48 --- /dev/null +++ b/roles/etcd/tasks/disable_etcd.yml @@ -0,0 +1,2 @@ +--- +- include: auxiliary/disable_etcd.yml diff --git a/roles/etcd/tasks/fetch_backup.yml b/roles/etcd/tasks/fetch_backup.yml new file mode 100644 index 000000000..513eed17a --- /dev/null +++ b/roles/etcd/tasks/fetch_backup.yml @@ -0,0 +1,8 @@ +--- +- include: backup/vars.yml + +- include: backup/archive.yml + +- include: backup/sync_backup.yml + +- include: backup/ diff --git a/roles/openshift_facts/library/openshift_facts.py b/roles/openshift_facts/library/openshift_facts.py index 215ff4b72..ba1d8f29d 100755 --- a/roles/openshift_facts/library/openshift_facts.py +++ b/roles/openshift_facts/library/openshift_facts.py @@ -1907,7 +1907,6 @@ class OpenShiftFacts(object):                                    portal_net='172.30.0.0/16',                                    client_binary='oc', admin_binary='oadm',                                    dns_domain='cluster.local', -                                  debug_level=2,                                    config_base='/etc/origin')          if 'master' in roles: diff --git a/roles/openshift_master/defaults/main.yml b/roles/openshift_master/defaults/main.yml index 73e935d3f..7e62a8c6d 100644 --- a/roles/openshift_master/defaults/main.yml +++ b/roles/openshift_master/defaults/main.yml @@ -1,4 +1,9 @@  --- +# openshift_master_defaults_in_use is a workaround to detect if we are consuming +# the plays from the role or outside of the role. +openshift_master_defaults_in_use: True +openshift_master_debug_level: "{{ debug_level | default(2) }}" +  r_openshift_master_firewall_enabled: "{{ os_firewall_enabled | default(True) }}"  r_openshift_master_use_firewalld: "{{ os_firewall_use_firewalld | default(False) }}" @@ -26,6 +31,9 @@ oreg_auth_credentials_path: "{{ r_openshift_master_data_dir }}/.docker"  oreg_auth_credentials_replace: False  l_bind_docker_reg_auth: False +containerized_svc_dir: "/usr/lib/systemd/system" +ha_svc_template_path: "native-cluster" +  # NOTE  # r_openshift_master_*_default may be defined external to this role.  # openshift_use_*, if defined, may affect other roles or play behavior. diff --git a/roles/openshift_master/tasks/check_master_api_is_ready.yml b/roles/openshift_master/tasks/check_master_api_is_ready.yml new file mode 100644 index 000000000..7e8a7a596 --- /dev/null +++ b/roles/openshift_master/tasks/check_master_api_is_ready.yml @@ -0,0 +1,14 @@ +--- +- name: Wait for API to become available +  # Using curl here since the uri module requires python-httplib2 and +  # wait_for port doesn't provide health information. +  command: > +    curl --silent --tlsv1.2 +    --cacert {{ openshift.common.config_base }}/master/ca-bundle.crt +    {{ openshift.master.api_url }}/healthz/ready +  register: l_api_available_output +  until: l_api_available_output.stdout == 'ok' +  retries: 120 +  delay: 1 +  run_once: true +  changed_when: false diff --git a/roles/openshift_master/tasks/configure_external_etcd.yml b/roles/openshift_master/tasks/configure_external_etcd.yml new file mode 100644 index 000000000..b0590ac84 --- /dev/null +++ b/roles/openshift_master/tasks/configure_external_etcd.yml @@ -0,0 +1,17 @@ +--- +- name: Remove etcdConfig section +  yedit: +    src: /etc/origin/master/master-config.yaml +    key: "etcdConfig" +    state: absent +- name: Set etcdClientInfo.ca to master.etcd-ca.crt +  yedit: +    src: /etc/origin/master/master-config.yaml +    key: etcdClientInfo.ca +    value: master.etcd-ca.crt +- name: Set etcdClientInfo.urls to the external etcd +  yedit: +    src: /etc/origin/master/master-config.yaml +    key: etcdClientInfo.urls +    value: +      - "{{ etcd_peer_url_scheme }}://{{ etcd_ip }}:{{ etcd_peer_port }}" diff --git a/roles/openshift_master/tasks/main.yml b/roles/openshift_master/tasks/main.yml index 82b4b420c..824a5886e 100644 --- a/roles/openshift_master/tasks/main.yml +++ b/roles/openshift_master/tasks/main.yml @@ -311,23 +311,7 @@  # A separate wait is required here for native HA since notifies will  # be resolved after all tasks in the role. -- name: Wait for API to become available -  # Using curl here since the uri module requires python-httplib2 and -  # wait_for port doesn't provide health information. -  command: > -    curl --silent --tlsv1.2 -    {% if openshift.common.version_gte_3_2_or_1_2 | bool %} -    --cacert {{ openshift.common.config_base }}/master/ca-bundle.crt -    {% else %} -    --cacert {{ openshift.common.config_base }}/master/ca.crt -    {% endif %} -    {{ openshift.master.api_url }}/healthz/ready -  register: l_api_available_output -  until: l_api_available_output.stdout == 'ok' -  retries: 120 -  delay: 1 -  run_once: true -  changed_when: false +- include: check_master_api_is_ready.yml    when:    - openshift.master.cluster_method == 'native'    - master_api_service_status_changed | bool diff --git a/roles/openshift_master/tasks/registry_auth.yml b/roles/openshift_master/tasks/registry_auth.yml index 2644f235e..63d483760 100644 --- a/roles/openshift_master/tasks/registry_auth.yml +++ b/roles/openshift_master/tasks/registry_auth.yml @@ -1,14 +1,4 @@  --- -# We need to setup some variables as this play might be called directly -# from outside of the role. -- set_fact: -    oreg_auth_credentials_path: "{{ r_openshift_master_data_dir }}/.docker" -  when: oreg_auth_credentials_path is not defined - -- set_fact: -    oreg_host: "{{ oreg_url.split('/')[0] if (oreg_url is defined and '.' in oreg_url.split('/')[0]) else '' }}" -  when: oreg_host is not defined -  - name: Check for credentials file for registry auth    stat:      path: "{{ oreg_auth_credentials_path }}" diff --git a/roles/openshift_master/tasks/systemd_units.yml b/roles/openshift_master/tasks/systemd_units.yml index 8de62c59a..c6abaeb9b 100644 --- a/roles/openshift_master/tasks/systemd_units.yml +++ b/roles/openshift_master/tasks/systemd_units.yml @@ -1,31 +1,6 @@  --- -# This file is included both in the openshift_master role and in the upgrade -# playbooks.  For that reason the ha_svc variables are use set_fact instead of -# the vars directory on the role. - -# This play may be consumed outside the role, we need to ensure that -# openshift_master_config_dir is set. -- name: Set openshift_master_config_dir if unset -  set_fact: -    openshift_master_config_dir: '/etc/origin/master' -  when: openshift_master_config_dir is not defined - -# This play may be consumed outside the role, we need to ensure that -# r_openshift_master_data_dir is set. -- name: Set r_openshift_master_data_dir if unset -  set_fact: -    r_openshift_master_data_dir: "{{ openshift_data_dir | default('/var/lib/origin') }}" -  when: r_openshift_master_data_dir is not defined - -- include: registry_auth.yml - -- name: Remove the legacy master service if it exists -  include: clean_systemd_units.yml - -- name: Init HA Service Info -  set_fact: -    containerized_svc_dir: "/usr/lib/systemd/system" -    ha_svc_template_path: "native-cluster" +- include: upgrade_facts.yml +  when: openshift_master_defaults_in_use is not defined  - name: Set HA Service Info for containerized installs    set_fact: @@ -34,6 +9,11 @@    when:    - openshift.common.is_containerized | bool +- include: registry_auth.yml + +- name: Remove the legacy master service if it exists +  include: clean_systemd_units.yml +  # This is the image used for both HA and non-HA clusters:  - name: Pre-pull master image    command: > diff --git a/roles/openshift_master/tasks/upgrade_facts.yml b/roles/openshift_master/tasks/upgrade_facts.yml new file mode 100644 index 000000000..f6ad438aa --- /dev/null +++ b/roles/openshift_master/tasks/upgrade_facts.yml @@ -0,0 +1,33 @@ +--- +# This file exists because we call systemd_units.yml from outside of the role +# during upgrades.  When we remove this pattern, we can probably +# eliminate most of these set_fact items. + +- name: Set openshift_master_config_dir if unset +  set_fact: +    openshift_master_config_dir: '/etc/origin/master' +  when: openshift_master_config_dir is not defined + +- name: Set r_openshift_master_data_dir if unset +  set_fact: +    r_openshift_master_data_dir: "{{ openshift_data_dir | default('/var/lib/origin') }}" +  when: r_openshift_master_data_dir is not defined + +- set_fact: +    oreg_auth_credentials_path: "{{ r_openshift_master_data_dir }}/.docker" +  when: oreg_auth_credentials_path is not defined + +- set_fact: +    oreg_host: "{{ oreg_url.split('/')[0] if (oreg_url is defined and '.' in oreg_url.split('/')[0]) else '' }}" +  when: oreg_host is not defined + +- name: Set openshift_master_debug_level +  set_fact: +    openshift_master_debug_level: "{{ debug_level | default(2) }}" +  when: +  - openshift_master_debug_level is not defined + +- name: Init HA Service Info +  set_fact: +    containerized_svc_dir: "{{ containerized_svc_dir | default('/usr/lib/systemd/system') }}" +    ha_svc_template_path: "{{ ha_svc_template_path | default('native-cluster') }}" diff --git a/roles/openshift_master/templates/atomic-openshift-master.j2 b/roles/openshift_master/templates/atomic-openshift-master.j2 index b931f1414..7ec26ceb7 100644 --- a/roles/openshift_master/templates/atomic-openshift-master.j2 +++ b/roles/openshift_master/templates/atomic-openshift-master.j2 @@ -1,4 +1,4 @@ -OPTIONS=--loglevel={{ openshift.master.debug_level | default(2) }} +OPTIONS=--loglevel={{ openshift_master_debug_level }}  CONFIG_FILE={{ openshift_master_config_file }}  {# Preserve existing OPENSHIFT_DEFAULT_REGISTRY settings in scale up runs #}  {% if openshift_master_is_scaleup_host %} diff --git a/roles/openshift_master/templates/native-cluster/atomic-openshift-master-api.j2 b/roles/openshift_master/templates/native-cluster/atomic-openshift-master-api.j2 index 63eb3ea1b..cc21b37af 100644 --- a/roles/openshift_master/templates/native-cluster/atomic-openshift-master-api.j2 +++ b/roles/openshift_master/templates/native-cluster/atomic-openshift-master-api.j2 @@ -1,4 +1,4 @@ -OPTIONS=--loglevel={{ openshift.master.debug_level }} --listen={{ 'https' if openshift.master.api_use_ssl else 'http' }}://{{ openshift.master.bind_addr }}:{{ openshift.master.api_port }} --master={{ openshift.master.loopback_api_url }} +OPTIONS=--loglevel={{ openshift_master_debug_level }} --listen={{ 'https' if openshift.master.api_use_ssl else 'http' }}://{{ openshift.master.bind_addr }}:{{ openshift.master.api_port }} --master={{ openshift.master.loopback_api_url }}  CONFIG_FILE={{ openshift_master_config_file }}  {# Preserve existing OPENSHIFT_DEFAULT_REGISTRY settings in scale up runs #}  {% if openshift_master_is_scaleup_host %} diff --git a/roles/openshift_master/templates/native-cluster/atomic-openshift-master-controllers.j2 b/roles/openshift_master/templates/native-cluster/atomic-openshift-master-controllers.j2 index 0adfd05b6..493fc510e 100644 --- a/roles/openshift_master/templates/native-cluster/atomic-openshift-master-controllers.j2 +++ b/roles/openshift_master/templates/native-cluster/atomic-openshift-master-controllers.j2 @@ -1,4 +1,4 @@ -OPTIONS=--loglevel={{ openshift.master.debug_level }} --listen={{ 'https' if openshift.master.api_use_ssl else 'http' }}://{{ openshift.master.bind_addr }}:{{ openshift.master.controllers_port }} +OPTIONS=--loglevel={{ openshift_master_debug_level }} --listen={{ 'https' if openshift.master.api_use_ssl else 'http' }}://{{ openshift.master.bind_addr }}:{{ openshift.master.controllers_port }}  CONFIG_FILE={{ openshift_master_config_file }}  {# Preserve existing OPENSHIFT_DEFAULT_REGISTRY settings in scale up runs #}  {% if openshift_master_is_scaleup_host %} diff --git a/roles/openshift_master_facts/tasks/main.yml b/roles/openshift_master_facts/tasks/main.yml index a95570d38..501be148e 100644 --- a/roles/openshift_master_facts/tasks/main.yml +++ b/roles/openshift_master_facts/tasks/main.yml @@ -34,7 +34,6 @@        cluster_method: "{{ openshift_master_cluster_method | default('native') }}"        cluster_hostname: "{{ openshift_master_cluster_hostname | default(None) }}"        cluster_public_hostname: "{{ openshift_master_cluster_public_hostname | default(None) }}" -      debug_level: "{{ openshift_master_debug_level | default(openshift.common.debug_level) }}"        api_port: "{{ openshift_master_api_port | default(None) }}"        api_url: "{{ openshift_master_api_url | default(None) }}"        api_use_ssl: "{{ openshift_master_api_use_ssl | default(None) }}" diff --git a/roles/openshift_node/defaults/main.yml b/roles/openshift_node/defaults/main.yml index 1214c08e5..298d1013f 100644 --- a/roles/openshift_node/defaults/main.yml +++ b/roles/openshift_node/defaults/main.yml @@ -1,4 +1,6 @@  --- +openshift_node_debug_level: "{{ debug_level | default(2) }}" +  r_openshift_node_firewall_enabled: "{{ os_firewall_enabled | default(True) }}"  r_openshift_node_use_firewalld: "{{ os_firewall_use_firewalld | default(False) }}" diff --git a/roles/openshift_node/tasks/config/configure-node-settings.yml b/roles/openshift_node/tasks/config/configure-node-settings.yml index 1186062eb..527580481 100644 --- a/roles/openshift_node/tasks/config/configure-node-settings.yml +++ b/roles/openshift_node/tasks/config/configure-node-settings.yml @@ -7,7 +7,7 @@      create: true    with_items:    - regex: '^OPTIONS=' -    line: "OPTIONS=--loglevel={{ openshift.node.debug_level | default(2) }}" +    line: "OPTIONS=--loglevel={{ openshift_node_debug_level }}"    - regex: '^CONFIG_FILE='      line: "CONFIG_FILE={{ openshift.common.config_base }}/node/node-config.yaml"    - regex: '^IMAGE_VERSION=' diff --git a/roles/openshift_node_facts/tasks/main.yml b/roles/openshift_node_facts/tasks/main.yml index 0d5fa664c..b45130400 100644 --- a/roles/openshift_node_facts/tasks/main.yml +++ b/roles/openshift_node_facts/tasks/main.yml @@ -11,7 +11,6 @@    - role: node      local_facts:        annotations: "{{ openshift_node_annotations | default(none) }}" -      debug_level: "{{ openshift_node_debug_level | default(openshift.common.debug_level) }}"        iptables_sync_period: "{{ openshift_node_iptables_sync_period | default(None) }}"        kubelet_args: "{{ openshift_node_kubelet_args | default(None) }}"        labels: "{{ openshift_node_labels | default(None) }}" diff --git a/roles/openshift_node_upgrade/README.md b/roles/openshift_node_upgrade/README.md index c7c0ff34a..73b98ad90 100644 --- a/roles/openshift_node_upgrade/README.md +++ b/roles/openshift_node_upgrade/README.md @@ -49,7 +49,6 @@ From openshift.node:  | Name                               |  Default Value      |                     |  |------------------------------------|---------------------|---------------------| -| openshift.node.debug_level         |---------------------|---------------------|  | openshift.node.node_image          |---------------------|---------------------|  | openshift.node.ovs_image           |---------------------|---------------------| diff --git a/roles/openshift_node_upgrade/defaults/main.yml b/roles/openshift_node_upgrade/defaults/main.yml index 6507b015d..10b4c6977 100644 --- a/roles/openshift_node_upgrade/defaults/main.yml +++ b/roles/openshift_node_upgrade/defaults/main.yml @@ -1,4 +1,6 @@  --- +openshift_node_debug_level: "{{ debug_level | default(2) }}" +  openshift_use_openshift_sdn: True  os_sdn_network_plugin_name: "redhat/openshift-ovs-subnet" diff --git a/roles/openshift_node_upgrade/tasks/config/configure-node-settings.yml b/roles/openshift_node_upgrade/tasks/config/configure-node-settings.yml index 1186062eb..527580481 100644 --- a/roles/openshift_node_upgrade/tasks/config/configure-node-settings.yml +++ b/roles/openshift_node_upgrade/tasks/config/configure-node-settings.yml @@ -7,7 +7,7 @@      create: true    with_items:    - regex: '^OPTIONS=' -    line: "OPTIONS=--loglevel={{ openshift.node.debug_level | default(2) }}" +    line: "OPTIONS=--loglevel={{ openshift_node_debug_level }}"    - regex: '^CONFIG_FILE='      line: "CONFIG_FILE={{ openshift.common.config_base }}/node/node-config.yaml"    - regex: '^IMAGE_VERSION=' diff --git a/roles/openshift_node_upgrade/tasks/systemd_units.yml b/roles/openshift_node_upgrade/tasks/systemd_units.yml index afff2f8ba..226f5290c 100644 --- a/roles/openshift_node_upgrade/tasks/systemd_units.yml +++ b/roles/openshift_node_upgrade/tasks/systemd_units.yml @@ -6,7 +6,7 @@  # - openshift.node.ovs_image  # - openshift_use_openshift_sdn  # - openshift.common.service_type -# - openshift.node.debug_level +# - openshift_node_debug_level  # - openshift.common.config_base  # - openshift.common.http_proxy  # - openshift.common.portal_net | 
