diff options
Diffstat (limited to 'roles')
| -rw-r--r-- | roles/etcd/tasks/main.yml | 3 | ||||
| -rw-r--r-- | roles/openshift_cli/meta/main.yml | 3 | ||||
| -rw-r--r-- | roles/openshift_cli/tasks/main.yml | 6 | ||||
| -rw-r--r-- | roles/openshift_cli_facts/meta/main.yml | 15 | ||||
| -rw-r--r-- | roles/openshift_cli_facts/tasks/main.yml | 6 | ||||
| -rwxr-xr-x | roles/openshift_facts/library/openshift_facts.py | 69 | ||||
| -rw-r--r-- | roles/openshift_facts/tasks/main.yml | 2 | ||||
| -rw-r--r-- | roles/openshift_master/meta/main.yml | 1 | ||||
| -rw-r--r-- | roles/openshift_master/tasks/main.yml | 65 | ||||
| -rw-r--r-- | roles/openshift_master_facts/meta/main.yml | 15 | ||||
| -rw-r--r-- | roles/openshift_master_facts/tasks/main.yml | 65 | ||||
| -rw-r--r-- | roles/openshift_node/meta/main.yml | 2 | 
12 files changed, 170 insertions, 82 deletions
| diff --git a/roles/etcd/tasks/main.yml b/roles/etcd/tasks/main.yml index 064544b03..afec6b30b 100644 --- a/roles/etcd/tasks/main.yml +++ b/roles/etcd/tasks/main.yml @@ -39,7 +39,8 @@  - name: Check for etcd service presence    command: systemctl show etcd.service    register: etcd_show -   +  changed_when: false +  - name: Mask system etcd when containerized    when: openshift.common.is_containerized | bool and 'LoadState=not-found' not in etcd_show.stdout    command: systemctl mask etcd diff --git a/roles/openshift_cli/meta/main.yml b/roles/openshift_cli/meta/main.yml index 62de120c6..2c982e278 100644 --- a/roles/openshift_cli/meta/main.yml +++ b/roles/openshift_cli/meta/main.yml @@ -12,6 +12,7 @@ galaxy_info:    categories:    - cloud  dependencies: -- role: openshift_common  - role: openshift_docker    when: openshift.common.is_containerized | bool +- role: openshift_common +- role: openshift_cli_facts diff --git a/roles/openshift_cli/tasks/main.yml b/roles/openshift_cli/tasks/main.yml index e82903b81..bfa60e5b0 100644 --- a/roles/openshift_cli/tasks/main.yml +++ b/roles/openshift_cli/tasks/main.yml @@ -1,10 +1,4 @@  --- -# TODO: move this to a new 'cli' role -- openshift_facts: -    role: common -    local_facts: -      cli_image: "{{ osm_image | default(None) }}" -  - name: Install clients    action: "{{ ansible_pkg_mgr }} name={{ openshift.common.service_type }}-clients state=present"    when: not openshift.common.is_containerized | bool diff --git a/roles/openshift_cli_facts/meta/main.yml b/roles/openshift_cli_facts/meta/main.yml new file mode 100644 index 000000000..59acde215 --- /dev/null +++ b/roles/openshift_cli_facts/meta/main.yml @@ -0,0 +1,15 @@ +--- +galaxy_info: +  author: Jason DeTiberus +  description: OpenShift CLI Facts +  company: Red Hat, Inc. +  license: Apache License, Version 2.0 +  min_ansible_version: 1.9 +  platforms: +  - name: EL +    versions: +    - 7 +  categories: +  - cloud +dependencies: +- role: openshift_facts diff --git a/roles/openshift_cli_facts/tasks/main.yml b/roles/openshift_cli_facts/tasks/main.yml new file mode 100644 index 000000000..dd1ed8965 --- /dev/null +++ b/roles/openshift_cli_facts/tasks/main.yml @@ -0,0 +1,6 @@ +--- +# TODO: move this to a new 'cli' role +- openshift_facts: +    role: common +    local_facts: +      cli_image: "{{ osm_image | default(None) }}" diff --git a/roles/openshift_facts/library/openshift_facts.py b/roles/openshift_facts/library/openshift_facts.py index 02e5f161a..8411687a4 100755 --- a/roles/openshift_facts/library/openshift_facts.py +++ b/roles/openshift_facts/library/openshift_facts.py @@ -26,6 +26,8 @@ from distutils.util import strtobool  from distutils.version import LooseVersion  import struct  import socket +from dbus import SystemBus, Interface +from dbus.exceptions import DBusException  def migrate_docker_facts(facts): @@ -745,8 +747,9 @@ def set_version_facts_if_unset(facts):      """      if 'common' in facts:          deployment_type = facts['common']['deployment_type'] -        facts['common']['version'] = version = get_openshift_version(facts) +        version = get_openshift_version(facts)          if version is not None: +            facts['common']['version'] = version              if deployment_type == 'origin':                  version_gte_3_1_or_1_1 = LooseVersion(version) >= LooseVersion('1.1.0')                  version_gte_3_1_1_or_1_1_1 = LooseVersion(version) >= LooseVersion('1.1.1') @@ -965,6 +968,50 @@ def build_api_server_args(facts):              facts = merge_facts({'master': {'api_server_args': api_server_args}}, facts, [], [])      return facts +def is_service_running(service): +    """ Queries systemd through dbus to see if the service is running """ +    service_running = False +    bus = SystemBus() +    systemd = bus.get_object('org.freedesktop.systemd1', '/org/freedesktop/systemd1') +    manager = Interface(systemd, dbus_interface='org.freedesktop.systemd1.Manager') +    try: +        service_unit = service if service.endswith('.service') else manager.GetUnit('{0}.service'.format(service)) +        service_proxy = bus.get_object('org.freedesktop.systemd1', str(service_unit)) +        service_properties = Interface(service_proxy, dbus_interface='org.freedesktop.DBus.Properties') +        service_load_state = service_properties.Get('org.freedesktop.systemd1.Unit', 'LoadState') +        service_active_state = service_properties.Get('org.freedesktop.systemd1.Unit', 'ActiveState') +        if service_load_state == 'loaded' and service_active_state == 'active': +            service_running = True +    except DBusException: +        pass + +    return service_running + +def get_version_output(binary, version_cmd): +    """ runs and returns the version output for a command """ +    cmd = [] +    for item in (binary, version_cmd): +        if isinstance(item, list): +            cmd.extend(item) +        else: +            cmd.append(item) + +    if os.path.isfile(cmd[0]): +        _, output, _ = module.run_command(cmd) +    return output + +def get_docker_version_info(): +    """ Parses and returns the docker version info """ +    result = None +    if is_service_running('docker'): +        version_info = yaml.safe_load(get_version_output('/usr/bin/docker', 'version')) +        if 'Server' in version_info: +            result = { +                'api_version': version_info['Server']['API version'], +                'version': version_info['Server']['Version'] +            } +    return result +  def get_openshift_version(facts, cli_image=None):      """ Get current version of openshift on the host @@ -1006,9 +1053,10 @@ def get_openshift_version(facts, cli_image=None):          if version is None and cli_image is not None:              # Assume we haven't installed the environment yet and we need -            # to query the latest image -            exit_code, output, _ = module.run_command(['docker', 'run', '--rm', cli_image, 'version']) -            version = parse_openshift_version(output) +            # to query the latest image, but only if docker is installed +            if 'docker' in facts and 'version' in facts['docker']: +                exit_code, output, _ = module.run_command(['docker', 'run', '--rm', cli_image, 'version']) +                version = parse_openshift_version(output)      return version @@ -1257,8 +1305,10 @@ def set_container_facts_if_unset(facts):      if safe_get_bool(facts['common']['is_containerized']):          facts['common']['admin_binary'] = '/usr/local/bin/oadm'          facts['common']['client_binary'] = '/usr/local/bin/oc' -        base_version = get_openshift_version(facts, cli_image).split('-')[0] -        facts['common']['image_tag'] = "v" + base_version +        openshift_version = get_openshift_version(facts, cli_image) +        if openshift_version is not None: +            base_version = openshift_version.split('-')[0] +            facts['common']['image_tag'] = "v" + base_version      return facts @@ -1466,7 +1516,12 @@ class OpenShiftFacts(object):                                      set_node_ip=False)          if 'docker' in roles: -            defaults['docker'] = dict(disable_push_dockerhub=False) +            docker = dict(disable_push_dockerhub=False) +            version_info = get_docker_version_info() +            if version_info is not None: +                docker['api_version'] = version_info['api_version'] +                docker['version'] = version_info['version'] +            defaults['docker'] = docker          if 'cloudprovider' in roles:              defaults['cloudprovider'] = dict(kind=None) diff --git a/roles/openshift_facts/tasks/main.yml b/roles/openshift_facts/tasks/main.yml index 50e7e5747..a2eb27fbb 100644 --- a/roles/openshift_facts/tasks/main.yml +++ b/roles/openshift_facts/tasks/main.yml @@ -30,6 +30,6 @@        cluster_id: "{{ openshift_cluster_id | default('default') }}"        hostname: "{{ openshift_hostname | default(None) }}"        ip: "{{ openshift_ip | default(None) }}" -      is_containerized: "{{ containerized | default(None) }}" +      is_containerized: "{{ l_is_containerized | default(None) }}"        public_hostname: "{{ openshift_public_hostname | default(None) }}"        public_ip: "{{ openshift_public_ip | default(None) }}" diff --git a/roles/openshift_master/meta/main.yml b/roles/openshift_master/meta/main.yml index df96dd901..8ae6bc371 100644 --- a/roles/openshift_master/meta/main.yml +++ b/roles/openshift_master/meta/main.yml @@ -14,3 +14,4 @@ galaxy_info:  dependencies:  - role: openshift_cli  - role: openshift_cloud_provider +- role: openshift_master_facts diff --git a/roles/openshift_master/tasks/main.yml b/roles/openshift_master/tasks/main.yml index e64339ea6..79b68dc3c 100644 --- a/roles/openshift_master/tasks/main.yml +++ b/roles/openshift_master/tasks/main.yml @@ -23,71 +23,6 @@      msg: "Pacemaker based HA is not supported at this time when used with containerized installs"    when: openshift_master_ha | bool and openshift_master_cluster_method == "pacemaker" and openshift.common.is_containerized | bool -- name: Set master facts -  openshift_facts: -    role: master -    local_facts: -      cluster_method: "{{ openshift_master_cluster_method | default(None) }}" -      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) }}" -      public_api_url: "{{ openshift_master_public_api_url | default(None) }}" -      console_path: "{{ openshift_master_console_path | default(None) }}" -      console_port: "{{ openshift_master_console_port | default(None) }}" -      console_url: "{{ openshift_master_console_url | default(None) }}" -      console_use_ssl: "{{ openshift_master_console_use_ssl | default(None) }}" -      public_console_url: "{{ openshift_master_public_console_url | default(None) }}" -      logging_public_url: "{{ openshift_master_logging_public_url | default(None) }}" -      metrics_public_url: "{{ openshift_master_metrics_public_url | default(None) }}" -      logout_url: "{{ openshift_master_logout_url | default(None) }}" -      extension_scripts: "{{ openshift_master_extension_scripts | default(None) }}" -      extension_stylesheets: "{{ openshift_master_extension_stylesheets | default(None) }}" -      extensions: "{{ openshift_master_extensions | default(None) }}" -      oauth_template: "{{ openshift_master_oauth_template | default(None) }}" -      etcd_hosts: "{{ openshift_master_etcd_hosts | default(None) }}" -      etcd_port: "{{ openshift_master_etcd_port | default(None) }}" -      etcd_use_ssl: "{{ openshift_master_etcd_use_ssl | default(None) }}" -      etcd_urls: "{{ openshift_master_etcd_urls | default(None) }}" -      embedded_etcd: "{{ openshift_master_embedded_etcd | default(None) }}" -      embedded_kube: "{{ openshift_master_embedded_kube | default(None) }}" -      embedded_dns: "{{ openshift_master_embedded_dns | default(None) }}" -      dns_port: "{{ openshift_master_dns_port | default(None) }}" -      bind_addr: "{{ openshift_master_bind_addr | default(None) }}" -      pod_eviction_timeout: "{{ openshift_master_pod_eviction_timeout | default(None) }}" -      portal_net: "{{ openshift_master_portal_net | default(None) }}" -      session_max_seconds: "{{ openshift_master_session_max_seconds | default(None) }}" -      session_name: "{{ openshift_master_session_name | default(None) }}" -      session_secrets_file: "{{ openshift_master_session_secrets_file | default(None) }}" -      session_auth_secrets: "{{ openshift_master_session_auth_secrets | default(None) }}" -      session_encryption_secrets: "{{ openshift_master_session_encryption_secrets | default(None) }}" -      access_token_max_seconds: "{{ openshift_master_access_token_max_seconds | default(None) }}" -      auth_token_max_seconds: "{{ openshift_master_auth_token_max_seconds | default(None) }}" -      identity_providers: "{{ openshift_master_identity_providers | default(None) }}" -      registry_url: "{{ oreg_url | default(None) }}" -      oauth_grant_method: "{{ openshift_master_oauth_grant_method | default(None) }}" -      sdn_cluster_network_cidr: "{{ osm_cluster_network_cidr | default(None) }}" -      sdn_host_subnet_length: "{{ osm_host_subnet_length | default(None) }}" -      default_subdomain: "{{ openshift_master_default_subdomain | default(osm_default_subdomain) | default(None) }}" -      custom_cors_origins: "{{ osm_custom_cors_origins | default(None) }}" -      default_node_selector: "{{ osm_default_node_selector | default(None) }}" -      project_request_message: "{{ osm_project_request_message | default(None) }}" -      project_request_template: "{{ osm_project_request_template | default(None) }}" -      mcs_allocator_range: "{{ osm_mcs_allocator_range | default(None) }}" -      mcs_labels_per_project: "{{ osm_mcs_labels_per_project | default(None) }}" -      uid_allocator_range: "{{ osm_uid_allocator_range | default(None) }}" -      router_selector: "{{ openshift_router_selector | default(None) }}" -      registry_selector: "{{ openshift_registry_selector | default(None) }}" -      api_server_args: "{{ osm_api_server_args | default(None) }}" -      controller_args: "{{ osm_controller_args | default(None) }}" -      infra_nodes: "{{ openshift_infra_nodes | default(None) }}" -      disabled_features: "{{ osm_disabled_features | default(None) }}" -      master_count: "{{ openshift_master_count | default(None) }}" -      controller_lease_ttl: "{{ osm_controller_lease_ttl | default(None) }}" -      master_image: "{{ osm_image | default(None) }}" -  - name: Install Master package    action: "{{ ansible_pkg_mgr }} name={{ openshift.common.service_type }}-master{{ openshift_version  }} state=present"    when: not openshift.common.is_containerized | bool diff --git a/roles/openshift_master_facts/meta/main.yml b/roles/openshift_master_facts/meta/main.yml new file mode 100644 index 000000000..9dbf719f8 --- /dev/null +++ b/roles/openshift_master_facts/meta/main.yml @@ -0,0 +1,15 @@ +--- +galaxy_info: +  author: Jason DeTiberus +  description: OpenShift Master Facts +  company: Red Hat, Inc. +  license: Apache License, Version 2.0 +  min_ansible_version: 1.9 +  platforms: +  - name: EL +    versions: +    - 7 +  categories: +  - cloud +dependencies: +- role: openshift_facts diff --git a/roles/openshift_master_facts/tasks/main.yml b/roles/openshift_master_facts/tasks/main.yml new file mode 100644 index 000000000..67a938ddc --- /dev/null +++ b/roles/openshift_master_facts/tasks/main.yml @@ -0,0 +1,65 @@ +--- +- name: Set master facts +  openshift_facts: +    role: master +    local_facts: +      cluster_method: "{{ openshift_master_cluster_method | default(None) }}" +      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) }}" +      public_api_url: "{{ openshift_master_public_api_url | default(None) }}" +      console_path: "{{ openshift_master_console_path | default(None) }}" +      console_port: "{{ openshift_master_console_port | default(None) }}" +      console_url: "{{ openshift_master_console_url | default(None) }}" +      console_use_ssl: "{{ openshift_master_console_use_ssl | default(None) }}" +      public_console_url: "{{ openshift_master_public_console_url | default(None) }}" +      logging_public_url: "{{ openshift_master_logging_public_url | default(None) }}" +      metrics_public_url: "{{ openshift_master_metrics_public_url | default(None) }}" +      logout_url: "{{ openshift_master_logout_url | default(None) }}" +      extension_scripts: "{{ openshift_master_extension_scripts | default(None) }}" +      extension_stylesheets: "{{ openshift_master_extension_stylesheets | default(None) }}" +      extensions: "{{ openshift_master_extensions | default(None) }}" +      oauth_template: "{{ openshift_master_oauth_template | default(None) }}" +      etcd_hosts: "{{ openshift_master_etcd_hosts | default(None) }}" +      etcd_port: "{{ openshift_master_etcd_port | default(None) }}" +      etcd_use_ssl: "{{ openshift_master_etcd_use_ssl | default(None) }}" +      etcd_urls: "{{ openshift_master_etcd_urls | default(None) }}" +      embedded_etcd: "{{ openshift_master_embedded_etcd | default(None) }}" +      embedded_kube: "{{ openshift_master_embedded_kube | default(None) }}" +      embedded_dns: "{{ openshift_master_embedded_dns | default(None) }}" +      dns_port: "{{ openshift_master_dns_port | default(None) }}" +      bind_addr: "{{ openshift_master_bind_addr | default(None) }}" +      pod_eviction_timeout: "{{ openshift_master_pod_eviction_timeout | default(None) }}" +      portal_net: "{{ openshift_master_portal_net | default(None) }}" +      session_max_seconds: "{{ openshift_master_session_max_seconds | default(None) }}" +      session_name: "{{ openshift_master_session_name | default(None) }}" +      session_secrets_file: "{{ openshift_master_session_secrets_file | default(None) }}" +      session_auth_secrets: "{{ openshift_master_session_auth_secrets | default(None) }}" +      session_encryption_secrets: "{{ openshift_master_session_encryption_secrets | default(None) }}" +      access_token_max_seconds: "{{ openshift_master_access_token_max_seconds | default(None) }}" +      auth_token_max_seconds: "{{ openshift_master_auth_token_max_seconds | default(None) }}" +      identity_providers: "{{ openshift_master_identity_providers | default(None) }}" +      registry_url: "{{ oreg_url | default(None) }}" +      oauth_grant_method: "{{ openshift_master_oauth_grant_method | default(None) }}" +      sdn_cluster_network_cidr: "{{ osm_cluster_network_cidr | default(None) }}" +      sdn_host_subnet_length: "{{ osm_host_subnet_length | default(None) }}" +      default_subdomain: "{{ openshift_master_default_subdomain | default(osm_default_subdomain) | default(None) }}" +      custom_cors_origins: "{{ osm_custom_cors_origins | default(None) }}" +      default_node_selector: "{{ osm_default_node_selector | default(None) }}" +      project_request_message: "{{ osm_project_request_message | default(None) }}" +      project_request_template: "{{ osm_project_request_template | default(None) }}" +      mcs_allocator_range: "{{ osm_mcs_allocator_range | default(None) }}" +      mcs_labels_per_project: "{{ osm_mcs_labels_per_project | default(None) }}" +      uid_allocator_range: "{{ osm_uid_allocator_range | default(None) }}" +      router_selector: "{{ openshift_router_selector | default(None) }}" +      registry_selector: "{{ openshift_registry_selector | default(None) }}" +      api_server_args: "{{ osm_api_server_args | default(None) }}" +      controller_args: "{{ osm_controller_args | default(None) }}" +      infra_nodes: "{{ openshift_infra_nodes | default(None) }}" +      disabled_features: "{{ osm_disabled_features | default(None) }}" +      master_count: "{{ openshift_master_count | default(None) }}" +      controller_lease_ttl: "{{ osm_controller_lease_ttl | default(None) }}" +      master_image: "{{ osm_image | default(None) }}" diff --git a/roles/openshift_node/meta/main.yml b/roles/openshift_node/meta/main.yml index 62a8480c8..84ba9ac2e 100644 --- a/roles/openshift_node/meta/main.yml +++ b/roles/openshift_node/meta/main.yml @@ -12,6 +12,6 @@ galaxy_info:    categories:    - cloud  dependencies: -- role: openshift_common  - role: openshift_docker  - role: openshift_cloud_provider +- role: openshift_common | 
