Skip to content
Snippets Groups Projects
Commit f0b255e9 authored by debora.benedetto@hpe.com's avatar debora.benedetto@hpe.com
Browse files

add piacere monitoring iac generation

parent 6c8831c8
No related branches found
No related tags found
No related merge requests found
Showing
with 151 additions and 10 deletions
......@@ -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
......
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
......@@ -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
......
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
......@@ -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
......@@ -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"
......
---
iac:
- terraform
- ansible
- nginx
- piacere_monitoring
...
\ No newline at end of file
......@@ -2,7 +2,7 @@
---
input:
- instance_ip_nginx-host
- instance_server_private_key_
- instance_server_private_key_ssh_key
output: []
engine: ansible
...
---
input:
- instance_ip_nginx-host
- instance_server_private_key_ssh_key
output: []
engine: ansible
...
[servers_for_]
{{ instance_ip_nginx-host }}
[servers_for_:vars]
ansible_connection=ssh
ansible_user=
ansible_ssh_private_key_file={{ instance_server_private_key_ }}
---
- 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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment