diff options
39 files changed, 605 insertions, 56 deletions
diff --git a/files/origin-components/console-config.yaml b/files/origin-components/console-config.yaml new file mode 100644 index 000000000..8f3f87c0b --- /dev/null +++ b/files/origin-components/console-config.yaml @@ -0,0 +1,21 @@ +kind: AssetConfig +apiVersion: v1 +extensionDevelopment: false +extensionProperties: null +extensionScripts: null +extensionStylesheets: null +extensions: null +loggingPublicURL: "" +logoutURL: "" +masterPublicURL: https://127.0.0.1:8443 +metricsPublicURL: "" +publicURL: https://127.0.0.1:8443/console/ +servingInfo: +  bindAddress: 0.0.0.0:8443 +  bindNetwork: tcp4 +  certFile: /var/serving-cert/tls.crt +  clientCA: "" +  keyFile: /var/serving-cert/tls.key +  maxRequestsInFlight: 0 +  namedCertificates: null +  requestTimeoutSeconds: 0
\ No newline at end of file diff --git a/files/origin-components/console-template.yaml b/files/origin-components/console-template.yaml new file mode 100644 index 000000000..b2a6569fd --- /dev/null +++ b/files/origin-components/console-template.yaml @@ -0,0 +1,114 @@ +apiVersion: template.openshift.io/v1 +kind: Template +metadata: +  name: openshift-web-console +  annotations: +    openshift.io/display-name: OpenShift Web Console +    description: The server for the OpenShift web console. +    iconClass: icon-openshift +    tags: openshift,infra +    openshift.io/documentation-url: https://github.com/openshift/origin-web-console-server +    openshift.io/support-url: https://access.redhat.com +    openshift.io/provider-display-name: Red Hat, Inc. +parameters: +- name: IMAGE +  value: openshift/origin-web-console:latest +- name: NAMESPACE +  value: openshift-web-console +- name: LOGLEVEL +  value: "0" +- name: API_SERVER_CONFIG +- name: NODE_SELECTOR +  value: "{}" +- name: REPLICA_COUNT +  value: "1" +objects: + +# to create the web console server +- apiVersion: apps/v1beta1 +  kind: Deployment +  metadata: +    namespace: ${NAMESPACE} +    name: webconsole +    labels: +      app: openshift-web-console +      webconsole: "true" +  spec: +    replicas: "${{REPLICA_COUNT}}" +    strategy: +      type: Recreate +    template: +      metadata: +        name: webconsole +        labels: +          webconsole: "true" +      spec: +        serviceAccountName: webconsole +        containers: +        - name: webconsole +          image: ${IMAGE} +          imagePullPolicy: IfNotPresent +          command: +          - "/usr/bin/origin-web-console" +          - "--audit-log-path=-" +          - "--config=/var/webconsole-config/webconsole-config.yaml" +          ports: +          - containerPort: 8443 +          volumeMounts: +          - mountPath: /var/serving-cert +            name: serving-cert +          - mountPath: /var/webconsole-config +            name: webconsole-config +          readinessProbe: +            httpGet: +              path: /healthz +              port: 8443 +              scheme: HTTPS +        nodeSelector: "${{NODE_SELECTOR}}" +        volumes: +        - name: serving-cert +          secret: +            defaultMode: 420 +            secretName: webconsole-serving-cert +        - name: webconsole-config +          configMap: +            defaultMode: 420 +            name: webconsole-config + +# to create the config for the web console +- apiVersion: v1 +  kind: ConfigMap +  metadata: +    namespace: ${NAMESPACE} +    name: webconsole-config +    labels: +      app: openshift-web-console +  data: +    webconsole-config.yaml: ${API_SERVER_CONFIG} + +# to be able to assign powers to the process +- apiVersion: v1 +  kind: ServiceAccount +  metadata: +    namespace: ${NAMESPACE} +    name: webconsole +    labels: +      app: openshift-web-console + +# to be able to expose web console inside the cluster +- apiVersion: v1 +  kind: Service +  metadata: +    namespace: ${NAMESPACE} +    name: webconsole +    labels: +      app: openshift-web-console +    annotations: +      service.alpha.openshift.io/serving-cert-secret-name: webconsole-serving-cert +  spec: +    selector: +      webconsole: "true" +    ports: +    - name: https +      port: 443 +      targetPort: 8443 diff --git a/playbooks/deploy_cluster.yml b/playbooks/deploy_cluster.yml index 0e6bde09a..5efdc486a 100644 --- a/playbooks/deploy_cluster.yml +++ b/playbooks/deploy_cluster.yml @@ -22,6 +22,9 @@  - import_playbook: openshift-hosted/private/config.yml +- import_playbook: openshift-web-console/private/config.yml +  when: openshift_web_console_install | default(true) | bool +  - import_playbook: openshift-metrics/private/config.yml    when: openshift_metrics_install_metrics | default(false) | bool diff --git a/playbooks/openshift-logging/private/config.yml b/playbooks/openshift-logging/private/config.yml index d5256f55c..d6b26647c 100644 --- a/playbooks/openshift-logging/private/config.yml +++ b/playbooks/openshift-logging/private/config.yml @@ -16,6 +16,7 @@    roles:    - openshift_logging +# TODO: Remove when master config property is removed  - name: Update Master configs    hosts: oo_masters:!oo_first_master    tasks: diff --git a/playbooks/openshift-metrics/private/config.yml b/playbooks/openshift-metrics/private/config.yml index 327f034d3..1e237e3f0 100644 --- a/playbooks/openshift-metrics/private/config.yml +++ b/playbooks/openshift-metrics/private/config.yml @@ -16,6 +16,7 @@    roles:    - role: openshift_metrics +# TODO: Remove when master config property is removed  - name: OpenShift Metrics    hosts: oo_masters:!oo_first_master    serial: 1 diff --git a/playbooks/openshift-web-console/config.yml b/playbooks/openshift-web-console/config.yml new file mode 100644 index 000000000..c7814207c --- /dev/null +++ b/playbooks/openshift-web-console/config.yml @@ -0,0 +1,4 @@ +--- +- import_playbook: ../init/main.yml + +- import_playbook: private/config.yml diff --git a/playbooks/openshift-web-console/private/config.yml b/playbooks/openshift-web-console/private/config.yml new file mode 100644 index 000000000..ffd702d20 --- /dev/null +++ b/playbooks/openshift-web-console/private/config.yml @@ -0,0 +1,31 @@ +--- +- name: Web Console Install Checkpoint Start +  hosts: all +  gather_facts: false +  tasks: +  - name: Set Web Console install 'In Progress' +    run_once: true +    set_stats: +      data: +        installer_phase_web_console: +          status: "In Progress" +          start: "{{ lookup('pipe', 'date +%Y%m%d%H%M%SZ') }}" + +- name: Web Console +  hosts: oo_first_master +  roles: +  - openshift_web_console +  vars: +    first_master: "{{ groups.oo_first_master[0] }}" + +- name: Web Console Install Checkpoint End +  hosts: all +  gather_facts: false +  tasks: +  - name: Set Web Console install 'Complete' +    run_once: true +    set_stats: +      data: +        installer_phase_web_console: +          status: "Complete" +          end: "{{ lookup('pipe', 'date +%Y%m%d%H%M%SZ') }}" diff --git a/playbooks/openshift-web-console/private/roles b/playbooks/openshift-web-console/private/roles new file mode 120000 index 000000000..e2b799b9d --- /dev/null +++ b/playbooks/openshift-web-console/private/roles @@ -0,0 +1 @@ +../../../roles/
\ No newline at end of file diff --git a/playbooks/openstack/sample-inventory/group_vars/all.yml b/playbooks/openstack/sample-inventory/group_vars/all.yml index c7afe9a24..d63229120 100644 --- a/playbooks/openstack/sample-inventory/group_vars/all.yml +++ b/playbooks/openstack/sample-inventory/group_vars/all.yml @@ -7,6 +7,7 @@ openshift_openstack_dns_nameservers: []  # # - set custom hostnames for roles by uncommenting corresponding lines  #openshift_openstack_master_hostname: "master"  #openshift_openstack_infra_hostname: "infra-node" +#openshift_openstack_cns_hostname: "cns"  #openshift_openstack_node_hostname: "app-node"  #openshift_openstack_lb_hostname: "lb"  #openshift_openstack_etcd_hostname: "etcd" @@ -30,6 +31,7 @@ openshift_openstack_external_network_name: "public"  # # - note: do not remove openshift_openstack_default_image_name definition  #openshift_openstack_master_image_name: "centos7"  #openshift_openstack_infra_image_name: "centos7" +#openshift_openstack_cns_image_name: "centos7"  #openshift_openstack_node_image_name: "centos7"  #openshift_openstack_lb_image_name: "centos7"  #openshift_openstack_etcd_image_name: "centos7" @@ -37,6 +39,7 @@ openshift_openstack_default_image_name: "centos7"  openshift_openstack_num_masters: 1  openshift_openstack_num_infra: 1 +openshift_openstack_num_cns: 0  openshift_openstack_num_nodes: 2  # # Used Flavors @@ -44,6 +47,7 @@ openshift_openstack_num_nodes: 2  # # - note: do note remove openshift_openstack_default_flavor definition  #openshift_openstack_master_flavor: "m1.medium"  #openshift_openstack_infra_flavor: "m1.medium" +#openshift_openstack_cns_flavor: "m1.medium"  #openshift_openstack_node_flavor: "m1.medium"  #openshift_openstack_lb_flavor: "m1.medium"  #openshift_openstack_etcd_flavor: "m1.medium" @@ -57,6 +61,7 @@ openshift_openstack_default_flavor: "m1.medium"  # # - note: do not remove docker_default_volume_size definition  #openshift_openstack_docker_master_volume_size: "15"  #openshift_openstack_docker_infra_volume_size: "15" +#openshift_openstack_docker_cns_volume_size: "15"  #openshift_openstack_docker_node_volume_size: "15"  #openshift_openstack_docker_etcd_volume_size: "2"  #openshift_openstack_docker_lb_volume_size: "5" diff --git a/playbooks/openstack/sample-inventory/inventory.py b/playbooks/openstack/sample-inventory/inventory.py index ad3fd936b..084b5c0a0 100755 --- a/playbooks/openstack/sample-inventory/inventory.py +++ b/playbooks/openstack/sample-inventory/inventory.py @@ -42,7 +42,10 @@ def build_inventory():             if server.metadata['host-type'] == 'node' and             server.metadata['sub-host-type'] == 'app'] -    nodes = list(set(masters + infra_hosts + app)) +    cns = [server.name for server in cluster_hosts +           if server.metadata['host-type'] == 'cns'] + +    nodes = list(set(masters + infra_hosts + app + cns))      dns = [server.name for server in cluster_hosts             if server.metadata['host-type'] == 'dns'] @@ -59,6 +62,7 @@ def build_inventory():      inventory['nodes'] = {'hosts': nodes}      inventory['infra_hosts'] = {'hosts': infra_hosts}      inventory['app'] = {'hosts': app} +    inventory['glusterfs'] = {'hosts': cns}      inventory['dns'] = {'hosts': dns}      inventory['lb'] = {'hosts': load_balancers} @@ -93,6 +97,9 @@ def build_inventory():              hostvars['openshift_hostname'] = server.private_v4          hostvars['openshift_public_hostname'] = server.name +        if server.metadata['host-type'] == 'cns': +            hostvars['glusterfs_devices'] = ['/dev/nvme0n1'] +          node_labels = server.metadata.get('node_labels')          if node_labels:              hostvars['openshift_node_labels'] = node_labels diff --git a/roles/ansible_service_broker/vars/default_images.yml b/roles/ansible_service_broker/vars/default_images.yml index 248e0363d..0ed1d9674 100644 --- a/roles/ansible_service_broker/vars/default_images.yml +++ b/roles/ansible_service_broker/vars/default_images.yml @@ -1,6 +1,6 @@  --- -__ansible_service_broker_image_prefix: ansibleplaybookbundle/ +__ansible_service_broker_image_prefix: ansibleplaybookbundle/origin-  __ansible_service_broker_image_tag: latest  __ansible_service_broker_etcd_image_prefix: quay.io/coreos/ diff --git a/roles/container_runtime/tasks/systemcontainer_crio.yml b/roles/container_runtime/tasks/systemcontainer_crio.yml index 6a195a938..eedb18604 100644 --- a/roles/container_runtime/tasks/systemcontainer_crio.yml +++ b/roles/container_runtime/tasks/systemcontainer_crio.yml @@ -81,6 +81,17 @@      dest: /etc/cni/net.d/openshift-sdn.conf      src: 80-openshift-sdn.conf.j2 +- name: Create /etc/sysconfig/crio-storage +  copy: +    content: "" +    dest: /etc/sysconfig/crio-storage +    force: no + +- name: Create /etc/sysconfig/crio-network +  template: +    dest: /etc/sysconfig/crio-network +    src: crio-network.j2 +  - name: Start the CRI-O service    systemd:      name: "cri-o" diff --git a/roles/container_runtime/templates/crio-network.j2 b/roles/container_runtime/templates/crio-network.j2 new file mode 100644 index 000000000..763be97d7 --- /dev/null +++ b/roles/container_runtime/templates/crio-network.j2 @@ -0,0 +1,9 @@ +{% if 'http_proxy' in openshift.common %} +HTTP_PROXY={{ openshift.common.http_proxy }} +{% endif %} +{% if 'https_proxy' in openshift.common %} +HTTPS_PROXY={{ openshift.common.https_proxy }} +{% endif %} +{% if 'no_proxy' in openshift.common %} +NO_PROXY={{ openshift.common.no_proxy }} +{% endif %} diff --git a/roles/etcd/tasks/certificates/fetch_client_certificates_from_ca.yml b/roles/etcd/tasks/certificates/fetch_client_certificates_from_ca.yml index d4518554c..78578a055 100644 --- a/roles/etcd/tasks/certificates/fetch_client_certificates_from_ca.yml +++ b/roles/etcd/tasks/certificates/fetch_client_certificates_from_ca.yml @@ -79,13 +79,6 @@    when: etcd_client_certs_missing | bool    delegate_to: "{{ etcd_ca_host }}" -- name: Create local temp directory for syncing certs -  local_action: command mktemp -d /tmp/etcd_certificates-XXXXXXX -  register: g_etcd_client_mktemp -  changed_when: False -  when: etcd_client_certs_missing | bool -  become: no -  - name: Create a tarball of the etcd certs    command: >      tar -czvf {{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}.tgz @@ -101,8 +94,7 @@  - name: Retrieve the etcd cert tarballs    fetch:      src: "{{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}.tgz" -    dest: "{{ g_etcd_client_mktemp.stdout }}/" -    flat: yes +    dest: "/tmp"      fail_on_missing: yes      validate_checksum: yes    when: etcd_client_certs_missing | bool @@ -116,10 +108,15 @@  - name: Unarchive etcd cert tarballs    unarchive: -    src: "{{ g_etcd_client_mktemp.stdout }}/{{ etcd_cert_subdir }}.tgz" +    src: "/tmp/{{ inventory_hostname }}/{{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}.tgz"      dest: "{{ etcd_cert_config_dir }}"    when: etcd_client_certs_missing | bool +- name: Delete temporary directory +  local_action: file path="/tmp/{{ inventory_hostname }}" state=absent +  changed_when: False +  when: etcd_client_certs_missing | bool +  - file:      path: "{{ etcd_cert_config_dir }}/{{ item }}"      owner: root @@ -130,9 +127,3 @@    - "{{ etcd_cert_prefix }}client.key"    - "{{ etcd_cert_prefix }}ca.crt"    when: etcd_client_certs_missing | bool - -- name: Delete temporary directory -  local_action: file path="{{ g_etcd_client_mktemp.stdout }}" state=absent -  changed_when: False -  when: etcd_client_certs_missing | bool -  become: no diff --git a/roles/etcd/tasks/certificates/fetch_server_certificates_from_ca.yml b/roles/etcd/tasks/certificates/fetch_server_certificates_from_ca.yml index 59a6b6590..987380d0c 100644 --- a/roles/etcd/tasks/certificates/fetch_server_certificates_from_ca.yml +++ b/roles/etcd/tasks/certificates/fetch_server_certificates_from_ca.yml @@ -105,13 +105,6 @@    when: etcd_server_certs_missing | bool    delegate_to: "{{ etcd_ca_host }}" -- name: Create local temp directory for syncing certs -  local_action: command mktemp -d /tmp/etcd_certificates-XXXXXXX -  become: no -  register: g_etcd_server_mktemp -  changed_when: False -  when: etcd_server_certs_missing | bool -  - name: Create a tarball of the etcd certs    command: >      tar -czvf {{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}.tgz @@ -127,8 +120,7 @@  - name: Retrieve etcd cert tarball    fetch:      src: "{{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}.tgz" -    dest: "{{ g_etcd_server_mktemp.stdout }}/" -    flat: yes +    dest: "/tmp"      fail_on_missing: yes      validate_checksum: yes    when: etcd_server_certs_missing | bool @@ -144,7 +136,7 @@  - name: Unarchive cert tarball    unarchive: -    src: "{{ g_etcd_server_mktemp.stdout }}/{{ etcd_cert_subdir }}.tgz" +    src: "/tmp/{{ inventory_hostname }}/{{ etcd_generated_certs_dir }}/{{ etcd_cert_subdir }}.tgz"      dest: "{{ etcd_cert_config_dir }}"    when: etcd_server_certs_missing | bool @@ -161,8 +153,7 @@  - name: Retrieve etcd ca cert tarball    fetch:      src: "{{ etcd_generated_certs_dir }}/{{ etcd_ca_name }}.tgz" -    dest: "{{ g_etcd_server_mktemp.stdout }}/" -    flat: yes +    dest: "/tmp"      fail_on_missing: yes      validate_checksum: yes    when: etcd_server_certs_missing | bool @@ -177,8 +168,7 @@    when: etcd_server_certs_missing | bool  - name: Delete temporary directory -  local_action: file path="{{ g_etcd_server_mktemp.stdout }}" state=absent -  become: no +  local_action: file path="/tmp/{{ inventory_hostname }}" state=absent    changed_when: False    when: etcd_server_certs_missing | bool diff --git a/roles/installer_checkpoint/callback_plugins/installer_checkpoint.py b/roles/installer_checkpoint/callback_plugins/installer_checkpoint.py index 83ca83350..da7e7b1da 100644 --- a/roles/installer_checkpoint/callback_plugins/installer_checkpoint.py +++ b/roles/installer_checkpoint/callback_plugins/installer_checkpoint.py @@ -31,6 +31,7 @@ class CallbackModule(CallbackBase):              'installer_phase_node',              'installer_phase_glusterfs',              'installer_phase_hosted', +            'installer_phase_web_console',              'installer_phase_metrics',              'installer_phase_logging',              'installer_phase_prometheus', @@ -80,6 +81,10 @@ class CallbackModule(CallbackBase):                  'title': 'Hosted Install',                  'playbook': 'playbooks/openshift-hosted/config.yml'              }, +            'installer_phase_web_console': { +                'title': 'Web Console Install', +                'playbook': 'playbooks/openshift-web-console/config.yml' +            },              'installer_phase_metrics': {                  'title': 'Metrics Install',                  'playbook': 'playbooks/openshift-metrics/config.yml' diff --git a/roles/openshift_examples/tasks/main.yml b/roles/openshift_examples/tasks/main.yml index a09a598bd..ff04cdf9c 100644 --- a/roles/openshift_examples/tasks/main.yml +++ b/roles/openshift_examples/tasks/main.yml @@ -13,18 +13,23 @@  # use it either due to changes introduced in Ansible 2.x.  - name: Create local temp dir for OpenShift examples copy    local_action: command mktemp -d /tmp/openshift-ansible-XXXXXXX -  become: False    register: copy_examples_mktemp    run_once: True +- name: Create local temp dir for OpenShift examples copy +  local_action: command chmod 755 "{{ copy_examples_mktemp.stdout }}" +  run_once: True +  - name: Create tar of OpenShift examples    local_action: command tar -C "{{ role_path }}/files/examples/{{ content_version }}/" -cvf "{{ copy_examples_mktemp.stdout }}/openshift-examples.tar" .    args:      # Disables the following warning:      # Consider using unarchive module rather than running tar      warn: no -  become: False -  register: copy_examples_tar + +- name: Create local temp dir for OpenShift examples copy +  local_action: command chmod 744 "{{ copy_examples_mktemp.stdout }}/openshift-examples.tar" +  run_once: True  - name: Create the remote OpenShift examples directory    file: @@ -38,7 +43,6 @@      dest: "{{ examples_base }}/"  - name: Cleanup the OpenShift Examples temp dir -  become: False    local_action: file dest="{{ copy_examples_mktemp.stdout }}" state=absent  # Done copying examples diff --git a/roles/openshift_health_checker/openshift_checks/__init__.py b/roles/openshift_health_checker/openshift_checks/__init__.py index b7b16e0ea..83e551b5d 100644 --- a/roles/openshift_health_checker/openshift_checks/__init__.py +++ b/roles/openshift_health_checker/openshift_checks/__init__.py @@ -95,6 +95,13 @@ class OpenShiftCheck(object):          # These are intended to be a sequential record of what the check observed and determined.          self.logs = [] +    def template_var(self, var_to_template): +        """Return a templated variable if self._templar is not None, else +           just return the variable as-is""" +        if self._templar is not None: +            return self._templar.template(var_to_template) +        return var_to_template +      @abstractproperty      def name(self):          """The name of this check, usually derived from the class name.""" diff --git a/roles/openshift_health_checker/openshift_checks/docker_image_availability.py b/roles/openshift_health_checker/openshift_checks/docker_image_availability.py index 744b79c1a..7afb8f730 100644 --- a/roles/openshift_health_checker/openshift_checks/docker_image_availability.py +++ b/roles/openshift_health_checker/openshift_checks/docker_image_availability.py @@ -64,7 +64,9 @@ class DockerImageAvailability(DockerHostMixin, OpenShiftCheck):          self.registries["configured"] = regs          # for the oreg_url registry there may be credentials specified -        components = self.get_var("oreg_url", default="").split('/') +        oreg_url = self.get_var("oreg_url", default="") +        oreg_url = self.template_var(oreg_url) +        components = oreg_url.split('/')          self.registries["oreg"] = "" if len(components) < 3 else components[0]          # Retrieve and template registry credentials, if provided @@ -72,9 +74,8 @@ class DockerImageAvailability(DockerHostMixin, OpenShiftCheck):          oreg_auth_user = self.get_var('oreg_auth_user', default='')          oreg_auth_password = self.get_var('oreg_auth_password', default='')          if oreg_auth_user != '' and oreg_auth_password != '': -            if self._templar is not None: -                oreg_auth_user = self._templar.template(oreg_auth_user) -                oreg_auth_password = self._templar.template(oreg_auth_password) +            oreg_auth_user = self.template_var(oreg_auth_user) +            oreg_auth_password = self.template_var(oreg_auth_password)              self.skopeo_command_creds = "--creds={}:{}".format(quote(oreg_auth_user), quote(oreg_auth_password))          # record whether we could reach a registry or not (and remember results) @@ -153,6 +154,7 @@ class DockerImageAvailability(DockerHostMixin, OpenShiftCheck):          # template for images that run on top of OpenShift          image_url = "{}/{}-{}:{}".format(image_info["namespace"], image_info["name"], "${component}", "${version}")          image_url = self.get_var("oreg_url", default="") or image_url +        image_url = self.template_var(image_url)          if 'oo_nodes_to_config' in host_groups:              for suffix in NODE_IMAGE_SUFFIXES:                  required.add(image_url.replace("${component}", suffix).replace("${version}", image_tag)) diff --git a/roles/openshift_hosted_templates/tasks/main.yml b/roles/openshift_hosted_templates/tasks/main.yml index b2313c297..672d25b4d 100644 --- a/roles/openshift_hosted_templates/tasks/main.yml +++ b/roles/openshift_hosted_templates/tasks/main.yml @@ -1,20 +1,25 @@  ---  - name: Create local temp dir for OpenShift hosted templates copy    local_action: command mktemp -d /tmp/openshift-ansible-XXXXXXX -  become: False    register: copy_hosted_templates_mktemp    run_once: True    # AUDIT:changed_when: not set here because this task actually    # creates something +- name: Create local temp dir for OpenShift examples copy +  local_action: command chmod 755 "{{ copy_hosted_templates_mktemp.stdout }}" +  run_once: True +  - name: Create tar of OpenShift examples    local_action: command tar -C "{{ role_path }}/files/{{ content_version }}/{{ hosted_deployment_type }}" -cvf "{{ copy_hosted_templates_mktemp.stdout }}/openshift-hosted-templates.tar" .    args:      # Disables the following warning:      # Consider using unarchive module rather than running tar      warn: no -  become: False -  register: copy_hosted_templates_tar + +- name: Create local temp dir for OpenShift examples copy +  local_action: command chmod 744 "{{ copy_hosted_templates_mktemp.stdout }}/openshift-hosted-templates.tar" +  run_once: True  - name: Create remote OpenShift hosted templates directory    file: @@ -28,7 +33,6 @@      dest: "{{ hosted_base }}/"  - name: Cleanup the OpenShift hosted templates temp dir -  become: False    local_action: file dest="{{ copy_hosted_templates_mktemp.stdout }}" state=absent  - name: Modify registry paths if registry_url is not registry.access.redhat.com diff --git a/roles/openshift_logging/tasks/delete_logging.yaml b/roles/openshift_logging/tasks/delete_logging.yaml index b1ceade88..fbc3e3fd1 100644 --- a/roles/openshift_logging/tasks/delete_logging.yaml +++ b/roles/openshift_logging/tasks/delete_logging.yaml @@ -130,3 +130,14 @@      name: openshift_logging_eventrouter    when:      not openshift_logging_install_eventrouter | default(false) | bool + +# Update asset config in openshift-web-console namespace +- name: Remove Kibana route information from web console asset config +  include_role: +    name: openshift_web_console +    tasks_from: update_asset_config.yml +  vars: +    asset_config_edits: +      - key: loggingPublicURL +        value: "" +  when: openshift_web_console_install | default(true) | bool diff --git a/roles/openshift_logging/tasks/install_logging.yaml b/roles/openshift_logging/tasks/install_logging.yaml index 6aae251c1..185f47f50 100644 --- a/roles/openshift_logging/tasks/install_logging.yaml +++ b/roles/openshift_logging/tasks/install_logging.yaml @@ -314,4 +314,16 @@      openshift_logging_install_eventrouter | default(false) | bool +# TODO: Remove when asset config is removed from master-config.yaml  - include_tasks: update_master_config.yaml + +# Update asset config in openshift-web-console namespace +- name: Add Kibana route information to web console asset config +  include_role: +    name: openshift_web_console +    tasks_from: update_asset_config.yml +  vars: +    asset_config_edits: +    - key: loggingPublicURL +      value: "https://{{ openshift_logging_kibana_hostname }}" +  when: openshift_web_console_install | default(true) | bool diff --git a/roles/openshift_logging/tasks/update_master_config.yaml b/roles/openshift_logging/tasks/update_master_config.yaml index b96b8e29d..c0f42ba97 100644 --- a/roles/openshift_logging/tasks/update_master_config.yaml +++ b/roles/openshift_logging/tasks/update_master_config.yaml @@ -1,4 +1,5 @@  --- +# TODO: Remove when asset config is removed from master-config.yaml  - name: Adding Kibana route information to loggingPublicURL    modify_yaml:      dest: "{{ openshift.common.config_base }}/master/master-config.yaml" diff --git a/roles/openshift_metrics/tasks/install_metrics.yaml b/roles/openshift_metrics/tasks/install_metrics.yaml index 106909941..0866fe0d2 100644 --- a/roles/openshift_metrics/tasks/install_metrics.yaml +++ b/roles/openshift_metrics/tasks/install_metrics.yaml @@ -67,8 +67,20 @@    with_items: "{{ hawkular_agent_object_defs.results }}"    when: openshift_metrics_install_hawkular_agent | bool +# TODO: Remove when asset config is removed from master-config.yaml  - include_tasks: update_master_config.yaml +# Update asset config in openshift-web-console namespace +- name: Add metrics route information to web console asset config +  include_role: +    name: openshift_web_console +    tasks_from: update_asset_config.yml +  vars: +    asset_config_edits: +      - key: metricsPublicURL +        value: "https://{{ openshift_metrics_hawkular_hostname}}/hawkular/metrics" +  when: openshift_web_console_install | default(true) | bool +  - command: >      {{openshift_client_binary}}      --config={{mktemp.stdout}}/admin.kubeconfig diff --git a/roles/openshift_metrics/tasks/uninstall_metrics.yaml b/roles/openshift_metrics/tasks/uninstall_metrics.yaml index 0ab0eec4b..610c7b4e5 100644 --- a/roles/openshift_metrics/tasks/uninstall_metrics.yaml +++ b/roles/openshift_metrics/tasks/uninstall_metrics.yaml @@ -18,3 +18,14 @@      clusterrolebinding/heapster-cluster-reader      clusterrolebinding/hawkular-metrics    changed_when: delete_metrics.stdout != 'No resources found' + +# Update asset config in openshift-web-console namespace +- name: Remove metrics route information from web console asset config +  include_role: +    name: openshift_web_console +    tasks_from: update_asset_config.yml +  vars: +    asset_config_edits: +      - key: metricsPublicURL +        value: "" +  when: openshift_web_console_install | default(true) | bool diff --git a/roles/openshift_metrics/tasks/update_master_config.yaml b/roles/openshift_metrics/tasks/update_master_config.yaml index 5059d8d94..6567fcb4f 100644 --- a/roles/openshift_metrics/tasks/update_master_config.yaml +++ b/roles/openshift_metrics/tasks/update_master_config.yaml @@ -1,4 +1,5 @@  --- +# TODO: Remove when asset config is removed from master-config.yaml  - name: Adding metrics route information to metricsPublicURL    modify_yaml:      dest: "{{ openshift.common.config_base }}/master/master-config.yaml" diff --git a/roles/openshift_node_certificates/tasks/main.yml b/roles/openshift_node_certificates/tasks/main.yml index e95e38fdf..5f73f3bdc 100644 --- a/roles/openshift_node_certificates/tasks/main.yml +++ b/roles/openshift_node_certificates/tasks/main.yml @@ -94,13 +94,6 @@    delegate_to: "{{ openshift_ca_host }}"    run_once: true -- name: Create local temp directory for syncing certs -  local_action: command mktemp -d /tmp/openshift-ansible-XXXXXXX -  register: node_cert_mktemp -  changed_when: False -  when: node_certs_missing | bool -  become: no -  - name: Create a tarball of the node config directories    command: >      tar -czvf {{ openshift_node_generated_config_dir }}.tgz @@ -117,8 +110,7 @@  - name: Retrieve the node config tarballs from the master    fetch:      src: "{{ openshift_node_generated_config_dir }}.tgz" -    dest: "{{ node_cert_mktemp.stdout }}/" -    flat: yes +    dest: "/tmp"      fail_on_missing: yes      validate_checksum: yes    when: node_certs_missing | bool @@ -132,15 +124,14 @@  - name: Unarchive the tarball on the node    unarchive: -    src: "{{ node_cert_mktemp.stdout }}/{{ openshift_node_cert_subdir }}.tgz" +    src: "/tmp/{{ inventory_hostname }}/{{ openshift_node_generated_config_dir }}.tgz"      dest: "{{ openshift_node_cert_dir }}"    when: node_certs_missing | bool  - name: Delete local temp directory -  local_action: file path="{{ node_cert_mktemp.stdout }}" state=absent +  local_action: file path="/tmp/{{ inventory_hostname }}" state=absent    changed_when: False    when: node_certs_missing | bool -  become: no  - name: Copy OpenShift CA to system CA trust    copy: diff --git a/roles/openshift_openstack/defaults/main.yml b/roles/openshift_openstack/defaults/main.yml index 65a647b8f..77be1f2b1 100644 --- a/roles/openshift_openstack/defaults/main.yml +++ b/roles/openshift_openstack/defaults/main.yml @@ -8,6 +8,7 @@ openshift_openstack_num_etcd: 0  openshift_openstack_num_masters: 1  openshift_openstack_num_nodes: 1  openshift_openstack_num_infra: 1 +openshift_openstack_num_cns: 0  openshift_openstack_dns_nameservers: []  openshift_openstack_nodes_to_remove: [] @@ -57,6 +58,7 @@ openshift_openstack_stack_name: "{{ openshift_openstack_clusterid }}.{{ openshif  openshift_openstack_subnet_prefix: "192.168.99"  openshift_openstack_master_hostname: master  openshift_openstack_infra_hostname: infra-node +openshift_openstack_cns_hostname: cns  openshift_openstack_node_hostname: app-node  openshift_openstack_lb_hostname: lb  openshift_openstack_etcd_hostname: etcd @@ -66,8 +68,10 @@ openshift_openstack_etcd_flavor: "{{ openshift_openstack_default_flavor }}"  openshift_openstack_master_flavor: "{{ openshift_openstack_default_flavor }}"  openshift_openstack_node_flavor: "{{ openshift_openstack_default_flavor }}"  openshift_openstack_infra_flavor: "{{ openshift_openstack_default_flavor }}" +openshift_openstack_cns_flavor: "{{ openshift_openstack_default_flavor }}"  openshift_openstack_master_image: "{{ openshift_openstack_default_image_name }}"  openshift_openstack_infra_image: "{{ openshift_openstack_default_image_name }}" +openshift_openstack_cns_image: "{{ openshift_openstack_default_image_name }}"  openshift_openstack_node_image: "{{ openshift_openstack_default_image_name }}"  openshift_openstack_lb_image: "{{ openshift_openstack_default_image_name }}"  openshift_openstack_etcd_image: "{{ openshift_openstack_default_image_name }}" @@ -84,6 +88,7 @@ openshift_openstack_infra_server_group_policies: []  openshift_openstack_docker_volume_size: 15  openshift_openstack_master_volume_size: "{{ openshift_openstack_docker_volume_size }}"  openshift_openstack_infra_volume_size: "{{ openshift_openstack_docker_volume_size }}" +openshift_openstack_cns_volume_size: "{{ openshift_openstack_docker_volume_size }}"  openshift_openstack_node_volume_size: "{{ openshift_openstack_docker_volume_size }}"  openshift_openstack_etcd_volume_size: 2  openshift_openstack_lb_volume_size: 5 diff --git a/roles/openshift_openstack/tasks/check-prerequisites.yml b/roles/openshift_openstack/tasks/check-prerequisites.yml index 30996cc47..1e487d434 100644 --- a/roles/openshift_openstack/tasks/check-prerequisites.yml +++ b/roles/openshift_openstack/tasks/check-prerequisites.yml @@ -91,6 +91,7 @@    with_items:    - "{{ openshift_openstack_master_image }}"    - "{{ openshift_openstack_infra_image }}" +  - "{{ openshift_openstack_cns_image }}"    - "{{ openshift_openstack_node_image }}"    - "{{ openshift_openstack_lb_image }}"    - "{{ openshift_openstack_etcd_image }}" @@ -100,6 +101,7 @@    with_items:    - "{{ openshift_openstack_master_flavor }}"    - "{{ openshift_openstack_infra_flavor }}" +  - "{{ openshift_openstack_cns_flavor }}"    - "{{ openshift_openstack_node_flavor }}"    - "{{ openshift_openstack_lb_flavor }}"    - "{{ openshift_openstack_etcd_flavor }}" diff --git a/roles/openshift_openstack/templates/heat_stack.yaml.j2 b/roles/openshift_openstack/templates/heat_stack.yaml.j2 index 8d13eb81e..1be5d3a62 100644 --- a/roles/openshift_openstack/templates/heat_stack.yaml.j2 +++ b/roles/openshift_openstack/templates/heat_stack.yaml.j2 @@ -419,6 +419,46 @@ resources:            port_range_min: 443            port_range_max: 443 +  cns-secgrp: +    type: OS::Neutron::SecurityGroup +    properties: +      name: +        str_replace: +          template: openshift-ansible-cluster_id-cns-secgrp +          params: +            cluster_id: {{ openshift_openstack_stack_name }} +      description: +        str_replace: +          template: Security group for cluster_id OpenShift cns cluster nodes +          params: +            cluster_id: {{ openshift_openstack_stack_name }} +      rules: +        # glusterfs_sshd +        - direction: ingress +          protocol: tcp +          port_range_min: 2222 +          port_range_max: 2222 +        # heketi dialing backends +        - direction: ingress +          protocol: tcp +          port_range_min: 10250 +          port_range_max: 10250 +        # glusterfs_management +        - direction: ingress +          protocol: tcp +          port_range_min: 24007 +          port_range_max: 24007 +        # glusterfs_rdma +        - direction: ingress +          protocol: tcp +          port_range_min: 24008 +          port_range_max: 24008 +        # glusterfs_bricks +        - direction: ingress +          protocol: tcp +          port_range_min: 49152 +          port_range_max: 49251 +  {% if openshift_openstack_num_masters|int > 1 %}    lb-secgrp:      type: OS::Neutron::SecurityGroup @@ -764,3 +804,58 @@ resources:      depends_on:        - interface  {% endif %} + +  cns: +    type: OS::Heat::ResourceGroup +    properties: +      count: {{ openshift_openstack_num_cns }} +      resource_def: +        type: server.yaml +        properties: +          name: +            str_replace: +              template: sub_type_k8s_type-%index%.cluster_id +              params: +                cluster_id: {{ openshift_openstack_stack_name }} +                sub_type_k8s_type: {{ openshift_openstack_cns_hostname }} +          cluster_env: {{ openshift_openstack_public_dns_domain }} +          cluster_id:  {{ openshift_openstack_stack_name }} +          group: +            str_replace: +              template: k8s_type.cluster_id +              params: +                k8s_type: cns +                cluster_id: {{ openshift_openstack_stack_name }} +          type:        cns +          image:       {{ openshift_openstack_cns_image }} +          flavor:      {{ openshift_openstack_cns_flavor }} +          key_name:    {{ openshift_openstack_keypair_name }} +{% if openshift_openstack_provider_network_name %} +          net:         {{ openshift_openstack_provider_network_name }} +          net_name:    {{ openshift_openstack_provider_network_name }} +{% else %} +          net:         { get_resource: net } +          subnet:      { get_resource: subnet } +          net_name: +            str_replace: +              template: openshift-ansible-cluster_id-net +              params: +                cluster_id: {{ openshift_openstack_stack_name }} +{% if openshift_use_flannel|default(False)|bool %} +          attach_data_net: true +          data_net:    { get_resource: data_net } +          data_subnet: { get_resource: data_subnet } +{% endif %} +{% endif %} +          secgrp: +{% if openshift_openstack_flat_secgrp|default(False)|bool %} +            - { get_resource: flat-secgrp } +{% else %} +            - { get_resource: node-secgrp } +{% endif %} +            - { get_resource: cns-secgrp } +            - { get_resource: common-secgrp } +{% if not openshift_openstack_provider_network_name %} +          floating_network: {{ openshift_openstack_external_network_name }} +{% endif %} +          volume_size: {{ openshift_openstack_cns_volume_size }} diff --git a/roles/openshift_web_console/defaults/main.yml b/roles/openshift_web_console/defaults/main.yml new file mode 100644 index 000000000..4f395398c --- /dev/null +++ b/roles/openshift_web_console/defaults/main.yml @@ -0,0 +1,3 @@ +--- +# TODO: This is temporary and will be updated to use taints and tolerations so that the console runs on the masters +openshift_web_console_nodeselector: {"region":"infra"} diff --git a/roles/openshift_web_console/meta/main.yaml b/roles/openshift_web_console/meta/main.yaml new file mode 100644 index 000000000..033c1e3a3 --- /dev/null +++ b/roles/openshift_web_console/meta/main.yaml @@ -0,0 +1,19 @@ +--- +galaxy_info: +  author: OpenShift Development <dev@lists.openshift.redhat.com> +  description: Deploy OpenShift web console +  company: Red Hat, Inc. +  license: Apache License, Version 2.0 +  min_ansible_version: 2.4 +  platforms: +  - name: EL +    versions: +    - 7 +  - name: Fedora +    versions: +    - all +  categories: +  - openshift +dependencies: +- role: lib_openshift +- role: openshift_facts diff --git a/roles/openshift_web_console/tasks/install.yml b/roles/openshift_web_console/tasks/install.yml new file mode 100644 index 000000000..8120c13e3 --- /dev/null +++ b/roles/openshift_web_console/tasks/install.yml @@ -0,0 +1,79 @@ +--- +# Fact setting +- name: Set default image variables based on deployment type +  include_vars: "{{ item }}" +  with_first_found: +    - "{{ openshift_deployment_type | default(deployment_type) }}.yml" +    - "default_images.yml" + +- name: Set openshift_web_console facts +  set_fact: +    openshift_web_console_prefix: "{{ openshift_web_console_prefix | default(__openshift_web_console_prefix) }}" +    openshift_web_console_version: "{{ openshift_web_console_version | default(__openshift_web_console_version) }}" +    openshift_web_console_image_name: "{{ openshift_web_console_image_name | default(__openshift_web_console_image_name) }}" +    # Default the replica count to the number of masters. +    openshift_web_console_replica_count: "{{ openshift_web_console_replica_count | default(groups.oo_masters_to_config | length) }}" + +- name: Ensure openshift-web-console project exists +  oc_project: +    name: openshift-web-console +    state: present + +- name: Make temp directory for asset config files +  command: mktemp -d /tmp/console-ansible-XXXXXX +  register: mktemp +  changed_when: False +  become: no + +- name: Copy asset config template to temp directory +  copy: +    src: "{{ __console_files_location }}/{{ item }}" +    dest: "{{ mktemp.stdout }}/{{ item }}" +  with_items: +    - "{{ __console_template_file }}" +    - "{{ __console_config_file }}" + +- name: Update asset config properties +  yedit: +    src: "{{ mktemp.stdout }}/{{ __console_config_file }}" +    edits: +      - key: logoutURL +        value: "{{ openshift.master.logout_url | default('') }}" +      - key: publicURL +        # Must have a trailing slash +        value: "{{ openshift.master.public_console_url }}/" +      - key: masterPublicURL +        value: "{{ openshift.master.public_api_url }}" + +- slurp: +    src: "{{ mktemp.stdout }}/{{ __console_config_file }}" +  register: config + +- name: Apply template file +  shell: > +    {{ openshift_client_binary }} process -f "{{ mktemp.stdout }}/{{ __console_template_file }}" +    --param API_SERVER_CONFIG="{{ config['content'] | b64decode }}" +    --param IMAGE="{{ openshift_web_console_prefix }}{{ openshift_web_console_image_name }}:{{ openshift_web_console_version }}" +    --param NODE_SELECTOR={{ openshift_web_console_nodeselector | to_json | quote }} +    --param REPLICA_COUNT="{{ openshift_web_console_replica_count }}" +    | {{ openshift_client_binary }} apply -f - + +- name: Verify that the web console is running +  command: > +    curl -k https://webconsole.openshift-web-console.svc/healthz +  args: +    # Disables the following warning: +    # Consider using get_url or uri module rather than running curl +    warn: no +  register: console_health +  until: console_health.stdout == 'ok' +  retries: 120 +  delay: 1 +  changed_when: false + +- name: Remove temp directory +  file: +    state: absent +    name: "{{ mktemp.stdout }}" +  changed_when: False +  become: no diff --git a/roles/openshift_web_console/tasks/main.yml b/roles/openshift_web_console/tasks/main.yml new file mode 100644 index 000000000..937bebf25 --- /dev/null +++ b/roles/openshift_web_console/tasks/main.yml @@ -0,0 +1,8 @@ +--- +# do any asserts here + +- include_tasks: install.yml +  when: openshift_web_console_install | default(true) | bool + +- include_tasks: remove.yml +  when: not openshift_web_console_install | default(true) | bool diff --git a/roles/openshift_web_console/tasks/remove.yml b/roles/openshift_web_console/tasks/remove.yml new file mode 100644 index 000000000..f0712a993 --- /dev/null +++ b/roles/openshift_web_console/tasks/remove.yml @@ -0,0 +1,5 @@ +--- +- name: Remove openshift-web-console project +  oc_project: +    name: openshift-web-console +    state: absent diff --git a/roles/openshift_web_console/tasks/update_asset_config.yml b/roles/openshift_web_console/tasks/update_asset_config.yml new file mode 100644 index 000000000..36e37e35d --- /dev/null +++ b/roles/openshift_web_console/tasks/update_asset_config.yml @@ -0,0 +1,70 @@ +--- +# This task updates asset config values in the webconsole-config config map in +# the openshift-web-console namespace. The values to set are pased in the +# variable `asset_config_edits`, which is an array of objects with `key` and +# `value` properties in the same format as `yedit` module `edits`. Only +# properties passed are updated. +# +# Note that this triggers a redeployment on the console and a brief downtime +# since it uses a `Recreate` strategy. +# +# Example usage: +# +# - include_role: +#     name: openshift_web_console +#     tasks_from: update_asset_config.yml +#   vars: +#     asset_config_edits: +#       - key: loggingPublicURL +#         value: "https://{{ openshift_logging_kibana_hostname }}" +#   when: openshift_web_console_install | default(true) | bool + +- name: Read web console config map +  oc_configmap: +    namespace: openshift-web-console +    name: webconsole-config +    state: list +  register: webconsole_config + +- name: Make temp directory +  command: mktemp -d /tmp/console-ansible-XXXXXX +  register: mktemp +  changed_when: False +  become: no + +- name: Copy asset config to temp file +  copy: +    content: "{{webconsole_config.results.results[0].data['webconsole-config.yaml']}}" +    dest: "{{ mktemp.stdout }}/webconsole-config.yaml" + +- name: Change asset config properties +  yedit: +    src: "{{ mktemp.stdout }}/webconsole-config.yaml" +    edits: "{{asset_config_edits}}" + +- name: Update web console config map +  oc_configmap: +    namespace: openshift-web-console +    name: webconsole-config +    state: present +    from_file: +      webconsole-config.yaml: "{{ mktemp.stdout }}/webconsole-config.yaml" + +- name: Remove temp directory +  file: +    state: absent +    name: "{{ mktemp.stdout }}" +  changed_when: False +  become: no + +# There's currently no command to trigger a rollout for a k8s deployment +# without changing the pod spec. Add an annotation to force a rollout after +# the config map has been edited. +- name: Rollout updated web console deployment +  oc_edit: +    kind: deployments +    name: webconsole +    namespace: openshift-web-console +    separator: '#' +    content: +      spec#template#metadata#annotations#installer-triggered-rollout: "{{ ansible_date_time.iso8601_micro }}" diff --git a/roles/openshift_web_console/vars/default_images.yml b/roles/openshift_web_console/vars/default_images.yml new file mode 100644 index 000000000..7adb8a0d0 --- /dev/null +++ b/roles/openshift_web_console/vars/default_images.yml @@ -0,0 +1,4 @@ +--- +__openshift_web_console_prefix: "docker.io/openshift/" +__openshift_web_console_version: "latest" +__openshift_web_console_image_name: "origin-web-console" diff --git a/roles/openshift_web_console/vars/main.yml b/roles/openshift_web_console/vars/main.yml new file mode 100644 index 000000000..80bc56a17 --- /dev/null +++ b/roles/openshift_web_console/vars/main.yml @@ -0,0 +1,5 @@ +--- +__console_files_location: "../../../files/origin-components/" + +__console_template_file: "console-template.yaml" +__console_config_file: "console-config.yaml" diff --git a/roles/openshift_web_console/vars/openshift-enterprise.yml b/roles/openshift_web_console/vars/openshift-enterprise.yml new file mode 100644 index 000000000..721ac1d27 --- /dev/null +++ b/roles/openshift_web_console/vars/openshift-enterprise.yml @@ -0,0 +1,4 @@ +--- +__openshift_web_console_prefix: "registry.access.redhat.com/openshift3/" +__openshift_web_console_version: "v3.9" +__openshift_web_console_image_name: "ose-web-console"  | 
