Octavia manager services clusterization

Related-PROD: PROD-25309

Change-Id: I16476cb1fdbc499033c7fce8a91d8cb5cb817a00
diff --git a/defaults/openstack/init.yml b/defaults/openstack/init.yml
index b568945..2619563 100644
--- a/defaults/openstack/init.yml
+++ b/defaults/openstack/init.yml
@@ -112,6 +112,10 @@
     horizon_old_version: ${_param:openstack_old_version}
     horizon_version: ${_param:openstack_version}
     horizon_upgrade_enabled: ${_param:openstack_upgrade_enabled}
+    # Octavia
+    octavia_health_manager_node01_address: 192.168.10.10
+    octavia_health_manager_node02_address: 192.168.10.11
+    octavia_health_manager_node03_address: 192.168.10.12
     # HAproxy
     haproxy_openstack_web_bind_port: ${_param:horizon_public_port}
     #
diff --git a/neutron/client/service/octavia/cluster.yml b/neutron/client/service/octavia/cluster.yml
new file mode 100644
index 0000000..09191f2
--- /dev/null
+++ b/neutron/client/service/octavia/cluster.yml
@@ -0,0 +1,33 @@
+classes:
+- system.neutron.client.service.octavia
+
+parameters:
+  neutron:
+    client:
+      server:
+        octavia_identity:
+          endpoint_type: internalURL
+          network:
+            lb-mgmt-net:
+              port:
+                octavia-health-manager-listen-port-gtw01:
+                  fixed_ips:
+                    - ip_address: ${_param:octavia_health_manager_node01_address}
+                  device_owner: Octavia:health-mgr
+                  binding_host_id: ${_param:openstack_gateway_node01_hostname}
+                  security_groups:
+                    - lb-health-mgr-sec-grp
+                octavia-health-manager-listen-port-gtw02:
+                  fixed_ips:
+                    - ip_address: ${_param:octavia_health_manager_node02_address}
+                  device_owner: Octavia:health-mgr
+                  binding_host_id: ${_param:openstack_gateway_node02_hostname}
+                  security_groups:
+                    - lb-health-mgr-sec-grp
+                octavia-health-manager-listen-port-gtw03:
+                  fixed_ips:
+                    - ip_address: ${_param:octavia_health_manager_node03_address}
+                  device_owner: Octavia:health-mgr
+                  binding_host_id: ${_param:openstack_gateway_node03_hostname}
+                  security_groups:
+                    - lb-health-mgr-sec-grp
\ No newline at end of file
diff --git a/neutron/client/service/octavia.yml b/neutron/client/service/octavia/init.yml
similarity index 85%
rename from neutron/client/service/octavia.yml
rename to neutron/client/service/octavia/init.yml
index f9cc934..57b7b65 100644
--- a/neutron/client/service/octavia.yml
+++ b/neutron/client/service/octavia/init.yml
@@ -1,5 +1,3 @@
-classes:
-- service.neutron.client
 parameters:
   neutron:
     client:
@@ -16,14 +14,6 @@
                   allocation_pools:
                     - start: ${_param:octavia_lb_mgmt_allocation_pool_start}
                       end: ${_param:octavia_lb_mgmt_allocation_pool_end}
-              port:
-                octavia-health-manager-listen-port:
-                  fixed_ips:
-                    - ip_address: ${_param:octavia_hm_bind_ip}
-                  device_owner: Octavia:health-mgr
-                  binding_host_id: ${_param:openstack_gateway_node01_hostname}
-                  security_groups:
-                    - lb-health-mgr-sec-grp
           security_group:
             lb-mgmt-sec-grp:
               tenant: service
@@ -86,5 +76,5 @@
             profile: 'octavia_identity'
           list_octavia_hm_ports:
             mine_function: neutronng.list_ports
-            name: 'octavia-health-manager-listen-port'
+            device_owner: 'Octavia:health-mgr'
             profile: 'octavia_identity'
diff --git a/neutron/client/service/octavia/single.yml b/neutron/client/service/octavia/single.yml
new file mode 100644
index 0000000..b5b65ea
--- /dev/null
+++ b/neutron/client/service/octavia/single.yml
@@ -0,0 +1,19 @@
+classes:
+- system.neutron.client.service.octavia
+
+parameters:
+  neutron:
+    client:
+      server:
+        octavia_identity:
+          endpoint_type: internalURL
+          network:
+            lb-mgmt-net:
+              port:
+                octavia-health-manager-listen-port:
+                  fixed_ips:
+                    - ip_address: ${_param:octavia_health_manager_node01_address}
+                  device_owner: Octavia:health-mgr
+                  binding_host_id: ${_param:openstack_gateway_node01_hostname}
+                  security_groups:
+                    - lb-health-mgr-sec-grp
diff --git a/octavia/manager/cluster.yml b/octavia/manager/cluster.yml
new file mode 100644
index 0000000..4422871
--- /dev/null
+++ b/octavia/manager/cluster.yml
@@ -0,0 +1,19 @@
+classes:
+- service.octavia.manager.cluster
+
+parameters:
+  octavia:
+    manager:
+      enabled: true
+      version: ${_param:octavia_version}
+      ssh:
+        private_key: ${_param:octavia_private_key}
+        user: octavia
+        group: octavia
+      database:
+        host: ${_param:openstack_database_address}
+      identity:
+        region: ${_param:openstack_region}
+        protocol: ${_param:cluster_internal_protocol}
+      message_queue:
+        host: ${_param:openstack_message_queue_address}
diff --git a/reclass/storage/system/openstack_gateway_cluster_octavia.yml b/reclass/storage/system/openstack_gateway_cluster_octavia.yml
new file mode 100644
index 0000000..772ea37
--- /dev/null
+++ b/reclass/storage/system/openstack_gateway_cluster_octavia.yml
@@ -0,0 +1,19 @@
+parameters:
+  reclass:
+    storage:
+      node:
+        openstack_gateway_node01:
+          classes:
+          - cluster.${_param:cluster_name}.openstack.octavia_manager
+          params:
+            octavia_hm_bind_ip: ${_param:octavia_health_manager_node01_address}
+        openstack_gateway_node02:
+          classes:
+            - cluster.${_param:cluster_name}.openstack.octavia_manager
+          params:
+            octavia_hm_bind_ip: ${_param:octavia_health_manager_node02_address}
+        openstack_gateway_node03:
+          classes:
+            - cluster.${_param:cluster_name}.openstack.octavia_manager
+          params:
+            octavia_hm_bind_ip: ${_param:octavia_health_manager_node03_address}
\ No newline at end of file
diff --git a/reclass/storage/system/openstack_gateway_single_octavia.yml b/reclass/storage/system/openstack_gateway_single_octavia.yml
index 2a5b952..8c64831 100644
--- a/reclass/storage/system/openstack_gateway_single_octavia.yml
+++ b/reclass/storage/system/openstack_gateway_single_octavia.yml
@@ -5,3 +5,6 @@
         openstack_gateway_node01:
           classes:
           - cluster.${_param:cluster_name}.openstack.octavia_manager
+          params:
+            octavia_hm_bind_ip: ${_param:octavia_health_manager_node01_address}
+
diff --git a/salt/minion/ca/octavia_amphora_ca.yml b/salt/minion/ca/octavia_amphora_ca.yml
index 6865977..2ca132a 100644
--- a/salt/minion/ca/octavia_amphora_ca.yml
+++ b/salt/minion/ca/octavia_amphora_ca.yml
@@ -1,10 +1,33 @@
-classes:
-- system.salt.minion.ca.octavia_ca
-
 parameters:
+  _param:
+    octavia_ca_common_name: Octavia CA
+    octavia_ca_country: cz
+    octavia_ca_locality: Prague
+    octavia_ca_organization: Mirantis
+    octavia_ca_days_valid_authority: 3650
+    octavia_ca_days_valid_certificate: 365
   salt:
     minion:
       ca:
         octavia_ca:
           ca_file: /srv/salt/env/${_param:salt_master_base_environment}/_certs/octavia/ca_01.pem
-          ca_key_file: /srv/salt/env/${_param:salt_master_base_environment}/_certs/octavia/ca.key
\ No newline at end of file
+          ca_key_file: /srv/salt/env/${_param:salt_master_base_environment}/_certs/octavia/ca.key
+          common_name: ${_param:octavia_ca_common_name}
+          country: ${_param:octavia_ca_country}
+          locality: ${_param:octavia_ca_locality}
+          organization: ${_param:octavia_ca_organization}
+          signing_policy:
+            cert_server:
+              type: v3_edge_cert_server
+              minions: '*'
+            cert_client:
+              type: v3_edge_cert_client
+              minions: '*'
+            cert_open:
+              type: v3_edge_cert_open
+              minions: '*'
+          days_valid:
+            authority: ${_param:octavia_ca_days_valid_authority}
+            certificate: ${_param:octavia_ca_days_valid_certificate}
+          user: octavia
+          group: octavia
\ No newline at end of file