From f0b255e93c11310a9dbd45e54fd31fcae2cc2eec Mon Sep 17 00:00:00 2001
From: Debora Benedetto <debora.benedetto@hpe.com>
Date: Mon, 25 Jul 2022 17:34:20 +0200
Subject: [PATCH] add piacere monitoring iac generation

---
 controller/Orchestrator.py                    | 13 +++++--
 .../IntermediateRepresentationUtility.py      | 32 ++++++++++++++++
 icgparser/ModelParser.py                      |  3 +-
 icgparser/PiacereInternalToolsIntegrator.py   | 38 +++++++++++++++++++
 input_file_generated/ir.json                  | 26 ++++++++++++-
 main.py                                       |  4 +-
 .../nginx_openstack/config.yaml               |  3 +-
 .../{ansible => nginx}/config.yaml            |  2 +-
 .../{ansible => nginx}/inventory.j2           |  0
 .../{ansible => nginx}/nginx.yaml             |  0
 .../{ansible => nginx}/ssh_key.j2             |  0
 .../pma => piacere_monitoring}/ansible.cfg    |  0
 .../ansible_requirements.yml                  |  0
 .../piacere_monitoring/config.yaml            |  8 ++++
 .../pma => piacere_monitoring}/hosts.yaml     |  0
 .../install_playbook_requirements.sh          |  0
 .../piacere_monitoring/inventory.j2           |  9 +++++
 .../piacere_monitoring/main.yml               | 22 +++++++++++
 .../piacere_monitoring.yaml                   |  1 +
 .../run-playbook.sh                           |  0
 .../pma => piacere_monitoring}/site.yaml      |  0
 .../site_requirements.yaml                    |  0
 .../piacere_monitoring/ssh_key.j2             |  1 +
 .../pma => piacere_monitoring}/vars/main.yaml | 10 +++--
 .../nginx_openstack/terraform/output.tf       |  4 +-
 plugin/AnsiblePlugin.py                       | 16 +++++---
 plugin/TerraformPlugin.py                     |  6 ---
 template-location.properties                  |  1 +
 templates/ansible/ubuntu/config.tpl           |  2 +-
 templates/ansible/ubuntu/piacere_init.tpl     |  0
 .../open_stack/virtual_machine_out.tpl        |  4 +-
 31 files changed, 175 insertions(+), 30 deletions(-)
 create mode 100644 icgparser/IntermediateRepresentationUtility.py
 create mode 100644 icgparser/PiacereInternalToolsIntegrator.py
 rename output_files_generated/nginx_openstack/{ansible => nginx}/config.yaml (63%)
 rename output_files_generated/nginx_openstack/{ansible => nginx}/inventory.j2 (100%)
 rename output_files_generated/nginx_openstack/{ansible => nginx}/nginx.yaml (100%)
 rename output_files_generated/nginx_openstack/{ansible => nginx}/ssh_key.j2 (100%)
 rename output_files_generated/nginx_openstack/{terraform/ansible/playbooks/pma => piacere_monitoring}/ansible.cfg (100%)
 rename output_files_generated/nginx_openstack/{terraform/ansible/playbooks/pma => piacere_monitoring}/ansible_requirements.yml (100%)
 create mode 100644 output_files_generated/nginx_openstack/piacere_monitoring/config.yaml
 rename output_files_generated/nginx_openstack/{terraform/ansible/playbooks/pma => piacere_monitoring}/hosts.yaml (100%)
 rename output_files_generated/nginx_openstack/{terraform/ansible/playbooks/pma => piacere_monitoring}/install_playbook_requirements.sh (100%)
 create mode 100644 output_files_generated/nginx_openstack/piacere_monitoring/inventory.j2
 create mode 100644 output_files_generated/nginx_openstack/piacere_monitoring/main.yml
 create mode 100644 output_files_generated/nginx_openstack/piacere_monitoring/piacere_monitoring.yaml
 rename output_files_generated/nginx_openstack/{terraform/ansible/playbooks/pma => piacere_monitoring}/run-playbook.sh (100%)
 rename output_files_generated/nginx_openstack/{terraform/ansible/playbooks/pma => piacere_monitoring}/site.yaml (100%)
 rename output_files_generated/nginx_openstack/{terraform/ansible/playbooks/pma => piacere_monitoring}/site_requirements.yaml (100%)
 create mode 100644 output_files_generated/nginx_openstack/piacere_monitoring/ssh_key.j2
 rename output_files_generated/nginx_openstack/{terraform/ansible/playbooks/pma => piacere_monitoring}/vars/main.yaml (67%)
 create mode 100644 templates/ansible/ubuntu/piacere_init.tpl

diff --git a/controller/Orchestrator.py b/controller/Orchestrator.py
index d70f3f7..95cba24 100644
--- a/controller/Orchestrator.py
+++ b/controller/Orchestrator.py
@@ -21,7 +21,8 @@ import time
 import uuid
 import yaml
 
-from icgparser import ModelParser
+from icgparser import ModelParser, PiacereInternalToolsIntegrator
+from icgparser.IntermediateRepresentationUtility import IntermediateRepresentationResources
 from plugin import AnsiblePlugin, TerraformPlugin
 from utility.FileParsingUtility import replace_none_with_empty_str
 
@@ -46,9 +47,10 @@ def choose_plugin(parameters, template_generated_folder):
     for step in parameters["steps"]:
         if step["programming_language"] == "ansible":
             logging.info("Ansible Plugin chosen")
-            metadata_root_folder["iac"].append("ansible")
-            input_data = step["data"]
-            AnsiblePlugin.create_files(input_data, template_generated_folder)
+            step_name = step[IntermediateRepresentationResources.STEP_NAME.value]
+            metadata_root_folder["iac"].append(step_name)
+            # input_data = step["data"]
+            AnsiblePlugin.create_files(step, template_generated_folder)
         elif step["programming_language"] == "terraform":
             logging.info("Terraform Plugin chosen")
             metadata_root_folder["iac"].append("terraform")
@@ -119,6 +121,8 @@ def create_intermediate_representation(model_path, is_multiecore_metamodel, meta
                                                           metamodel_directory=metamodel_directory)
     # intermediate_representation = reorganize_info(intermediate_representation)
     logging.info(f"Successfully created intermediate representation {intermediate_representation}")
+    logging.info("Calling ICG PiacereInternalToolsIntegrator to add info for PIACERE internal tools")
+    intermediate_representation = PiacereInternalToolsIntegrator.add_internal_tool_information(intermediate_representation)
     intermediate_representation_path = "input_file_generated/ir.json"
     save_file(intermediate_representation, intermediate_representation_path)
     logging.info(f"Saved intermediate representation at {intermediate_representation_path}")
@@ -159,6 +163,7 @@ def create_iac_from_doml(model, is_multiecore_metamodel, metamodel_directory):
     intermediate_representation = create_intermediate_representation(model_path, is_multiecore_metamodel,
                                                                      metamodel_directory)
     template_generated_folder = create_iac_from_intermediate_representation(intermediate_representation)
+    PiacereInternalToolsIntegrator.add_files_for_piacere_internal_tools(template_generated_folder)
     compress_folder_info = compress_iac_folder(template_generated_folder)
     return compress_folder_info
 
diff --git a/icgparser/IntermediateRepresentationUtility.py b/icgparser/IntermediateRepresentationUtility.py
new file mode 100644
index 0000000..404f973
--- /dev/null
+++ b/icgparser/IntermediateRepresentationUtility.py
@@ -0,0 +1,32 @@
+import logging
+from enum import Enum
+
+
+class NoValue(Enum):
+    def __repr__(self):
+        return '<%s.%s>' % (self.__class__.__name__, self.name)
+
+
+class IntermediateRepresentationResources(NoValue):
+    STEP_NAME = 'step_name'
+    STEPS = 'steps'
+    DATA = 'data'
+    LANGUAGE = "programming_language"
+    VIRTUAL_MACHINES = 'vms'
+
+
+def find_objects(object_name, intermediate_representation):
+    logging.info(f"Searching for {object_name.value} in intermediate representation")
+    steps = intermediate_representation[IntermediateRepresentationResources.STEPS.value]
+    for step in steps:
+        data = step[IntermediateRepresentationResources.DATA.value]
+        if object_name.value in data.keys():
+            return data[IntermediateRepresentationResources.VIRTUAL_MACHINES.value]
+    return []
+
+
+def add_step(step, intermediate_representation):
+    logging.info("Adding step into intermediate representation")
+    steps = intermediate_representation[IntermediateRepresentationResources.STEPS.value]
+    steps.append(step)
+    return intermediate_representation
diff --git a/icgparser/ModelParser.py b/icgparser/ModelParser.py
index ac945f5..88c5aaf 100644
--- a/icgparser/ModelParser.py
+++ b/icgparser/ModelParser.py
@@ -100,7 +100,7 @@ def parse_application_layer(doml_model, infra_object_step):
         object_representation = {}
 
         application_resource = deployment.eGet("component")
-        ## TODO refactoring
+        ## TODO refactoring -> far diventare lista nodi? nel monitoring sono più nodi
         vm = deployment.eGet("node")
         try:
             for infra_vm in infra_object_step.get("data").get("vms"):
@@ -113,6 +113,7 @@ def parse_application_layer(doml_model, infra_object_step):
         object_representation = DomlParserUtilities.save_attributes(application_resource, object_representation)
 
         application_object_step["data"][deployment_component_name] = object_representation
+        application_object_step["step_name"] = deployment_component_name
     return application_object_step
 
 
diff --git a/icgparser/PiacereInternalToolsIntegrator.py b/icgparser/PiacereInternalToolsIntegrator.py
new file mode 100644
index 0000000..4b314fd
--- /dev/null
+++ b/icgparser/PiacereInternalToolsIntegrator.py
@@ -0,0 +1,38 @@
+import logging
+from distutils.dir_util import copy_tree
+
+from icgparser import IntermediateRepresentationUtility
+from icgparser.IntermediateRepresentationUtility import IntermediateRepresentationResources
+
+
+def extract_info_for_monitoring_agents(intermediate_representation):
+    logging.info("Adding info for monitoring step")
+    monitoring_object_step = {"programming_language": "ansible", "step_name": "piacere_monitoring",
+                              "data": {"piacere_monitoring": {}}}
+    vms = IntermediateRepresentationUtility.find_objects(IntermediateRepresentationResources.VIRTUAL_MACHINES,
+                                                         intermediate_representation)
+    # TODO restore these 2 commented lines: monitoring could be installed on multiple nodes!
+    # monitoring_object_step["data"]["monitoring"]["nodes"] = []
+    # monitoring_object_step["data"]["monitoring"]["nodes"] += vms
+    # TODO remove this line: monitoring could be installed on multiple nodes!
+    if vms:
+        monitoring_object_step["data"]["piacere_monitoring"]["node"] = vms[0]
+    logging.info(f"Monitoring step: {monitoring_object_step}")
+    return monitoring_object_step
+
+
+def add_internal_tool_information(intermediate_representation):
+    monitoring_step = extract_info_for_monitoring_agents(intermediate_representation)
+    intermediate_representation = IntermediateRepresentationUtility.add_step(monitoring_step,
+                                                                             intermediate_representation)
+    return intermediate_representation
+
+
+def add_files_for_monitoring_agents(template_generated_folder_path):
+    monitoring_folder_path = template_generated_folder_path + "/piacere_monitoring"
+    logging.info(f"Adding monitoring agents folder in {monitoring_folder_path}")
+    copy_tree("templates/ansible/ubuntu/monitoring", monitoring_folder_path)
+
+
+def add_files_for_piacere_internal_tools(template_generated_folder_path):
+    add_files_for_monitoring_agents(template_generated_folder_path)
\ No newline at end of file
diff --git a/input_file_generated/ir.json b/input_file_generated/ir.json
index da327c8..4d69189 100644
--- a/input_file_generated/ir.json
+++ b/input_file_generated/ir.json
@@ -105,7 +105,31 @@
           "source_code": "/usr/share/nginx/html/index.html"
         }
       },
-      "programming_language": "ansible"
+      "programming_language": "ansible",
+      "step_name": "nginx"
+    },
+    {
+      "data": {
+        "piacere_monitoring": {
+          "node": {
+            "credentials": "ssh_key",
+            "group": "sg",
+            "i1": {
+              "associated": "sg",
+              "belongsTo": "net1",
+              "endPoint": "16.0.0.1",
+              "name": "i1"
+            },
+            "infra_element_name": "vm1",
+            "name": "concrete_vm",
+            "os": "Ubuntu-Focal-20.04-Daily-2022-04-19",
+            "vm_flavor": "small",
+            "vm_name": "nginx-host"
+          }
+        }
+      },
+      "programming_language": "ansible",
+      "step_name": "piacere_monitoring"
     }
   ]
 }
\ No newline at end of file
diff --git a/main.py b/main.py
index 4babd6f..2766ca7 100644
--- a/main.py
+++ b/main.py
@@ -45,8 +45,8 @@ logging.getLogger().setLevel(logging.INFO)
 # Parse parameters
 # -------------------------------------------------------------------------
 skip_next = False
-doml_directory = "./icgparser/doml"
-model_filename = "icgparser/doml/v1/nginx-aws_v1.domlx"
+doml_directory = "./icgparser/doml/v1"
+model_filename = "icgparser/doml/v1/nginx-openstack_v1.domlx"
 load_split_model = False
 output_file_name = "iac_files.tar.gz"
 
diff --git a/output_files_generated/nginx_openstack/config.yaml b/output_files_generated/nginx_openstack/config.yaml
index 6464675..9aa58bc 100644
--- a/output_files_generated/nginx_openstack/config.yaml
+++ b/output_files_generated/nginx_openstack/config.yaml
@@ -1,5 +1,6 @@
 ---
 iac:
 - terraform
-- ansible
+- nginx
+- piacere_monitoring
 ...
\ No newline at end of file
diff --git a/output_files_generated/nginx_openstack/ansible/config.yaml b/output_files_generated/nginx_openstack/nginx/config.yaml
similarity index 63%
rename from output_files_generated/nginx_openstack/ansible/config.yaml
rename to output_files_generated/nginx_openstack/nginx/config.yaml
index e84af9b..7778c71 100644
--- a/output_files_generated/nginx_openstack/ansible/config.yaml
+++ b/output_files_generated/nginx_openstack/nginx/config.yaml
@@ -2,7 +2,7 @@
 ---
 input:
   - instance_ip_nginx-host
-  - instance_server_private_key_
+  - instance_server_private_key_ssh_key
 output: []
 engine: ansible
 ...
diff --git a/output_files_generated/nginx_openstack/ansible/inventory.j2 b/output_files_generated/nginx_openstack/nginx/inventory.j2
similarity index 100%
rename from output_files_generated/nginx_openstack/ansible/inventory.j2
rename to output_files_generated/nginx_openstack/nginx/inventory.j2
diff --git a/output_files_generated/nginx_openstack/ansible/nginx.yaml b/output_files_generated/nginx_openstack/nginx/nginx.yaml
similarity index 100%
rename from output_files_generated/nginx_openstack/ansible/nginx.yaml
rename to output_files_generated/nginx_openstack/nginx/nginx.yaml
diff --git a/output_files_generated/nginx_openstack/ansible/ssh_key.j2 b/output_files_generated/nginx_openstack/nginx/ssh_key.j2
similarity index 100%
rename from output_files_generated/nginx_openstack/ansible/ssh_key.j2
rename to output_files_generated/nginx_openstack/nginx/ssh_key.j2
diff --git a/output_files_generated/nginx_openstack/terraform/ansible/playbooks/pma/ansible.cfg b/output_files_generated/nginx_openstack/piacere_monitoring/ansible.cfg
similarity index 100%
rename from output_files_generated/nginx_openstack/terraform/ansible/playbooks/pma/ansible.cfg
rename to output_files_generated/nginx_openstack/piacere_monitoring/ansible.cfg
diff --git a/output_files_generated/nginx_openstack/terraform/ansible/playbooks/pma/ansible_requirements.yml b/output_files_generated/nginx_openstack/piacere_monitoring/ansible_requirements.yml
similarity index 100%
rename from output_files_generated/nginx_openstack/terraform/ansible/playbooks/pma/ansible_requirements.yml
rename to output_files_generated/nginx_openstack/piacere_monitoring/ansible_requirements.yml
diff --git a/output_files_generated/nginx_openstack/piacere_monitoring/config.yaml b/output_files_generated/nginx_openstack/piacere_monitoring/config.yaml
new file mode 100644
index 0000000..7778c71
--- /dev/null
+++ b/output_files_generated/nginx_openstack/piacere_monitoring/config.yaml
@@ -0,0 +1,8 @@
+
+---
+input:
+  - instance_ip_nginx-host
+  - instance_server_private_key_ssh_key
+output: []
+engine: ansible
+...
diff --git a/output_files_generated/nginx_openstack/terraform/ansible/playbooks/pma/hosts.yaml b/output_files_generated/nginx_openstack/piacere_monitoring/hosts.yaml
similarity index 100%
rename from output_files_generated/nginx_openstack/terraform/ansible/playbooks/pma/hosts.yaml
rename to output_files_generated/nginx_openstack/piacere_monitoring/hosts.yaml
diff --git a/output_files_generated/nginx_openstack/terraform/ansible/playbooks/pma/install_playbook_requirements.sh b/output_files_generated/nginx_openstack/piacere_monitoring/install_playbook_requirements.sh
similarity index 100%
rename from output_files_generated/nginx_openstack/terraform/ansible/playbooks/pma/install_playbook_requirements.sh
rename to output_files_generated/nginx_openstack/piacere_monitoring/install_playbook_requirements.sh
diff --git a/output_files_generated/nginx_openstack/piacere_monitoring/inventory.j2 b/output_files_generated/nginx_openstack/piacere_monitoring/inventory.j2
new file mode 100644
index 0000000..9bd52bb
--- /dev/null
+++ b/output_files_generated/nginx_openstack/piacere_monitoring/inventory.j2
@@ -0,0 +1,9 @@
+
+
+[servers_for_]
+{{ instance_ip_nginx-host }}
+
+[servers_for_:vars]
+ansible_connection=ssh
+ansible_user=
+ansible_ssh_private_key_file={{ instance_server_private_key_ }}
diff --git a/output_files_generated/nginx_openstack/piacere_monitoring/main.yml b/output_files_generated/nginx_openstack/piacere_monitoring/main.yml
new file mode 100644
index 0000000..657a7ea
--- /dev/null
+++ b/output_files_generated/nginx_openstack/piacere_monitoring/main.yml
@@ -0,0 +1,22 @@
+---
+- hosts: localhost
+  tasks:
+    - name: print disclamer
+      debug:
+        msg: this can also be done with "ansible-galaxy install -r requirements"
+    - name: install telegraf from galaxy
+      community.general.ansible_galaxy_install:
+        type: role
+        requirements_file: ansible_requirements.yml
+
+- hosts: all
+  pre_tasks:
+    - name: Ensure gnupg package
+      package:
+        name: gnupg
+        state: present
+      become: true
+  vars_files:
+    - vars/main.yaml
+  roles:
+    - dj-wasabi.telegraf
\ No newline at end of file
diff --git a/output_files_generated/nginx_openstack/piacere_monitoring/piacere_monitoring.yaml b/output_files_generated/nginx_openstack/piacere_monitoring/piacere_monitoring.yaml
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/output_files_generated/nginx_openstack/piacere_monitoring/piacere_monitoring.yaml
@@ -0,0 +1 @@
+
diff --git a/output_files_generated/nginx_openstack/terraform/ansible/playbooks/pma/run-playbook.sh b/output_files_generated/nginx_openstack/piacere_monitoring/run-playbook.sh
similarity index 100%
rename from output_files_generated/nginx_openstack/terraform/ansible/playbooks/pma/run-playbook.sh
rename to output_files_generated/nginx_openstack/piacere_monitoring/run-playbook.sh
diff --git a/output_files_generated/nginx_openstack/terraform/ansible/playbooks/pma/site.yaml b/output_files_generated/nginx_openstack/piacere_monitoring/site.yaml
similarity index 100%
rename from output_files_generated/nginx_openstack/terraform/ansible/playbooks/pma/site.yaml
rename to output_files_generated/nginx_openstack/piacere_monitoring/site.yaml
diff --git a/output_files_generated/nginx_openstack/terraform/ansible/playbooks/pma/site_requirements.yaml b/output_files_generated/nginx_openstack/piacere_monitoring/site_requirements.yaml
similarity index 100%
rename from output_files_generated/nginx_openstack/terraform/ansible/playbooks/pma/site_requirements.yaml
rename to output_files_generated/nginx_openstack/piacere_monitoring/site_requirements.yaml
diff --git a/output_files_generated/nginx_openstack/piacere_monitoring/ssh_key.j2 b/output_files_generated/nginx_openstack/piacere_monitoring/ssh_key.j2
new file mode 100644
index 0000000..1b9ad07
--- /dev/null
+++ b/output_files_generated/nginx_openstack/piacere_monitoring/ssh_key.j2
@@ -0,0 +1 @@
+{{ instance_server_private_key }}
\ No newline at end of file
diff --git a/output_files_generated/nginx_openstack/terraform/ansible/playbooks/pma/vars/main.yaml b/output_files_generated/nginx_openstack/piacere_monitoring/vars/main.yaml
similarity index 67%
rename from output_files_generated/nginx_openstack/terraform/ansible/playbooks/pma/vars/main.yaml
rename to output_files_generated/nginx_openstack/piacere_monitoring/vars/main.yaml
index ada2316..861faf3 100644
--- a/output_files_generated/nginx_openstack/terraform/ansible/playbooks/pma/vars/main.yaml
+++ b/output_files_generated/nginx_openstack/piacere_monitoring/vars/main.yaml
@@ -1,3 +1,9 @@
+pma_deployment_id: "123e4567-e89b-12d3-a456-426614174002"
+pma_influxdb_bucket: "bucket"
+pma_influxdb_token: "piacerePassword"
+pma_influxdb_org: "piacere"
+pma_influxdb_addr: "https://influxdb.pm.ci.piacere.digital.tecnalia.dev"
+
 telegraf_agent_package_state: latest
 
 telegraf_agent_output:
@@ -18,6 +24,4 @@ telegraf_plugins_default:
   - plugin: mem
   - plugin: processes
   - plugin: disk
-  - plugin: net
-  
-  
+  - plugin: net
\ No newline at end of file
diff --git a/output_files_generated/nginx_openstack/terraform/output.tf b/output_files_generated/nginx_openstack/terraform/output.tf
index 2f4e6e3..6fcb19b 100644
--- a/output_files_generated/nginx_openstack/terraform/output.tf
+++ b/output_files_generated/nginx_openstack/terraform/output.tf
@@ -1,10 +1,10 @@
 
 
-output "instance_server_public_key_" {
+output "instance_server_public_key_ssh_key" {
   value = openstack_compute_keypair_v2.ssh_key.public_key
 }
 
-output "instance_server_private_key_" {
+output "instance_server_private_key_ssh_key" {
   value = openstack_compute_keypair_v2.ssh_key.private_key
 }
 
diff --git a/plugin/AnsiblePlugin.py b/plugin/AnsiblePlugin.py
index e0eb144..493eced 100644
--- a/plugin/AnsiblePlugin.py
+++ b/plugin/AnsiblePlugin.py
@@ -14,6 +14,8 @@
 #-------------------------------------------------------------------------
 
 import logging
+
+from icgparser.IntermediateRepresentationUtility import IntermediateRepresentationResources
 from plugin import TemplateUtils
 from plugin.PluginException import PluginResourceNotFoundError
 
@@ -43,8 +45,10 @@ def create_inventory_file(parameters, language, operating_system, template_name)
     return template_filled
 
 
-def create_files(parameters, output_path):
-    language = "ansible"
+def create_files(step, output_path):
+    language = step[IntermediateRepresentationResources.LANGUAGE.value]
+    step_name = step[IntermediateRepresentationResources.STEP_NAME.value]
+    parameters = step["data"]
     for resource_name, resource in parameters.items():
         logging.info("Creating template for resource '%s'", resource_name)
         operating_system = find_operating_system(resource)
@@ -53,10 +57,10 @@ def create_files(parameters, output_path):
             # for resource_params in parameters[resource_name]:
             resource_params = parameters[resource_name]
 
-            ansible_output_file_path = output_path + "/".join([language, resource_name]) + ".yaml"
-            inventory_output_file_path = output_path + "/".join([language, "inventory"]) + ".j2"
-            config_output_file_path = output_path + "/".join([language, "config"]) + ".yaml"
-            ssh_key_output_file_path = output_path + "/".join([language, "ssh_key.j2"])
+            ansible_output_file_path = output_path + "/".join([step_name, resource_name]) + ".yaml"
+            inventory_output_file_path = output_path + "/".join([step_name, "inventory"]) + ".j2"
+            config_output_file_path = output_path + "/".join([step_name, "config"]) + ".yaml"
+            ssh_key_output_file_path = output_path + "/".join([step_name, "ssh_key.j2"])
 
             template = TemplateUtils.read_template(ansible_template_path)
             template_filled = TemplateUtils.edit_template(template, resource_params)
diff --git a/plugin/TerraformPlugin.py b/plugin/TerraformPlugin.py
index 69f5e73..01fa43b 100644
--- a/plugin/TerraformPlugin.py
+++ b/plugin/TerraformPlugin.py
@@ -19,11 +19,6 @@ from distutils.dir_util import copy_tree
 from plugin import TemplateUtils, PluginUtility
 
 
-def store_monitoring_agents_folder(output_path):
-    logging.info(f"Adding monitoring agents folder in {output_path}")
-    copy_tree("templates/terraform/open_stack/agents_playbook", output_path)
-
-
 def create_files(parameters, output_path):
     language = "terraform"
     provider = parameters["provider"]
@@ -58,7 +53,6 @@ def create_files(parameters, output_path):
     TemplateUtils.write_template(terraform_out_file, output_file_stored_path)
     config_file_stored_path = output_path + "/config.yaml"
     TemplateUtils.write_template(config_file, config_file_stored_path)
-    store_monitoring_agents_folder(output_path)
     logging.info("Terraform main file available at: {}".format(main_file_stored_path))
     logging.info(f"Terraform output file available at {output_file_stored_path}")
 
diff --git a/template-location.properties b/template-location.properties
index dc464b3..b9fa63f 100644
--- a/template-location.properties
+++ b/template-location.properties
@@ -41,6 +41,7 @@ nginx = templates/ansible/ubuntu/nginx.tpl
 mysql = templates/ansible/ubuntu/mysql.tpl
 wordpress = templates/ansible/ubuntu/wordpress.tpl
 postgres = templates/ansible/ubuntu/postgres.tpl
+piacere_monitoring = templates/ansible/ubuntu/piacere_init.tpl
 
 [ansible.centos]
 mysql = templates/ansible/centos/mysql.tpl
diff --git a/templates/ansible/ubuntu/config.tpl b/templates/ansible/ubuntu/config.tpl
index d589352..015123e 100644
--- a/templates/ansible/ubuntu/config.tpl
+++ b/templates/ansible/ubuntu/config.tpl
@@ -16,7 +16,7 @@
 ---
 input:
   - instance_ip_{{ node.vm_name }}
-  - instance_server_private_key_{{ node.vm_key_name }}
+  - instance_server_private_key_{{ node.credentials }}
 output: []
 engine: ansible
 ...
diff --git a/templates/ansible/ubuntu/piacere_init.tpl b/templates/ansible/ubuntu/piacere_init.tpl
new file mode 100644
index 0000000..e69de29
diff --git a/templates/terraform/open_stack/virtual_machine_out.tpl b/templates/terraform/open_stack/virtual_machine_out.tpl
index 6df4079..8f5f19e 100644
--- a/templates/terraform/open_stack/virtual_machine_out.tpl
+++ b/templates/terraform/open_stack/virtual_machine_out.tpl
@@ -14,11 +14,11 @@
 #-------------------------------------------------------------------------
 #}
 
-output "instance_server_public_key_{{ vm_key_name }}" {
+output "instance_server_public_key_{{ credentials }}" {
   value = openstack_compute_keypair_v2.{{ credentials }}.public_key
 }
 
-output "instance_server_private_key_{{ vm_key_name }}" {
+output "instance_server_private_key_{{ credentials }}" {
   value = openstack_compute_keypair_v2.{{ credentials }}.private_key
 }
 
-- 
GitLab