Merge "Add ability upload results to testrail for promotion job"
diff --git a/docker/swarm/stack/monitoring/alerta.yml b/docker/swarm/stack/monitoring/alerta.yml
new file mode 100644
index 0000000..c0da7d5
--- /dev/null
+++ b/docker/swarm/stack/monitoring/alerta.yml
@@ -0,0 +1,30 @@
+classes:
+- system.prometheus.alerta
+parameters:
+  _param:
+    docker_image_alerta: docker-prod-local.artifactory.mirantis.com/mirantis/external/alerta-web:latest
+    alerta_mongodb_uri: "mongodb://${_param:cluster_node01_address}:27017,${_param:cluster_node02_address}:27017,${_param:cluster_node03_address}:27017/alerta?replicaSet=stacklight"
+    alerta_admin_username: "admin@alerta.io"
+  docker:
+    client:
+      stack:
+        monitoring:
+          service:
+            alerta:
+              networks:
+                - monitoring
+              deploy:
+                labels:
+                  com.mirantis.monitoring: "alerta"
+                restart_policy:
+                  condition: any
+              labels:
+                com.mirantis.monitoring: "alerta"
+              image: ${_param:docker_image_alerta}
+              ports:
+                - 15017:8080
+              volumes:
+                - ${prometheus:alerta:config_dir}/alerta.conf:/web/config.js
+              environment:
+                ADMIN_USERS: ${_param:alerta_admin_username}
+                MONGO_URI: ${_param:alerta_mongodb_uri}
\ No newline at end of file
diff --git a/glance/client/image/vnf_onboarding/avi_loadbalancer.yml b/glance/client/image/vnf_onboarding/avi_loadbalancer.yml
new file mode 100644
index 0000000..3061d60
--- /dev/null
+++ b/glance/client/image/vnf_onboarding/avi_loadbalancer.yml
@@ -0,0 +1,22 @@
+classes:
+- system.glance.client
+parameters:
+  _param:
+    avi_control_image_url: "${_param:vnf_artifactory_url}/${_param:vnf_avi_control_image_name}.qcow2"
+    avi_control_image_name:  "${_param:vnf_avi_control_image_name}"
+  glance:
+    client:
+      identity:
+        admin_identity:
+          endpoint_type: internalURL
+          image:
+            avi:
+              name: ${_param:avi_control_image_name}
+              location: ${_param:avi_control_image_url}
+              import_from_format: 'qcow2'
+              container_format: 'bare'
+              disk_format: 'qcow2'
+              tags:
+                - 'avi'
+              visibility: public
+              wait_timeout: 1000
diff --git a/glance/client/image/vnf_onboarding/init.yml b/glance/client/image/vnf_onboarding/init.yml
new file mode 100644
index 0000000..7d57ca6
--- /dev/null
+++ b/glance/client/image/vnf_onboarding/init.yml
@@ -0,0 +1,71 @@
+classes:
+- system.glance.client
+parameters:
+  _param:
+    cloudify_enterprise_manager_image_url: "${_param:vnf_artifactory_url}/${_param:vnf_cloudify_enterprise_manager_image_name}.qcow2"
+    cloudify_enterprise_manager_image_name:  "${_param:vnf_cloudify_enterprise_manager_image_name}"
+    cloudify_community_manager_image_url: "${_param:vnf_artifactory_url}/${_param:vnf_cloudify_community_manager_image_name}.qcow2"
+    cloudify_community_manager_image_name: "${_param:vnf_cloudify_community_manager_image_name}"
+    agent_vm_image_url: "${_param:vnf_artifactory_url}/${_param:vnf_agent_vm_image_name}.img"
+    agent_vm_image_name:  "${_param:vnf_agent_vm_image_name}"
+    base_agent_vm_image_url: "${_param:vnf_artifactory_url}/${_param:vnf_base_agent_vm_image_name}.qcow2"
+    base_agent_vm_image_name:  "${_param:vnf_base_agent_vm_image_name}"
+    base_backend_vm_image_url: "${_param:vnf_artifactory_url}/${_param:vnf_base_backend_vm_image_name}.qcow2"
+    base_backend_vm_image_name:  "${_param:vnf_base_backend_vm_image_name}"
+  glance:
+    client:
+      identity:
+        admin_identity:
+          endpoint_type: internalURL
+          image:
+            agent_vm:
+              name: ${_param:agent_vm_image_name}
+              location: ${_param:agent_vm_image_url}
+              import_from_format: 'qcow2'
+              container_format: 'bare'
+              disk_format: 'qcow2'
+              tags:
+                - 'vnf-onboarding'
+              visibility: public
+              wait_timeout: 1000
+            base_agent_vm:
+              name: ${_param:base_agent_vm_image_name}
+              location: ${_param:base_agent_vm_image_url}
+              import_from_format: 'qcow2'
+              container_format: 'bare'
+              disk_format: 'qcow2'
+              tags:
+                - 'vnf-onboarding'
+              visibility: public
+              wait_timeout: 1000
+            base_backend_vm:
+              name: ${_param:base_backend_vm_image_name}
+              location: ${_param:base_backend_vm_image_url}
+              import_from_format: 'qcow2'
+              container_format: 'bare'
+              disk_format: 'qcow2'
+              tags:
+                - 'vnf-onboarding'
+              visibility: public
+              wait_timeout: 1000
+            cloudify-enterprise:
+              name: ${_param:cloudify_enterprise_manager_image_name}
+              location: ${_param:cloudify_enterprise_manager_image_url}
+              import_from_format: 'qcow2'
+              container_format: 'bare'
+              disk_format: 'qcow2'
+              tags:
+                - 'vnf-onboarding'
+              visibility: public
+              wait_timeout: 1000
+            cloudify-community:
+              name: ${_param:cloudify_community_manager_image_name}
+              location: ${_param:cloudify_community_manager_image_url}
+              import_from_format: 'qcow2'
+              container_format: 'bare'
+              disk_format: 'qcow2'
+              tags:
+                - 'vnf-onboarding'
+              visibility: public
+              wait_timeout: 1000
+
diff --git a/glance/client/image/vnf_onboarding/metaswitch.yml b/glance/client/image/vnf_onboarding/metaswitch.yml
new file mode 100644
index 0000000..6b3d387
--- /dev/null
+++ b/glance/client/image/vnf_onboarding/metaswitch.yml
@@ -0,0 +1,46 @@
+classes:
+- system.glance.client
+parameters:
+  _param:
+    metaswitch_dcm_image_url: "${_param:vnf_artifactory_url}/${_param:vnf_metaswitch_dcm_image_name}.qcow2"
+    metaswitch_dcm_image_name:  "${_param:vnf_metaswitch_dcm_image_name}"
+    metaswitch_mdm_image_url: "${_param:vnf_artifactory_url}/${_param:vnf_metaswitch_mdm_image_name}.qcow2"
+    metaswitch_mdm_image_name:  "${_param:vnf_metaswitch_mdm_image_name}"
+    metaswitch_perimeta_image_url: "${_param:vnf_artifactory_url}/${_param:vnf_metaswitch_perimeta_image_name}.qcow2"
+    metaswitch_perimeta_image_name:  "${_param:vnf_metaswitch_perimeta_image_name}"
+  glance:
+    client:
+      identity:
+        admin_identity:
+          endpoint_type: internalURL
+          image:
+            metaswitch-dcm:
+              name: ${_param:metaswitch_dcm_image_name}
+              location: ${_param:metaswitch_dcm_image_url}
+              import_from_format: 'qcow2'
+              container_format: 'bare'
+              disk_format: 'qcow2'
+              tags:
+                - 'metaswitch'
+              visibility: public
+              wait_timeout: 1000
+            metaswitch-mdm:
+              name: ${_param:metaswitch_mdm_image_name}
+              location: ${_param:metaswitch_mdm_image_url}
+              import_from_format: 'qcow2'
+              container_format: 'bare'
+              disk_format: 'qcow2'
+              tags:
+                - 'metaswitch'
+              visibility: public
+              wait_timeout: 1000
+            metaswitch-perimeta:
+              name: ${_param:metaswitch_perimeta_image_name}
+              location: ${_param:metaswitch_perimeta_image_url}
+              import_from_format: 'qcow2'
+              container_format: 'bare'
+              disk_format: 'qcow2'
+              tags:
+                - 'metaswitch'
+              visibility: public
+              wait_timeout: 1000
\ No newline at end of file
diff --git a/jenkins/client/credential/vnf_onboarding.yml b/jenkins/client/credential/vnf_onboarding.yml
new file mode 100644
index 0000000..b668f31
--- /dev/null
+++ b/jenkins/client/credential/vnf_onboarding.yml
@@ -0,0 +1,14 @@
+parameters:
+
+  jenkins:
+    client:
+      credential:
+        test-openstack:
+          username: test
+          password: ${_param:vnf_openstack_test_user_password}
+        test-admin:
+          username: test-admin
+          password: ${_param:vnf_openstack_admin_user_password}
+        openstack-key:
+          username: root
+          key: ${_param:vnf_openstack_private_key}
diff --git a/jenkins/client/job/oscore/tests.yml b/jenkins/client/job/oscore/tests.yml
index 1764ce3..be2326b 100644
--- a/jenkins/client/job/oscore/tests.yml
+++ b/jenkins/client/job/oscore/tests.yml
@@ -275,6 +275,10 @@
                 type: boolean
                 default: "{{run_smoke}}"
                 description: Enabling of running smoke tests
+              ARTIFACTORY_CREDENTIALS:
+                type: string
+                default: "artifactory"
+                description: Jenkins credential ID for Artifactory
               SALT_MASTER_CREDENTIALS:
                 type: string
                 default: "salt-qa-credentials"
diff --git a/jenkins/client/job/vnf-onboarding/deploy_cloudify.yml b/jenkins/client/job/vnf-onboarding/deploy_cloudify.yml
index 234178e..79d53aa 100644
--- a/jenkins/client/job/vnf-onboarding/deploy_cloudify.yml
+++ b/jenkins/client/job/vnf-onboarding/deploy_cloudify.yml
@@ -39,7 +39,7 @@
               default: "cloudify-enterprise"
             CFM_FLAVOR:
               type: string
-              default: "large"
+              default: "cfy.mngr"
             CFM_DISK_SIZE:
               type: string
               default: "80"
@@ -57,7 +57,16 @@
               default: "${_param:dns_server01}"
             CFM_SSH_KEY_ID:
               type: string
-              default: "openstack_key"
+              default: "openstack-key"
             EXTERNAL_NET:
               type: string
-              default: "public"
\ No newline at end of file
+              default: "public"
+            VNF_DOCKER_REGISTRY_PATH:
+              type: string
+              default: "${_param:vnf_docker_registry_path}"
+            VNF_DOCKER_CLI_TAG:
+              type: string
+              default: "latest"
+            VNF_DOCKER_CLI_PLATFORM:
+              type: string
+              default: "ubuntu"
\ No newline at end of file
diff --git a/jenkins/client/job/vnf-onboarding/test_avi_loadbalancer.yml b/jenkins/client/job/vnf-onboarding/test_avi_loadbalancer.yml
index 7caf52c..43586f7 100644
--- a/jenkins/client/job/vnf-onboarding/test_avi_loadbalancer.yml
+++ b/jenkins/client/job/vnf-onboarding/test_avi_loadbalancer.yml
@@ -87,20 +87,18 @@
               type: string
               description: "IP address of extrenal Cloudify. \"auto\" refers to address of deploy_cloudify job Cloudify instance"
               default: "auto"
+            CLOUDIFY_MANAGER_OPTIONS:
+              type: string
+              description: "Parameters for cloudify manager VM. Can be skipped if cloudify predeployed."
+              default: "CFM_IMAGE=cloudify-manager-4.3.1ga CFM_FLAVOR=cfy.mngr CFM_DISK_SIZE=80 CFM_SUBNET_CIDR=10.10.1.1/24 CFM_SUBNET_DNS=172.19.0.6 EXTERNAL_NET=public "
             CFM_SSH_KEY_ID:
               type: string
               description: "Credentials ID of ssh key for connection to Cloudify"
               default: "${_param:vnf_openstack_ssh_key_credentials}"
-            CFY_AGENT_NET:
+            CLOUDIFY_AGENT_OPTIONS:
               type: string
-              description: "Network for Cloudify agents that has access to Cloudify Manager"
-              default: "cfm-net-shared"
-            CFY_AGENT_FLAVOR:
-              type: string
-              default: "cfy.agent"
-            CFY_AGENT_IMAGE:
-              type: string
-              default: "ubuntu-xenial"
+              description: "Parameters for cloudify agent VMs."
+              default: "CFY_AGENT_NET=cfm-net-shared CFY_AGENT_FLAVOR=cfy.agent CFY_AGENT_BACKEND_FLAVOR=backend.avi CFY_AGENT_IMAGE=agent_vm CFY_AGENT_BASE_IMAGE=base_agent_vm CFY_AGENT_BACKEND_IMAGE=base_backend_vm"
             VNF_ARTIFACTORY_URL:
               type: string
               default: "${_param:vnf_artifactory_url}"
diff --git a/jenkins/client/job/vnf-onboarding/test_metaswitch_vsbc.yml b/jenkins/client/job/vnf-onboarding/test_metaswitch_vsbc.yml
index e27cc1b..8720fb1 100644
--- a/jenkins/client/job/vnf-onboarding/test_metaswitch_vsbc.yml
+++ b/jenkins/client/job/vnf-onboarding/test_metaswitch_vsbc.yml
@@ -85,20 +85,18 @@
                 type: string
                 description: "IP address of extrenal Cloudify. \"auto\" refers to address of deploy_cloudify job Cloudify instance"
                 default: "auto"
+              CLOUDIFY_MANAGER_OPTIONS:
+                type: string
+                description: "Parameters for cloudify manager VM. Can be skipped if cloudify predeployed."
+                default: "CFM_IMAGE=cloudify-manager-4.3.1ga CFM_FLAVOR=cfy.mngr CFM_DISK_SIZE=80 CFM_SUBNET_CIDR=10.10.1.1/24 CFM_SUBNET_DNS=172.19.0.6 EXTERNAL_NET=public "
               CFM_SSH_KEY_ID:
                 type: string
                 description: "Credentials ID of ssh key for connection to Cloudify"
                 default: "${_param:vnf_openstack_ssh_key_credentials}"
-              CFY_AGENT_NET:
+              CLOUDIFY_AGENT_OPTIONS:
                 type: string
-                description: "Network for Cloudify agents that has access to Cloudify Manager"
-                default: "cfm-net-shared"
-              CFY_AGENT_FLAVOR:
-                type: string
-                default: "cfy.agent"
-              CFY_AGENT_IMAGE:
-                type: string
-                default: "ubuntu-xenial"
+                description: "Parameters for cloudify agent VMs."
+                default: "CFY_AGENT_NET=cfm-net-shared CFY_AGENT_FLAVOR=cfy.agent CFY_AGENT_BACKEND_FLAVOR=backend.metaswitch CFY_AGENT_IMAGE=agent_vm CFY_AGENT_BASE_IMAGE=base_agent_vm CFY_AGENT_BACKEND_IMAGE=base_backend_vm"
               VNF_ARTIFACTORY_URL:
                 type: string
                 default: "${_param:vnf_artifactory_url}"
diff --git a/jenkins/client/job/vnf-onboarding/test_nginx_vnf.yml b/jenkins/client/job/vnf-onboarding/test_nginx_vnf.yml
index f5ca331..cdb073a 100644
--- a/jenkins/client/job/vnf-onboarding/test_nginx_vnf.yml
+++ b/jenkins/client/job/vnf-onboarding/test_nginx_vnf.yml
@@ -88,20 +88,18 @@
               type: string
               description: "IP address of extrenal Cloudify. \"auto\" refers to address of deploy_cloudify job Cloudify instance"
               default: "auto"
+            CLOUDIFY_MANAGER_OPTIONS:
+              type: string
+              description: "Parameters for cloudify manager VM. Can be skipped if cloudify predeployed."
+              default: "CFM_IMAGE=cloudify-manager-4.3.1ga CFM_FLAVOR=cfy.mngr CFM_DISK_SIZE=80 CFM_SUBNET_CIDR=10.10.1.1/24 CFM_SUBNET_DNS=172.19.0.6 EXTERNAL_NET=public "
             CFM_SSH_KEY_ID:
               type: string
               description: "Credentials ID of ssh key for connection to Cloudify"
               default: "${_param:vnf_openstack_ssh_key_credentials}"
-            CFY_AGENT_NET:
+            CLOUDIFY_AGENT_OPTIONS:
               type: string
-              description: "Network for Cloudify agents that has access to Cloudify Manager"
-              default: "cfm-net-shared"
-            CFY_AGENT_FLAVOR:
-              type: string
-              default: "cfy.agent"
-            CFY_AGENT_IMAGE:
-              type: string
-              default: "ubuntu-xenial"
+              description: "Parameters for cloudify agent VMs."
+              default: "CFY_AGENT_NET=cfm-net-shared CFY_AGENT_FLAVOR=cfy.agent CFY_AGENT_BACKEND_FLAVOR=backend.nginx CFY_AGENT_IMAGE=agent_vm CFY_AGENT_BASE_IMAGE=base_agent_vm CFY_AGENT_BACKEND_IMAGE=base_backend_vm"
             VNF_ARTIFACTORY_URL:
               type: string
               default: "${_param:vnf_artifactory_url}"
diff --git a/keystone/client/vnf_onboarding/avi_loadbalancer.yml b/keystone/client/vnf_onboarding/avi_loadbalancer.yml
new file mode 100644
index 0000000..d14576d
--- /dev/null
+++ b/keystone/client/vnf_onboarding/avi_loadbalancer.yml
@@ -0,0 +1,22 @@
+parameters:
+
+  keystone:
+    client:
+      enabled: true
+      server:
+        identity:
+          test:
+            host: ${_param:keystone_service_host}
+            port: 35357
+            token: ${_param:keystone_service_token}
+            protocol: ${_param:keystone_service_protocol}
+          roles:
+          - Member
+          project:
+            test-avi:
+              description: "OpenStack tenant to execute validation tests against AVI Loadbalancer VNF"
+              user:
+                test:
+                  is_admin: false
+                  password: ${_param:vnf_openstack_test_user_password}
+                  email: ${_param:vnf_openstack_test_user_email}
diff --git a/keystone/client/vnf_onboarding/init.yml b/keystone/client/vnf_onboarding/init.yml
new file mode 100644
index 0000000..ad436fe
--- /dev/null
+++ b/keystone/client/vnf_onboarding/init.yml
@@ -0,0 +1,23 @@
+parameters:
+
+  keystone:
+    client:
+      enabled: true
+      server:
+        identity:
+          admin-test:
+            host: ${_param:keystone_service_host}
+            port: 35357
+            token: ${_param:keystone_service_token}
+            protocol: ${_param:keystone_service_protocol}
+          roles:
+          - admin
+          - Member
+          project:
+            test-cloudify:
+              description: "OpenStack tenant with predeployed cloudify manager"
+              user:
+                admin-test:
+                  is_admin: true
+                  password: ${_param:vnf_openstack_admin_user_password}
+                  email: ${_param:vnf_openstack_admin_user_email}
diff --git a/keystone/client/vnf_onboarding/metaswitch_vsbc.yml b/keystone/client/vnf_onboarding/metaswitch_vsbc.yml
new file mode 100644
index 0000000..42ed04f
--- /dev/null
+++ b/keystone/client/vnf_onboarding/metaswitch_vsbc.yml
@@ -0,0 +1,22 @@
+parameters:
+
+  keystone:
+    client:
+      enabled: true
+      server:
+        identity:
+          test:
+            host: ${_param:keystone_service_host}
+            port: 35357
+            token: ${_param:keystone_service_token}
+            protocol: ${_param:keystone_service_protocol}
+          roles:
+          - Member
+          project:
+            test-metaswitch:
+              description: "OpenStack tenant to execute validation tests against Metaswitch vSBC VNF"
+              user:
+                test:
+                  is_admin: false
+                  password: ${_param:vnf_openstack_test_user_password}
+                  email: ${_param:vnf_openstack_test_user_email}
diff --git a/keystone/client/vnf_onboarding/nginx_vnf.yml b/keystone/client/vnf_onboarding/nginx_vnf.yml
new file mode 100644
index 0000000..be67940
--- /dev/null
+++ b/keystone/client/vnf_onboarding/nginx_vnf.yml
@@ -0,0 +1,22 @@
+parameters:
+
+  keystone:
+    client:
+      enabled: true
+      server:
+        identity:
+          test:
+            host: ${_param:keystone_service_host}
+            port: 35357
+            token: ${_param:keystone_service_token}
+            protocol: ${_param:keystone_service_protocol}
+          roles:
+          - Member
+          project:
+            test-nginx:
+              description: "OpenStack tenant to execute validation tests against Nginx VNF"
+              user:
+                test:
+                  is_admin: false
+                  password: ${_param:vnf_openstack_test_user_password}
+                  email: ${_param:vnf_openstack_test_user_email}
diff --git a/mongodb/server/cluster.yml b/mongodb/server/cluster.yml
index 02294c4..54dd1bb 100644
--- a/mongodb/server/cluster.yml
+++ b/mongodb/server/cluster.yml
@@ -2,13 +2,13 @@
 - service.mongodb.server.cluster
 parameters:
   _param:
-    openstack_telemetry_node01_hostname: mdb01
-    openstack_telemetry_node02_hostname: mdb02
-    openstack_telemetry_node03_hostname: mdb03
-    mongodb_server_replica_set: mongodb
-    mongodb_master: ${_param:openstack_telemetry_node01_hostname}
-    mongodb_server_members:
-    - host: ${_param:openstack_telemetry_node01_hostname}
-      priority: 2
-    - host: ${_param:openstack_telemetry_node02_hostname}
-    - host: ${_param:openstack_telemetry_node03_hostname}
+    mongodb_replica_set: stacklight
+  mongodb:
+    server:
+      replica_set: ${_param:mongodb_replica_set}
+      members:
+      - host: ${_param:cluster_node01_address}
+        priority: 2
+      - host: ${_param:cluster_node02_address}
+      - host: ${_param:cluster_node03_address}
+      master: ${_param:cluster_node01_hostname}
diff --git a/mongodb/server/single.yml b/mongodb/server/single.yml
index c3d6cca..8a08de0 100644
--- a/mongodb/server/single.yml
+++ b/mongodb/server/single.yml
@@ -2,4 +2,4 @@
 - service.mongodb.server.single
 parameters:
   _param:
-    mongodb_server_replica_set: ceilometer
+    mongodb_server_replica_set: stacklight
diff --git a/nginx/server/proxy/monitoring/alerta.yml b/nginx/server/proxy/monitoring/alerta.yml
new file mode 100644
index 0000000..432a9dc
--- /dev/null
+++ b/nginx/server/proxy/monitoring/alerta.yml
@@ -0,0 +1,18 @@
+parameters:
+  nginx:
+    server:
+      enabled: true
+      site:
+        nginx_proxy_alerta:
+          enabled: true
+          type: nginx_proxy
+          name: alerta
+          proxy:
+            host: ${_param:prometheus_control_address}
+            port: 15017
+            protocol: http
+          host:
+            name: ${_param:cluster_public_host}
+            port: 15017
+            protocol: https
+          ssl: ${_param:nginx_proxy_ssl}
diff --git a/nova/client/flavor/vnf_onboarding/avi_loadbalancer.yml b/nova/client/flavor/vnf_onboarding/avi_loadbalancer.yml
new file mode 100644
index 0000000..b1122e9
--- /dev/null
+++ b/nova/client/flavor/vnf_onboarding/avi_loadbalancer.yml
@@ -0,0 +1,16 @@
+classes:
+- service.nova.client
+parameters:
+  nova:
+    client:
+      server:
+        admin_identity:
+          flavor:
+            avi_ctrl.small:
+              ram: 4096
+              disk: 70
+              vcpus: 4
+            backend.avi:
+              ram: 2048
+              disk: 10
+              vcpus: 1
\ No newline at end of file
diff --git a/nova/client/flavor/vnf_onboarding/init.yml b/nova/client/flavor/vnf_onboarding/init.yml
new file mode 100644
index 0000000..da15347
--- /dev/null
+++ b/nova/client/flavor/vnf_onboarding/init.yml
@@ -0,0 +1,16 @@
+classes:
+- service.nova.client
+parameters:
+  nova:
+    client:
+      server:
+        admin_identity:
+          flavor:
+            cfy.agent:
+              ram: 2048
+              disk: 20
+              vcpus: 2
+            cfy.mngr:
+              ram: 8192
+              disk: 40
+              vcpus: 4
diff --git a/nova/client/flavor/vnf_onboarding/metaswitch.yml b/nova/client/flavor/vnf_onboarding/metaswitch.yml
new file mode 100644
index 0000000..636fc73
--- /dev/null
+++ b/nova/client/flavor/vnf_onboarding/metaswitch.yml
@@ -0,0 +1,28 @@
+classes:
+- service.nova.client
+parameters:
+  nova:
+    client:
+      server:
+        admin_identity:
+          flavor:
+            MetaswitchMDM:
+              ram: 4096
+              disk: 20
+              vcpus: 2
+            MetaswitchMSC:
+              ram: 4096
+              disk: 30
+              vcpus: 2
+            MetaswitchDCM:
+              ram: 1024
+              disk: 10
+              vcpus: 1
+            MetaswitchSSC:
+              ram: 4096
+              disk: 40
+              vcpus: 2
+            backend.metaswitch:
+              ram: 2048
+              disk: 10
+              vcpus: 1
\ No newline at end of file
diff --git a/nova/client/flavor/vnf_onboarding/nginx_vnf.yml b/nova/client/flavor/vnf_onboarding/nginx_vnf.yml
new file mode 100644
index 0000000..bdad53c
--- /dev/null
+++ b/nova/client/flavor/vnf_onboarding/nginx_vnf.yml
@@ -0,0 +1,12 @@
+classes:
+- service.nova.client
+parameters:
+  nova:
+    client:
+      server:
+        admin_identity:
+          flavor:
+            backend.nginx:
+              ram: 2048
+              disk: 10
+              vcpus: 1
\ No newline at end of file
diff --git a/prometheus/alerta/init.yml b/prometheus/alerta/init.yml
new file mode 100644
index 0000000..a82e8d4
--- /dev/null
+++ b/prometheus/alerta/init.yml
@@ -0,0 +1,2 @@
+classes:
+  - service.prometheus.alerta
diff --git a/prometheus/alertmanager/notification/alerta.yml b/prometheus/alertmanager/notification/alerta.yml
new file mode 100644
index 0000000..816aaf6
--- /dev/null
+++ b/prometheus/alertmanager/notification/alerta.yml
@@ -0,0 +1,20 @@
+parameters:
+  _param:
+    alertmanager_notification_alerta_host: alerta
+    alertmanager_notification_alerta_port: 8080
+  prometheus:
+    alertmanager:
+      enabled: true
+      config:
+        route:
+          routes:
+            alerta:
+              receiver: HTTP-alerta
+              continue: true
+        receiver:
+          HTTP-alerta:
+            enabled: true
+            webhook_configs:
+              alerta:
+                url: "http://${_param:alertmanager_notification_alerta_host}:${_param:alertmanager_notification_alerta_port}/api/webhooks/prometheus"
+                send_resolved: true
diff --git a/prometheus/server/alert/alerta_relabel.yml b/prometheus/server/alert/alerta_relabel.yml
new file mode 100644
index 0000000..a81c59a
--- /dev/null
+++ b/prometheus/server/alert/alerta_relabel.yml
@@ -0,0 +1,19 @@
+parameters:
+  _param:
+    alerta_environment_label: Development
+  prometheus:
+    server:
+      config:
+        alert:
+          labels_add:
+            environment: ${_param:alerta_environment_label}
+        alert_relabel_configs:
+          - replacement: "aggregated"
+            source_labels: "instance"
+            target_label: "instance"
+          - source_labels: ["host", "job"]
+            target_label: "instance"
+            regex: "([a-zA-Z0-9]+;[a-zA-Z0-9_]+)"
+          - source_labels: ["hostname", "job"]
+            target_label: "instance"
+            regex: "([a-zA-Z0-9]+;[a-zA-Z0-9_]+)"
diff --git a/salt/master/formula/git/logrotate.yml b/salt/master/formula/git/logrotate.yml
new file mode 100644
index 0000000..6fcf681
--- /dev/null
+++ b/salt/master/formula/git/logrotate.yml
@@ -0,0 +1,10 @@
+parameters:
+  salt:
+    master:
+      environment:
+        dev:
+          formula:
+            logrotate:
+              source: git
+              address: '${_param:salt_master_environment_repository}/salt-formula-logrotate.git'
+              revision: ${_param:salt_master_environment_revision}
diff --git a/salt/master/formula/git/saltstack.yml b/salt/master/formula/git/saltstack.yml
index fde03ef..d7dde48 100644
--- a/salt/master/formula/git/saltstack.yml
+++ b/salt/master/formula/git/saltstack.yml
@@ -1,3 +1,5 @@
+classes:
+- system.salt.master.formula.git.logrotate
 parameters:
   salt:
     master:
diff --git a/salt/master/formula/pkg/logrotate.yml b/salt/master/formula/pkg/logrotate.yml
new file mode 100644
index 0000000..0cfa0e6
--- /dev/null
+++ b/salt/master/formula/pkg/logrotate.yml
@@ -0,0 +1,9 @@
+parameters:
+  salt:
+    master:
+      environment:
+        prd:
+          formula:
+            logrotate:
+              source: pkg
+              name: salt-formula-logrotate
diff --git a/salt/master/formula/pkg/saltstack.yml b/salt/master/formula/pkg/saltstack.yml
index a62a272..963580c 100644
--- a/salt/master/formula/pkg/saltstack.yml
+++ b/salt/master/formula/pkg/saltstack.yml
@@ -1,3 +1,5 @@
+classes:
+- system.salt.master.formula.pkg.logrotate
 parameters:
   salt:
     master: