Add pre creating resources for heat tempest plugin

Add functionality for pre creating resources for heat tempest plugin

Change-Id: Ie230a6090a82a79a75d79d7d91a7c38130da3efe
Related-prod: PROD-18144
diff --git a/_modules/runtest/tempest_sections/heat_plugin.py b/_modules/runtest/tempest_sections/heat_plugin.py
index 0f2e16f..219b226 100644
--- a/_modules/runtest/tempest_sections/heat_plugin.py
+++ b/_modules/runtest/tempest_sections/heat_plugin.py
@@ -1,6 +1,8 @@
 
 import base_section
 
+from runtest import conditions
+
 class HeatPlugin(base_section.BaseSection):
 
     name = "heat_plugin"
@@ -53,7 +55,9 @@
 
     @property
     def admin_password(self):
-        pass
+        c = conditions.BaseRule('keystone.server.enabled', 'eq', True)
+        return self.get_item_when_condition_match(
+            'keystone.server.admin_password', c)
 
     @property
     def admin_project_name(self):
@@ -61,11 +65,20 @@
 
     @property
     def admin_username(self):
-        pass
+        c = conditions.BaseRule('keystone.server.enabled', 'eq', True)
+        return self.get_item_when_condition_match(
+            'keystone.server.admin_name', c)
 
     @property
     def auth_url(self):
-        pass
+        c = conditions.BaseRule('keystone.server.enabled', 'eq', True)
+        protocol = self.get_item_when_condition_match(
+            'keystone.server.bind.private_protocol', c) or 'http'
+        vip = self.get_item_when_condition_match(
+            '_param.cluster_vip_address', c)
+        port = self.get_item_when_condition_match(
+            'keystone.server.bind.private_port', c)
+        return "{}://{}:{}".format(protocol, vip, port)
 
     @property
     def auth_version(self):
@@ -149,7 +162,9 @@
 
     @property
     def password(self):
-        pass
+        c = conditions.BaseRule('keystone.server.enabled', 'eq', True)
+        return self.get_item_when_condition_match(
+            'keystone.server.admin_password', c)
 
     @property
     def project_domain_id(self):
@@ -161,11 +176,15 @@
 
     @property
     def project_name(self):
-        pass
+        c = conditions.BaseRule('keystone.server.enabled', 'eq', True)
+        return self.get_item_when_condition_match(
+            'keystone.server.admin_tenant', c)
 
     @property
     def region(self):
-        pass
+        c = conditions.BaseRule('keystone.server.enabled', 'eq', True)
+        return self.get_item_when_condition_match(
+            'keystone.server.region', c)
 
     @property
     def sighup_config_edit_retries(self):
@@ -217,7 +236,9 @@
 
     @property
     def username(self):
-        pass
+        c = conditions.BaseRule('keystone.server.enabled', 'eq', True)
+        return self.get_item_when_condition_match(
+            'keystone.server.admin_name', c)
 
     @property
     def volume_size(self):
diff --git a/_modules/runtest/tempest_sections/service_available.py b/_modules/runtest/tempest_sections/service_available.py
index 381eab8..64fd929 100644
--- a/_modules/runtest/tempest_sections/service_available.py
+++ b/_modules/runtest/tempest_sections/service_available.py
@@ -5,16 +5,23 @@
 
     name = "service_available"
     options = [
+        'aodh',
+        'barbican',
         'cinder',
+        'ceilometer',
         'designate',
         'glance',
+        'gnocchi',
         'heat',
         'ironic',
+        'manila',
         'neutron',
         'nova',
+        'panko',
         'sahara',
         'swift',
         'horizon',
+        'keystone',
     ]
 
 
@@ -42,10 +49,22 @@
         return False
 
     @property
+    def aodh(self):
+        return self._is_service_enabled('aodh')
+
+    @property
+    def barbican(self):
+        return self._is_service_enabled('barbican')
+
+    @property
     def cinder(self):
         return self._is_service_enabled('cinder')
 
     @property
+    def ceilometer(self):
+        return self._is_service_enabled('ceilometer')
+
+    @property
     def designate(self):
         return self._is_service_enabled('designate')
 
@@ -54,6 +73,10 @@
         return self._is_service_enabled('glance')
 
     @property
+    def gnocchi(self):
+        return self._is_service_enabled('gnocchi')
+
+    @property
     def heat(self):
         return self._is_service_enabled('heat')
 
@@ -62,6 +85,10 @@
         return self._is_service_enabled('ironic')
 
     @property
+    def manila(self):
+        return self._is_service_enabled('manila')
+
+    @property
     def neutron(self):
         return self._is_service_enabled('neutron')
 
@@ -70,6 +97,10 @@
         return self._is_service_enabled('nova')
 
     @property
+    def panko(self):
+        return self._is_service_enabled('panko')
+
+    @property
     def sahara(self):
         return self._is_service_enabled('sahara')
 
@@ -79,4 +110,8 @@
 
     @property
     def horizon(self):
-        return self._is_service_enabled('horizon')
\ No newline at end of file
+        return self._is_service_enabled('horizon')
+
+    @property
+    def keystone(self):
+        return self._is_service_enabled('keystone')
\ No newline at end of file
diff --git a/metadata/service/tempest.yml b/metadata/service/tempest.yml
deleted file mode 100644
index 3db89c5..0000000
--- a/metadata/service/tempest.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-applications:
- - runtest
-parameters:
-  _param:
-    tempest_test_target: cfg01*
-  runtest:
-    enabled: true
-    openstack_version: stable/${_param:openstack_version}
-    tempest:
-      enabled: true
-      test_target: ${_param:tempest_test_target}
diff --git a/metadata/service/tempest/glance.yml b/metadata/service/tempest/glance.yml
new file mode 100644
index 0000000..6093c84
--- /dev/null
+++ b/metadata/service/tempest/glance.yml
@@ -0,0 +1,32 @@
+parameters:
+  _param:
+    glance_image_cirros_location: 'http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img'
+    glance_image_fedora_location: 'https://mirror.chpc.utah.edu/pub/fedora/linux/releases/27/CloudImages/x86_64/images/Fedora-Cloud-Base-27-1.6.x86_64.qcow2'
+    glance_image_cirros_name: 'TestCirros-0.3.5'
+    glance_image_fedora_name: 'TestFedora-27-1.6'
+  glance:
+    client:
+      enabled: True
+      identity:
+        admin_identity:
+          image:
+            cirros:
+              name: ${_param:glance_image_cirros_name}
+              location: ${_param:glance_image_cirros_location}
+              import_from_format: 'qcow2'
+              container_format: 'bare'
+              disk_format: 'qcow2'
+              tags:
+                - 'cirros'
+              visibility: public
+              wait_timeout: 1000
+            fedora:
+              name: ${_param:glance_image_fedora_name}
+              location: ${_param:glance_image_fedora_location}
+              import_from_format: 'qcow2'
+              container_format: 'bare'
+              disk_format: 'qcow2'
+              tags:
+                - 'fedora'
+              visibility: public
+              wait_timeout: 1000
\ No newline at end of file
diff --git a/metadata/service/tempest/init.yml b/metadata/service/tempest/init.yml
new file mode 100644
index 0000000..5f00c21
--- /dev/null
+++ b/metadata/service/tempest/init.yml
@@ -0,0 +1,28 @@
+classes:
+  - service.runtest.tempest.glance
+  - service.runtest.tempest.nova
+  - service.runtest.tempest.neutron
+applications:
+ - runtest
+parameters:
+  _param:
+    runtest_heat_plugin_skip_scenario_test_list: 'SoftwareConfigIntegrationTest, VolumeBackupRestoreIntegrationTest'
+    runtest_path_to_ca_file: '/etc/ssl/certs/ca-certificates.crt'
+    tempest_test_target: cfg01*
+  runtest:
+    enabled: true
+    openstack_version: stable/${_param:openstack_version}
+    tempest:
+      enabled: true
+      test_target: ${_param:tempest_test_target}
+      heat_plugin:
+        skip_scenario_test_list: ${_param:runtest_heat_plugin_skip_scenario_test_list}
+        instance_type: 'test-m1.tiny'
+        minimal_instance_type: 'test-m1.extra_tiny'
+        auth_version: 3
+        project_domain_id: default
+        user_domain_id: default
+        disable_ssl_certificate_validation: False
+        ca_file: ${_param:runtest_path_to_ca_file}
+        image_ref: ${glance:client:identity:admin_identity:image:fedora:name}
+        minimal_image_ref: ${glance:client:identity:admin_identity:image:cirros:name}
diff --git a/metadata/service/tempest/neutron.yml b/metadata/service/tempest/neutron.yml
new file mode 100644
index 0000000..a4bcce7
--- /dev/null
+++ b/metadata/service/tempest/neutron.yml
@@ -0,0 +1,20 @@
+parameters:
+  neutron:
+    client:
+      server:
+        admin_identity:
+          network:
+            heat-net:
+              tenant: admin
+              shared: False
+              router_external: True
+              default: True
+              admin_state_up: True
+              subnet:
+                heat_subnet:
+                  cidr: 10.20.30.0/24
+                  allocation_pools:
+                    - start: 10.20.30.10
+                      end: 10.20.30.254
+                  gateway: 10.20.30.1
+                  enable_dhcp: False
\ No newline at end of file
diff --git a/metadata/service/tempest/nova.yml b/metadata/service/tempest/nova.yml
new file mode 100644
index 0000000..34e3d2b
--- /dev/null
+++ b/metadata/service/tempest/nova.yml
@@ -0,0 +1,15 @@
+parameters:
+  nova:
+    client:
+      enabled: True
+      server:
+        admin_identity:
+          flavor:
+            test-m1.tiny:
+              ram: 512
+              disk: 5
+              vcpus: 1
+            test-m1.extra_tiny:
+              ram: 256
+              disk: 1
+              vcpus: 1
\ No newline at end of file