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
Branches
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