Merge "define wrapper to keep deployment state"
diff --git a/cinder/control/cluster.yml b/cinder/control/cluster.yml
index 868b71e..c130e97 100644
--- a/cinder/control/cluster.yml
+++ b/cinder/control/cluster.yml
@@ -4,6 +4,12 @@
 - service.keepalived.cluster.single
 - system.haproxy.proxy.listen.openstack.cinder
 parameters:
+  linux:
+    system:
+      package:
+        python-pymysql:
+          fromrepo: ${_param:openstack_version}
+          version: latest
   cinder:      
     volume:
       enabled: false
diff --git a/cinder/control/single.yml b/cinder/control/single.yml
index 58156cb..2d7f179 100644
--- a/cinder/control/single.yml
+++ b/cinder/control/single.yml
@@ -1,6 +1,12 @@
 classes:
 - service.cinder.control.single
 parameters:
+  linux:
+    system:
+      package:
+        python-pymysql:
+          fromrepo: ${_param:openstack_version}
+          version: latest
   cinder:
     volume:
       enabled: false
diff --git a/cinder/volume/single.yml b/cinder/volume/single.yml
index 9c8f7c2..de468ba 100644
--- a/cinder/volume/single.yml
+++ b/cinder/volume/single.yml
@@ -1,6 +1,12 @@
 classes:
 - service.cinder.volume.single
 parameters:
+  linux:
+    system:
+      package:
+        python-pymysql:
+          fromrepo: ${_param:openstack_version}
+          version: latest
   cinder:
     volume:
       enabled: True
diff --git a/designate/server/cluster.yml b/designate/server/cluster.yml
index 33eb632..eb6a5b6 100644
--- a/designate/server/cluster.yml
+++ b/designate/server/cluster.yml
@@ -4,6 +4,12 @@
 - system.haproxy.proxy.listen.openstack.designate
 - service.haproxy.proxy.single
 parameters:
+  linux:
+    system:
+      package:
+        python-pymysql:
+          fromrepo: ${_param:openstack_version}
+          version: latest
   designate:
     _support:
       sensu:
diff --git a/designate/server/single.yml b/designate/server/single.yml
index 623c357..b658f8b 100644
--- a/designate/server/single.yml
+++ b/designate/server/single.yml
@@ -1,6 +1,12 @@
 classes:
 - service.designate.server.single
 parameters:
+  linux:
+    system:
+      package:
+        python-pymysql:
+          fromrepo: ${_param:openstack_version}
+          version: latest
   designate:
     server:
       enabled: true
diff --git a/glance/control/cluster.yml b/glance/control/cluster.yml
index 6402721..bb87f16 100644
--- a/glance/control/cluster.yml
+++ b/glance/control/cluster.yml
@@ -4,6 +4,12 @@
 - service.haproxy.proxy.single
 - system.haproxy.proxy.listen.openstack.glance
 parameters:
+  linux:
+    system:
+      package:
+        python-pymysql:
+          fromrepo: ${_param:openstack_version}
+          version: latest
   glance:
     server:
       enabled: true
diff --git a/glance/control/single.yml b/glance/control/single.yml
index 458cd37..b285d38 100644
--- a/glance/control/single.yml
+++ b/glance/control/single.yml
@@ -1,6 +1,12 @@
 classes:
 - service.glance.control.single
 parameters:
+  linux:
+    system:
+      package:
+        python-pymysql:
+          fromrepo: ${_param:openstack_version}
+          version: latest
   glance:
     server:
       database:
diff --git a/heat/server/cluster.yml b/heat/server/cluster.yml
index ee5df33..8e38f4f 100644
--- a/heat/server/cluster.yml
+++ b/heat/server/cluster.yml
@@ -6,6 +6,12 @@
 parameters:
   _param:
     cluster_public_protocol: https
+  linux:
+    system:
+      package:
+        python-pymysql:
+          fromrepo: ${_param:openstack_version}
+          version: latest
   heat:
     server:
       stack_domain_admin:
diff --git a/heat/server/single.yml b/heat/server/single.yml
index d097605..cd548bf 100644
--- a/heat/server/single.yml
+++ b/heat/server/single.yml
@@ -1,6 +1,12 @@
 classes:
 - service.heat.server.single
 parameters:
+  linux:
+    system:
+      package:
+        python-pymysql:
+          fromrepo: ${_param:openstack_version}
+          version: latest
   heat:
     server:
       stack_domain_admin:
diff --git a/ironic/api/cluster.yml b/ironic/api/cluster.yml
index c3a7901..5522f3f 100644
--- a/ironic/api/cluster.yml
+++ b/ironic/api/cluster.yml
@@ -1,6 +1,12 @@
 classes:
 - service.ironic.api.cluster
 parameters:
+  linux:
+    system:
+      package:
+        python-pymysql:
+          fromrepo: ${_param:openstack_version}
+          version: latest
   ironic:
     api:
       enabled: true
diff --git a/ironic/api/single.yml b/ironic/api/single.yml
index 0800579..ed73e90 100644
--- a/ironic/api/single.yml
+++ b/ironic/api/single.yml
@@ -1,6 +1,12 @@
 classes:
 - service.ironic.api.single
 parameters:
+  linux:
+    system:
+      package:
+        python-pymysql:
+          fromrepo: ${_param:openstack_version}
+          version: latest
   ironic:
     api:
       bind:
diff --git a/ironic/conductor/cluster.yml b/ironic/conductor/cluster.yml
index ba0c538..063719c 100644
--- a/ironic/conductor/cluster.yml
+++ b/ironic/conductor/cluster.yml
@@ -1,6 +1,12 @@
 classes:
 - service.ironic.conductor.cluster
 parameters:
+  linux:
+    system:
+      package:
+        python-pymysql:
+          fromrepo: ${_param:openstack_version}
+          version: latest
   ironic:
     conductor:
       api_url: 'http://${_param:cluster_baremetal_vip_address}:6385'
diff --git a/ironic/conductor/single.yml b/ironic/conductor/single.yml
index 69e6c20..d827129 100644
--- a/ironic/conductor/single.yml
+++ b/ironic/conductor/single.yml
@@ -1,6 +1,12 @@
 classes:
 - service.ironic.conductor.single
 parameters:
+  linux:
+    system:
+      package:
+        python-pymysql:
+          fromrepo: ${_param:openstack_version}
+          version: latest
   ironic:
     conductor:
       enabled: true
diff --git a/jenkins/client/job/gating.yml b/jenkins/client/job/gating.yml
index 6886b06..d0f2149 100644
--- a/jenkins/client/job/gating.yml
+++ b/jenkins/client/job/gating.yml
@@ -38,7 +38,6 @@
             quiet_period: 60
             trigger:
               gerrit:
-                silent_start_mode: true
                 project:
                   '{{regex}}':
                     compare_type: REG_EXP
diff --git a/jenkins/client/job/validate.yml b/jenkins/client/job/validate.yml
new file mode 100644
index 0000000..f8ebcc7
--- /dev/null
+++ b/jenkins/client/job/validate.yml
@@ -0,0 +1,49 @@
+parameters:
+  jenkins:
+    client:
+      view:
+        Validation:
+          enabled: true
+          type: ListView
+          include_regex: "validate.*"
+      job:
+        validate_openstack:
+          type: workflow-scm
+          name: validate-openstack
+          display_name: "Validate - Openstack"
+          discard:
+            build:
+              keep_num: 20
+            artifact:
+              keep_num: 20
+          concurrent: false
+          scm:
+            type: git
+            url: "${_param:jenkins_gerrit_url}/mk/mk-pipelines"
+            credentials: "gerrit"
+            script: validate-cloud.groovy
+
+          param:
+            SALT_MASTER_URL:
+              type: string
+              default: ""
+            SALT_MASTER_CREDENTIALS:
+              type: string
+              default: "salt"
+            TEST_IMAGE:
+              type: string
+              default: "docker-prod-local.artifactory.mirantis.com/mirantis/oss/qa-tools"
+            TARGET_NODE:
+              type: string
+              default: ""
+            RUN_RALLY_TESTS:
+              type: boolean
+              default: 'true'
+            RUN_TEMPEST_TESTS:
+              type: boolean
+              default: 'true'
+            TEMPEST_TEST_SET:
+              type: choice
+              choices:
+                - smoke
+                - full
diff --git a/keystone/server/cluster.yml b/keystone/server/cluster.yml
index 9b13788..0c79462 100644
--- a/keystone/server/cluster.yml
+++ b/keystone/server/cluster.yml
@@ -4,6 +4,12 @@
 - system.haproxy.proxy.listen.openstack.keystone
 - system.haproxy.proxy.listen.openstack.keystone.standalone
 parameters:
+  linux:
+    system:
+      package:
+        python-pymysql:
+          fromrepo: ${_param:openstack_version}
+          version: latest
   keystone:
     server:
       enabled: true
diff --git a/keystone/server/single.yml b/keystone/server/single.yml
index 72dc045..c35ef73 100644
--- a/keystone/server/single.yml
+++ b/keystone/server/single.yml
@@ -7,6 +7,12 @@
     mysql_admin_user: root
     mysql_admin_password: password
     mysql_keystone_password: password
+  linux:
+    system:
+      package:
+        python-pymysql:
+          fromrepo: ${_param:openstack_version}
+          version: latest
   keystone:
     server:
       enabled: true
diff --git a/linux/system/sudo.yml b/linux/system/sudo.yml
index f11accc..68f2b84 100644
--- a/linux/system/sudo.yml
+++ b/linux/system/sudo.yml
@@ -24,20 +24,30 @@
     - /usr/bin/sudo
     - /bin/bash
     sudo_coreutils_safe:
+    - /usr/bin/cat
     - /usr/bin/less
+    - /usr/bin/view
+    - /usr/bin/more
     - /usr/bin/grep
     - /usr/bin/fgrep
     - /usr/bin/egrep
     - /usr/bin/zgrep
+    - /usr/bin/ack
     - /usr/bin/tail
     - /usr/bin/socat
     - /usr/bin/top
+    - /usr/bin/atop
     - /usr/bin/tail
     - /usr/bin/lsof
     - /usr/bin/virsh
     - /bin/ls
     - /bin/cp
     - /bin/netstat
+    sudo_coreutils_trusted:
+    - /usr/bin/vi*
+    - /usr/bin/vim*
+    - /usr/bin/emacs*
+    - /usr/bin/nano*
     sudo_rabbitmq_safe:
     - /usr/sbin/rabbitmqctl
     - /usr/sbin/rabbitmqctl status
@@ -81,6 +91,9 @@
     - /usr/bin/rados*
     - /usr/bin/rbd
     - /usr/sbin/gluster
+    - /usr/fdisk -l *
+    - /usr/bin/du *
+    - /bin/df *
     sudo_openstack_clients:
     - /usr/bin/openstack
     - /usr/bin/heat*
diff --git a/neutron/compute/cluster.yml b/neutron/compute/cluster.yml
index d6674f0..fc87e84 100644
--- a/neutron/compute/cluster.yml
+++ b/neutron/compute/cluster.yml
@@ -3,6 +3,12 @@
 parameters:
   _param:
     neutron_enable_qos: False
+  linux:
+    system:
+      package:
+        python-pymysql:
+          fromrepo: ${_param:openstack_version}
+          version: latest
   neutron:
     compute:
       dvr: ${_param:neutron_compute_dvr}
diff --git a/neutron/control/cluster.yml b/neutron/control/cluster.yml
index dd1d3ee..9beed6b 100644
--- a/neutron/control/cluster.yml
+++ b/neutron/control/cluster.yml
@@ -4,6 +4,12 @@
 - service.neutron.control.cluster
 - system.haproxy.proxy.listen.openstack.neutron
 parameters:
+  linux:
+    system:
+      package:
+        python-pymysql:
+          fromrepo: ${_param:openstack_version}
+          version: latest
   mysql:
     server:
       database:
diff --git a/neutron/control/single.yml b/neutron/control/single.yml
index 663ec32..e412f36 100644
--- a/neutron/control/single.yml
+++ b/neutron/control/single.yml
@@ -1,6 +1,12 @@
 classes:
 - service.neutron.control.single
 parameters:
+  linux:
+    system:
+      package:
+        python-pymysql:
+          fromrepo: ${_param:openstack_version}
+          version: latest
   neutron:
     server:
       database:
diff --git a/nova/control/cluster.yml b/nova/control/cluster.yml
index d47c5e1..dee725d 100644
--- a/nova/control/cluster.yml
+++ b/nova/control/cluster.yml
@@ -11,6 +11,12 @@
     nova_ram_allocation_ratio: 1.5
     nova_disk_allocation_ratio: 1.0
     metadata_password: metadataPass
+  linux:
+    system:
+      package:
+        python-pymysql:
+          fromrepo: ${_param:openstack_version}
+          version: latest
   nova:
     controller:
       enabled: true
diff --git a/nova/control/single.yml b/nova/control/single.yml
index 00182a3..c2aef10 100644
--- a/nova/control/single.yml
+++ b/nova/control/single.yml
@@ -1,6 +1,12 @@
 classes:
 - service.nova.control.single
 parameters:
+  linux:
+    system:
+      package:
+        python-pymysql:
+          fromrepo: ${_param:openstack_version}
+          version: latest
   nova:
     controller:
       database:
diff --git a/openssh/server/team/members/mniedbala.yml b/openssh/server/team/members/mniedbala.yml
new file mode 100644
index 0000000..30f7f30
--- /dev/null
+++ b/openssh/server/team/members/mniedbala.yml
@@ -0,0 +1,20 @@
+parameters:
+  linux:
+    system:
+      user:
+        mniedbala:
+          enabled: true
+          name: mniedbala
+          sudo: ${_param:linux_system_user_sudo}
+          full_name: Mikolaj Niedbala
+          home: /home/mniedbala
+          email: mniedbala@mirantis.com
+  openssh:
+    server:
+      enabled: true
+      user:
+        mniedbala:
+          enabled: true
+          public_keys:
+            - key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNepHgtflir2vNW+h9cr3hP3llsTlg5uIvvmByykfk455Cum0vSO27mWKZJu0ebU4LXfeH+WP4MjR3tKAKvXqzjGhPVGjMO3wo4/NLlel2CDx99w0KotcjQhW6p+iqLv1AT9E5LW4Kr1NuQ65nvGn6y4SevRw2y36bNS4VJBq40HlgQFTW3oNP+5u4TVzu7QQhulsTUdQETgLswZKsarX7whgvcHvFs1dnbriZlkPXvrKhZLA/CUb7ot+ugw6KWOl+g4gTFLjnt0IXjJXMstCOL9R7/juflUku9CYFvSuq4/T67yMW7XntQ89VkwudSCMjjUWg6ilEG0ghd9+b3bPr mniedbala@mirantis.com
+          user: ${linux:system:user:mniedbala}
diff --git a/openssh/server/team/services.yml b/openssh/server/team/services.yml
new file mode 100644
index 0000000..564fc32
--- /dev/null
+++ b/openssh/server/team/services.yml
@@ -0,0 +1,9 @@
+classes:
+- system.linux.system.sudo
+- system.openssh.server.team.members.mniedbala
+parameters:
+  linux:
+    system:
+      user:
+        mniedbala:
+          sudo: true