summaryrefslogtreecommitdiffstats
path: root/playbooks/init/facts.yml
blob: 91223d368ab5298961734595c2bf10e2e9d737b6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
---
- name: Ensure that all non-node hosts are accessible
  hosts: oo_masters_to_config:oo_etcd_to_config:oo_lb_to_config:oo_nfs_to_config
  any_errors_fatal: true
  tasks:

- name: Initialize host facts
  hosts: oo_all_hosts
  tasks:
  - name: load openshift_facts module
    include_role:
      name: openshift_facts
    static: yes

  # TODO: Should this role be refactored into health_checks??
  - name: Run openshift_sanitize_inventory to set variables
    include_role:
      name: openshift_sanitize_inventory

  - name: Detecting Operating System from ostree_booted
    stat:
      path: /run/ostree-booted
    register: ostree_booted

  # Locally setup containerized facts for now
  - name: initialize_facts set fact l_is_atomic
    set_fact:
      l_is_atomic: "{{ ostree_booted.stat.exists }}"

  - name: initialize_facts set fact for containerized and l_is_*_system_container
    set_fact:
      l_is_containerized: "{{ (l_is_atomic | bool) or (containerized | default(false) | bool) }}"
      l_is_openvswitch_system_container: "{{ (openshift_use_openvswitch_system_container | default(openshift_use_system_containers | default(false)) | bool) }}"
      l_is_node_system_container: "{{ (openshift_use_node_system_container | default(openshift_use_system_containers | default(false)) | bool) }}"
      l_is_master_system_container: "{{ (openshift_use_master_system_container | default(openshift_use_system_containers | default(false)) | bool) }}"
      l_is_etcd_system_container: "{{ (openshift_use_etcd_system_container | default(openshift_use_system_containers | default(false)) | bool) }}"

  - name: initialize_facts set facts for l_any_system_container
    set_fact:
      l_any_system_container: "{{ l_is_etcd_system_container or l_is_openvswitch_system_container or l_is_node_system_container or l_is_master_system_container }}"

  - name: initialize_facts set fact for l_etcd_runtime
    set_fact:
      l_etcd_runtime: "{{ 'runc' if l_is_etcd_system_container else 'docker' if l_is_containerized else 'host' }}"

  # TODO: Should this be moved into health checks??
  # Seems as though any check that happens with a corresponding fail should move into health_checks
  - name: Validate python version - ans_dist is fedora and python is v3
    fail:
      msg: |
        openshift-ansible requires Python 3 for {{ ansible_distribution }};
        For information on enabling Python 3 with Ansible, see https://docs.ansible.com/ansible/python_3_support.html
    when:
    - ansible_distribution == 'Fedora'
    - ansible_python['version']['major'] != 3

  # TODO: Should this be moved into health checks??
  # Seems as though any check that happens with a corresponding fail should move into health_checks
  - name: Validate python version - ans_dist not Fedora and python must be v2
    fail:
      msg: "openshift-ansible requires Python 2 for {{ ansible_distribution }}"
    when:
    - ansible_distribution != 'Fedora'
    - ansible_python['version']['major'] != 2

  # TODO: Should this be moved into health checks??
  # Seems as though any check that happens with a corresponding fail should move into health_checks
  # Fail as early as possible if Atomic and old version of Docker
  - when:
    - l_is_atomic | bool
    block:

    # See https://access.redhat.com/articles/2317361
    # and https://github.com/ansible/ansible/issues/15892
    # NOTE: the "'s can not be removed at this level else the docker command will fail
    # NOTE: When ansible >2.2.1.x is used this can be updated per
    # https://github.com/openshift/openshift-ansible/pull/3475#discussion_r103525121
    - name: Determine Atomic Host Docker Version
      shell: 'CURLY="{"; docker version --format "$CURLY{json .Server.Version}}"'
      register: l_atomic_docker_version

    - name: assert atomic host docker version is 1.12 or later
      assert:
        that:
        - l_atomic_docker_version.stdout | replace('"', '') | version_compare('1.12','>=')
        msg: Installation on Atomic Host requires Docker 1.12 or later. Please upgrade and restart the Atomic Host.

  - when:
    - not l_is_atomic | bool
    block:
    - name: Ensure openshift-ansible installer package deps are installed
      package:
        name: "{{ item }}"
        state: present
      with_items:
      - iproute
      - "{{ 'python3-dbus' if ansible_distribution == 'Fedora' else 'dbus-python' }}"
      - "{{ 'python3-PyYAML' if ansible_distribution == 'Fedora' else 'PyYAML' }}"
      - yum-utils

    - name: Ensure various deps for running system containers are installed
      package:
        name: "{{ item }}"
        state: present
      with_items:
      - atomic
      - ostree
      - runc
      when:
      - l_any_system_container | bool

  - name: Default system_images_registry to a enterprise registry
    set_fact:
      system_images_registry: "registry.access.redhat.com"
    when:
    - system_images_registry is not defined
    - openshift_deployment_type == "openshift-enterprise"

  - name: Default system_images_registry to community registry
    set_fact:
      system_images_registry: "docker.io"
    when:
    - system_images_registry is not defined
    - openshift_deployment_type == "origin"

  - name: Gather Cluster facts and set is_containerized if needed
    openshift_facts:
      role: common
      local_facts:
        deployment_type: "{{ openshift_deployment_type }}"
        deployment_subtype: "{{ openshift_deployment_subtype | default(None) }}"
        cli_image: "{{ osm_image | default(None) }}"
        hostname: "{{ openshift_hostname | default(None) }}"
        ip: "{{ openshift_ip | default(None) }}"
        is_containerized: "{{ l_is_containerized | default(None) }}"
        is_openvswitch_system_container: "{{ l_is_openvswitch_system_container | default(false) }}"
        is_node_system_container: "{{ l_is_node_system_container | default(false) }}"
        is_master_system_container: "{{ l_is_master_system_container | default(false) }}"
        is_etcd_system_container: "{{ l_is_etcd_system_container | default(false) }}"
        etcd_runtime: "{{ l_etcd_runtime }}"
        system_images_registry: "{{ system_images_registry }}"
        public_hostname: "{{ openshift_public_hostname | default(None) }}"
        public_ip: "{{ openshift_public_ip | default(None) }}"
        portal_net: "{{ openshift_portal_net | default(openshift_master_portal_net) | default(None) }}"
        http_proxy: "{{ openshift_http_proxy | default(None) }}"
        https_proxy: "{{ openshift_https_proxy | default(None) }}"
        no_proxy: "{{ openshift_no_proxy | default(None) }}"
        generate_no_proxy_hosts: "{{ openshift_generate_no_proxy_hosts | default(True) }}"

  - name: Set fact of no_proxy_internal_hostnames
    openshift_facts:
      role: common
      local_facts:
        no_proxy_internal_hostnames: "{{ hostvars | oo_select_keys(groups['oo_nodes_to_config']
                                             | union(groups['oo_masters_to_config'])
                                             | union(groups['oo_etcd_to_config'] | default([])))
                                         | oo_collect('openshift.common.hostname') | default([]) | join (',')
                                         }}"
    when:
    - openshift_http_proxy is defined or openshift_https_proxy is defined
    - openshift_generate_no_proxy_hosts | default(True) | bool

  - name: initialize_facts set_fact repoquery command
    set_fact:
      repoquery_cmd: "{{ 'dnf repoquery --latest-limit 1 -d 0' if ansible_pkg_mgr == 'dnf' else 'repoquery --plugins' }}"

  - name: initialize_facts set_fact on openshift_docker_hosted_registry_network
    set_fact:
      openshift_docker_hosted_registry_network: "{{ '' if 'oo_first_master' not in groups else hostvars[groups.oo_first_master.0].openshift.common.portal_net }}"