Add cid nodes into offline pike dpdk

Change-Id: I8c08f0f674537b6215b82f5b4b4edec76adb1b0b
diff --git a/classes/cluster/virtual-offline-pike-ovs-dpdk/infra/config.yml b/classes/cluster/virtual-offline-pike-ovs-dpdk/infra/config.yml
index 6f58513..645612b 100644
--- a/classes/cluster/virtual-offline-pike-ovs-dpdk/infra/config.yml
+++ b/classes/cluster/virtual-offline-pike-ovs-dpdk/infra/config.yml
@@ -4,12 +4,17 @@
 - system.linux.system.single.debian
 - system.linux.system.repo.mcp.apt_mirantis.saltstack
 - system.linux.system.repo_local.mcp.apt_mirantis.openstack
-#- system.openssh.client.lab
+- system.linux.system.repo_local.mcp.salt
+- system.linux.system.repo_local.mcp.extra
+- system.linux.system.repo.mcp.apt_mirantis.percona
+- system.linux.system.repo.mcp.apt_mirantis.ubuntu
+- system.linux.system.repo.mcp.apt_mirantis.glusterfs
+- system.glusterfs.client.cluster
+- system.glusterfs.client.volume.salt_pki
 - system.salt.master.pkg
 - system.salt.master.api
 - system.salt.master.formula.pkg.gnocchi
 - system.salt.master.formula.pkg.panko
-- system.reclass.storage.salt
 - system.salt.minion.ca.salt_master
 - system.salt.minion.cert.proxy
 - system.keystone.client.single
@@ -23,14 +28,19 @@
 - system.keystone.client.service.gnocchi
 - system.gnocchi.client
 - system.gnocchi.client.v1.archive_policy.default
+- system.reclass.storage.salt
 - system.reclass.storage.system.openstack_dns_cluster
 - system.reclass.storage.system.openstack_control_cluster
 - system.reclass.storage.system.openstack_compute_multi
 - system.reclass.storage.system.openstack_gateway_single
 - system.reclass.storage.system.openstack_dashboard_single
 - system.reclass.storage.system.openstack_telemetry_cluster
+- system.reclass.storage.system.cicd_control_cluster
+- service.jenkins.client
+- system.jenkins.client.credential.salt
+- system.jenkins.client.job.deploy.openstack
+- cluster.virtual-offline-pike-ovs-dpdk.infra
 - cluster.virtual-offline-pike-ovs-dpdk.infra.backup.client_common
-- cluster.virtual-offline-pike-ovs-dpdk
 parameters:
   _param:
     reclass_data_repository: https://gerrit.mcp.mirantis.net/salt-models/mcp-virtual-lab
@@ -41,7 +51,12 @@
     single_address: 172.16.10.100
     salt_master_host: 127.0.0.1
     salt_master_base_environment: prd
-    salt_minion_ca_host: ${linux:network:fqdn}
+    salt_minion_ca_host: cfg01.${_param:cluster_domain}
+    jenkins_git_url: 'git@cfg01:/home/repo'
+    jenkins_gerrit_url: ${_param:jenkins_git_url}
+    salt_api_password: 'hovno12345!'
+    jenkins_salt_api_url: "http://${_param:salt_master_host}:6969"
+    jenkins_pipeline_library_url: git@cfg01:/home/repo/mcp-ci/pipeline-library
     salt_api_password_hash: "$6$sGnRlxGf$al5jMCetLP.vfI/fTl3Z0N7Za1aeiexL487jAtyRABVfT3NlwZxQGVhO7S1N8OwS/34VHYwZQA8lkXwKMN/GS1"
   linux:
     network:
@@ -52,6 +67,19 @@
           proto: static
           address: ${_param:single_address}
           netmask: 255.255.255.0
+  jenkins:
+    client:
+      lib:
+        pipeline-library:
+          url: ${_param:jenkins_pipeline_library_url}
+          branch: ${_param:jenkins_pipelines_branch}
+      master:
+        host: ${_param:salt_master_host}
+        port: 8081
+        password: r00tme
+      globalenvprop:
+        OFFLINE_DEPLOYMENT:
+          value: "true"
   salt:
     master:
       backup: true
@@ -163,6 +191,21 @@
           cluster_param:
             openstack_telemetry_node03_address:
               value_template: <<node_control_ip>>
+        cicd_control_node01:
+          expression: <<node_hostname>>__equals__cid01
+          cluster_param:
+            cicd_control_node01_address:
+              value_template: <<node_control_ip>>
+        cicd_control_node02:
+          expression: <<node_hostname>>__equals__cid02
+          cluster_param:
+            cicd_control_node02_address:
+              value_template: <<node_control_ip>>
+        cicd_control_node03:
+          expression: <<node_hostname>>__equals__cid03
+          cluster_param:
+            cicd_control_node03_address:
+              value_template: <<node_control_ip>>
       node:
         openstack_control_node01:
           classes:
diff --git a/classes/cluster/virtual-offline-pike-ovs-dpdk/infra/init.yml b/classes/cluster/virtual-offline-pike-ovs-dpdk/infra/init.yml
index b01723d..da495f8 100644
--- a/classes/cluster/virtual-offline-pike-ovs-dpdk/infra/init.yml
+++ b/classes/cluster/virtual-offline-pike-ovs-dpdk/infra/init.yml
@@ -1,4 +1,111 @@
+classes:
+- system.linux.network.dynamic_hosts
+- system.linux.system.repo_local.mcp.extra
+- system.linux.system.repo.mcp.apt_mirantis.saltstack
+- system.linux.system.repo.mcp.apt_mirantis.ubuntu
+- system.linux.system.repo_local.mcp.apt_mirantis.openstack
+- system.linux.system.single
+- system.linux.system.single.debian
+- system.watchdog.server
+- system.rsyslog.client.single
+- system.openssh.server.team.lab
+- system.openssh.server.team.tcpcloud
+- system.openssh.server.team.mcp_qa
+- system.auditd.server.ciscat
+- system.salt.minion.single
+- system.rsyslog.client.single
+- cluster.virtual-offline-pike-ovs-dpdk.openstack
+- cluster.virtual-offline-pike-ovs-dpdk.cicd
 parameters:
+  _param:
+    cluster_domain: virtual-offline-pike-ovs-dpdk.local
+    cluster_name: virtual-offline-pike-ovs-dpdk
+    infra_config_hostname: cfg01
+    local_repos: true
+    apt_mk_version: proposed
+    openstack_version: pike
+    jenkins_pipelines_branch: '${_param:apt_mk_version}'
+    # new in 2018.7+
+    linux_system_repo_url: http://${_param:local_repo_url}/${_param:apt_mk_version}/
+    #
+    local_repo_url: mirror.mcp.mirantis.local.test
+    linux_repo_refresh_db: true
+    aptly_server_address: 10.170.0.226
+    docker_compose_image: ${_param:aptly_server_address}:5000/compose:1.8.0
+    # infra service addresses
+    infra_config_address: 172.16.10.100
+    # openstack service addresses
+    openstack_proxy_address: 172.16.10.121
+    openstack_proxy_node01_address: 172.16.10.121
+    openstack_control_address: 172.16.10.254
+    openstack_control_node01_address: 172.16.10.101
+    openstack_control_node02_address: 172.16.10.102
+    openstack_control_node03_address: 172.16.10.103
+    openstack_gateway_address: 172.16.10.110
+    openstack_database_address: ${_param:openstack_control_address}
+    openstack_message_queue_address: ${_param:openstack_control_address}
+    openstack_message_queue_node01_address: ${_param:openstack_control_node01_address}
+    openstack_message_queue_node02_address: ${_param:openstack_control_node02_address}
+    openstack_message_queue_node03_address: ${_param:openstack_control_node03_address}
+    glusterfs_node01_address: ${_param:openstack_control_node01_address}
+    glusterfs_node02_address: ${_param:openstack_control_node02_address}
+    glusterfs_node03_address: ${_param:openstack_control_node03_address}
+    openstack_gateway_address: 172.16.10.110
+    openstack_gateway_node01_address: ${_param:openstack_gateway_address}
+    remote_rsyslog_host: 127.0.0.3
+    remote_rsyslog_port: 10514
+    salt_minion_ca_host: ${_param:infra_config_hostname}.${_param:cluster_domain}
+  rsyslog:
+    client:
+      run_user: syslog
+      run_group: adm
+      enabled: true
+      rainerscript:
+        module:
+          imfile: {}
+        input:
+          imfile:
+            nginx:
+              File: "/var/log/nginx/*.log"
+              Tag: "nginx__"
+              Severity: "notice"
+              Facility: "local0"
+              PersistStateInterval: "0"
+              Ruleset: "myapp_logs"
+            apache2:
+              File: "/var/log/apache2/*.log"
+              Tag: "apache2__"
+              Severity: "notice"
+              Facility: "local0"
+              Ruleset: "myapp_logs"
+              PersistStateInterval: "0"
+            rabbitmq:
+              File: "/var/log/rabbitmq/*.log"
+              Tag: "rabbitmq__"
+              Severity: "notice"
+              Facility: "local0"
+              PersistStateInterval: "0"
+              Ruleset: "myapp_logs"
+        template:
+          ImfileFilePath:
+            parameter:
+              type: string
+              string: "<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%$.suffix%%msg:::sp-if-no-1st-sp%%msg%\n"
+        ruleset:
+          remote_logs:
+            description: 'action(type="omfwd" Target="${_param:remote_rsyslog_host}" Port="${_param:remote_rsyslog_port}" Protocol="udp" Template="ImfileFilePath")'
+          myapp_logs:
+            description: 'set $.suffix=re_extract($!metadata!filename, "(.*)/([^/]*[^/.log])", 0, 2, "all.log"); call remote_logs'
+      output:
+        remote:
+          somehost.domain:
+            action: "@${_param:remote_rsyslog_host}:${_param:remote_rsyslog_port}"
+            filter: "*.*"
+            enabled: true
+  salt:
+    minion:
+      trusted_ca_minions:
+        - ${_param:salt_minion_ca_host}
   linux:
     network:
       host: