From 81ca843ee7eada1d5d51412c5d1bb001317a2d7c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Andr=C3=A9?= <m.andre@redhat.com>
Date: Wed, 19 Sep 2018 15:22:20 +0200
Subject: [PATCH] Deploy openshift all in one in scenario009

Previously we were only deploying a master node. This commit adds the
worker and infra service to the deployed node and configures it as an
all-in-one node. In order to do so, we need to disable HAproxy when
deploying in all-in-one as the HAproxy instance Openshift deploys on
the infra node conflicts with the one we normally set up. They both
bind ports 80 and 443.

Also removes the useless ComputeServices parameter that only makes
sense in a multinode environment.

Change-Id: I6c7d1b3f2fa5c7b1d9cf695c9e021a4192e5d23a
Depends-On: Ibc98e699d34dc6ab9ff6dce0d41f275b6403d983
Depends-On: I0aa878db62e28340d019cd92769f477189886571
---
 ci/environments/scenario009-multinode.yaml | 25 +++++---------
 extraconfig/services/openshift-master.yaml | 39 +++++++++++++++++-----
 roles/OpenShiftAllInOne.yaml               |  5 +--
 3 files changed, 42 insertions(+), 27 deletions(-)

diff --git a/ci/environments/scenario009-multinode.yaml b/ci/environments/scenario009-multinode.yaml
index 5231ff54e6..7e7d4d7146 100644
--- a/ci/environments/scenario009-multinode.yaml
+++ b/ci/environments/scenario009-multinode.yaml
@@ -4,6 +4,7 @@ resource_registry:
   OS::TripleO::Compute::Net::SoftwareConfig: ../common/net-config-multinode.yaml
   OS::TripleO::Services::OpenShift::Master: ../../extraconfig/services/openshift-master.yaml
   OS::TripleO::Services::OpenShift::Worker: ../../extraconfig/services/openshift-worker.yaml
+  OS::TripleO::Services::OpenShift::Infra: ../../extraconfig/services/openshift-infra.yaml
 
 
 parameter_defaults:
@@ -19,27 +20,17 @@ parameter_defaults:
     - OS::TripleO::Services::TripleoPackages
     - OS::TripleO::Services::TripleoFirewall
     - OS::TripleO::Services::Sshd
-    - OS::TripleO::Services::HAproxy
-    - OS::TripleO::Services::Keepalived
+    # NOTE(mandre) In all-in-one HAproxy conflicts with the one openshift deploys
+    # - OS::TripleO::Services::HAproxy
+    # - OS::TripleO::Services::Keepalived
     - OS::TripleO::Services::OpenShift::Master
-  ComputeServices:
-    - OS::TripleO::Services::DisableUnbound
-    - OS::TripleO::Services::CACerts
-    - OS::TripleO::Services::Docker
-    - OS::TripleO::Services::Kernel
-    - OS::TripleO::Services::Ntp
-    - OS::TripleO::Services::Snmp
-    - OS::TripleO::Services::Timezone
-    - OS::TripleO::Services::TripleoPackages
-    - OS::TripleO::Services::TripleoFirewall
-    - OS::TripleO::Services::Sshd
     - OS::TripleO::Services::OpenShift::Worker
+    - OS::TripleO::Services::OpenShift::Infra
+
   Debug: true
 
+  OpenShiftNodeGroupName: 'node-config-all-in-one'
+
   OpenShiftGlobalVariables:
     # NOTE(flaper87): Needed for the gate
     openshift_disable_check: package_availability,package_version,disk_availability,docker_storage,memory_availability,docker_image_availability
-
-    # NOTE(mandre) keep this until overcloud-full has dbus-python
-    # https://review.openstack.org/#/c/574674/
-    l_install_base_packages: true
diff --git a/extraconfig/services/openshift-master.yaml b/extraconfig/services/openshift-master.yaml
index b3c3cc3043..340b730817 100644
--- a/extraconfig/services/openshift-master.yaml
+++ b/extraconfig/services/openshift-master.yaml
@@ -63,11 +63,16 @@ parameters:
     default: {}
     description: Global Ansible variables for OpenShift-Ansible installer.
     type: json
-  # TODO(mandre) Add as a inventory group var
   OpenShiftMasterNodeVars:
     default: {}
     description: OpenShift node vars specific for the master nodes
     type: json
+  OpenShiftNodeGroupName:
+    default: node-config-all-in-one
+    description: The group the nodes belong to.
+    type: string
+    tags:
+      - role_specific
   DockerInsecureRegistryAddress:
     description: Optional. The IP Address and Port of an insecure docker
                  namespace that will be configured in /etc/sysconfig/docker.
@@ -98,6 +103,18 @@ resources:
         RoleName: {get_param: RoleName}
         RoleParameters: {get_param: RoleParameters}
 
+  RoleParametersValue:
+    type: OS::Heat::Value
+    properties:
+      type: json
+      value:
+        map_replace:
+          - map_replace:
+            - OpenShiftNodeGroupName: OpenShiftNodeGroupName
+            - values: {get_param: [RoleParameters]}
+          - values:
+              OpenShiftNodeGroupName: {get_param: OpenShiftNodeGroupName}
+
 outputs:
   role_data:
     description: Role data for the Openshift Service
@@ -139,6 +156,11 @@ outputs:
               when: step == '3'
               tags: openshift
               block:
+                - name: set role facts for generating inventory
+                  set_fact:
+                    tripleo_role_name: {get_param: RoleName}
+                    tripleo_node_group_name: {get_attr: [RoleParametersValue, value, OpenShiftNodeGroupName]}
+
                 - name: set openshift global vars fact
                   set_fact:
                     openshift_global_vars:
@@ -164,9 +186,6 @@ outputs:
                         skip_version: true
                         # Fatal and Errors only
                         debug_level: 0
-                        openshift_master_cluster_method: native
-                        openshift_master_cluster_hostname: {get_param: [EndpointMap, OpenshiftPublic, host]}
-                        openshift_master_cluster_public_hostname: {get_param: [EndpointMap, OpenshiftPublic, host]}
                         # Local Registry
                         openshift_examples_modify_imagestreams: true
                         oreg_url:
@@ -186,10 +205,9 @@ outputs:
                       - {get_param: OpenShiftGlobalVariables}
                     tripleo_stack_action: {get_param: StackAction}
                     openshift_master_node_vars: {get_param: OpenShiftMasterNodeVars}
-
-                - name: set role facts for generating inventory
-                  set_fact:
-                    tripleo_role_name: {get_param: RoleName}
+                    openshift_master_cluster_vars:
+                      openshift_master_cluster_hostname: {get_param: [EndpointMap, OpenshiftPublic, host]}
+                      openshift_master_cluster_public_hostname: {get_param: [EndpointMap, OpenshiftPublic, host]}
 
                 # NOTE(flaper87): Check if origin-node is running in the openshift
                 # nodes so we can flag the node as new later on.
@@ -272,6 +290,11 @@ outputs:
                               new_nodes: {}
                               {% if groups['openshift_glusterfs'] | default([]) %}glusterfs: {}{% endif %}
 
+                - name: combine cluster setting
+                  set_fact:
+                    openshift_global_vars: "{{ openshift_global_vars | combine(openshift_master_cluster_vars) }}"
+                  when: 'tripleo_node_group_name != "node-config-all-in-one"'
+
                 - name: generate openshift global vars
                   copy:
                     dest: "{{playbook_dir}}/openshift/global_vars.yml"
diff --git a/roles/OpenShiftAllInOne.yaml b/roles/OpenShiftAllInOne.yaml
index c509b29851..3756138a54 100644
--- a/roles/OpenShiftAllInOne.yaml
+++ b/roles/OpenShiftAllInOne.yaml
@@ -26,8 +26,9 @@
     - OS::TripleO::Services::Ntp
     - OS::TripleO::Services::TripleoFirewall
     - OS::TripleO::Services::TripleoPackages
-    - OS::TripleO::Services::HAproxy
-    - OS::TripleO::Services::Keepalived
+    # NOTE(mandre) In all-in-one HAproxy conflicts with the one openshift deploys
+    # - OS::TripleO::Services::HAproxy
+    # - OS::TripleO::Services::Keepalived
     - OS::TripleO::Services::OpenShift::Master
     - OS::TripleO::Services::OpenShift::Worker
     - OS::TripleO::Services::OpenShift::Infra