Skip to content

Commit d3efccc

Browse files
authored
Merge pull request #160 from devopshobbies/dev
Implementing terraform modules on the backend
2 parents 0194adf + 6f31e40 commit d3efccc

File tree

10 files changed

+244
-1383
lines changed

10 files changed

+244
-1383
lines changed

app/media/terraform.tfvars

Lines changed: 21 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -1,103 +1,32 @@
11

2-
# Grafana Connection Variables
3-
grafana_connection = {
4-
"url" = "http://localhost:8080",
5-
"auth" = ""
2+
argocd_instance_info = {
3+
server_addr = "http://argocd.local"
4+
username = "username"
5+
password = "password"
6+
insecure = true
67
}
78

89

9-
10-
# Grafana_Contact_Point Variables
11-
create_contact_point = true
12-
contact_point_name = "My Contact Point"
13-
use_email = false
14-
use_slack = true
15-
email_contact_point = {
16-
17-
message = "{ len .Alerts.Firing } firing."
18-
subject = "{{ template \"default.title\" .}}"
19-
single_email = true
20-
disable_resolve_message = false
10+
repository_create = true
11+
argocd_repository_info = {
12+
repo = "https://your_repo.git"
13+
username = "username"
14+
password = "token"
2115
}
22-
23-
slack_contact_point = {
24-
url = "https://hooks.slack.com/<YOUR_SLACK_WEBHOOK_URL>"
25-
text = <<EOT
26-
{{ len .Alerts.Firing }} alerts are firing
27-
28-
Alert summaries:
29-
{{ range .Alerts.Firing }}
30-
{{ template "Alert Instance Template" . }}
31-
{{ end }}
32-
EOT
33-
}
34-
3516

36-
# Use { template "Alert Instance Template" . } or any other template if you plan # to create one. Otherwise, remove it from the text section of Slack in the above example
37-
38-
39-
# Grafana_Message_Template Variables
40-
create_message_template = true
41-
message_template_name = "Alert Instance Template"
42-
message_template_content = <<EOT
43-
{{ define "Alert Instance Template" }}
44-
Firing: {{ .Labels.alertname }}
45-
Silence: {{ .SilenceURL }}
46-
{{ end }}
47-
EOT
48-
49-
5017

51-
# Grafana_Mute_Timing Variables
52-
create_mute_timing = true
53-
mute_timing = {
54-
name = "My Mute Timing"
55-
start = "04:56"
56-
end = "04:57"
57-
weekdays = ["monday", "tuesday:thursday"]
58-
days_of_month = ["1:7", "-1"]
59-
months = ["1:3", "december"]
60-
years = []
18+
application_create = false
19+
argocd_application = {
20+
name = "myapp"
21+
destination_server = "https://kubernetes.default.svc"
22+
destination_namespace = "default"
23+
source_repo_url = "https://your_repo.git"
24+
source_path = "myapp/manifests"
25+
source_target_revision = "master"
6126
}
62-
6327

6428

29+
argocd_sync_options = ["CreateNamespace=true", "ApplyOutOfSyncOnly=true", "FailOnSharedResource=true"]
6530

66-
# Grafana_Notification_Policy Variables
67-
create_notification_policy = true
68-
notification_policy_config = {
69-
group_by = ["..."]
70-
group_wait = "45s"
71-
group_interval = "6m"
72-
repeat_interval = "3h"
73-
}
74-
75-
76-
policies = []
77-
/* policies = [
78-
{
79-
matchers = [
80-
{ label = "mylabel", match = "=", value = "myvalue" },
81-
{ label = "alertname", match = "=", value = "CPU Usage" },
82-
{ label = "Name", match = "=~", value = "host.*|host-b.*" }
83-
]
84-
contact_point = "a_contact_point_1"
85-
continue = true
86-
mute_timings = ["mute_timing_1"]
87-
group_by = ["group1_sub"]
88-
},
89-
{
90-
matchers = [
91-
{ label = "sublabel", match = "=", value = "subvalue" }
92-
]
93-
contact_point = "a_contact_point_1"
94-
continue = false
95-
mute_timings = ["mute_timing_2"]
96-
group_by = ["group2_sub"]
97-
}
98-
99-
100-
] */
101-
102-
103-
31+
auto_prune = false
32+
self_heal = false

app/models/terraform_models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ class ArgoApplication(BaseModel):
9393
class IaCTemplateGenerationArgoCD(BaseModel):
9494
argocd_application:ArgoApplication | None = None
9595
argocd_repository:bool = True
96-
application_depends_repository:bool = True
96+
9797

9898

9999
class IaCTemplateGenerationELB(BaseModel):

app/routes/grafana_terraform.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ def zip_folder(folder_path: str, output_zip_path: str):
1313
file_path = os.path.join(root, file)
1414
# Add file to the zip file
1515
zip_file.write(file_path, os.path.relpath(file_path, folder_path))
16+
1617
@app.post("/api/grafana/terraform")
1718
async def grafana_terraform_template_route(request:GrafanaTerraform) -> Output:
1819

app/routes/terraform.py

Lines changed: 61 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from app.app_instance import app
22
from app.gpt_services import gpt_service
3+
from fastapi.responses import FileResponse
34
from app.services import (
45

56
edit_directory_generator,execute_pythonfile)
@@ -58,74 +59,85 @@ async def IaC_install_generation(request:IaCInstallationInput) -> Output:
5859

5960
@app.post("/api/IaC-template/docker")
6061
async def IaC_template_generation_docker(request:IaCTemplateGenerationDocker) -> Output:
61-
if os.environ.get("TEST"):
62-
return Output(output='output (nothing special)')
63-
generated_prompt = IaC_template_generator_docker(request)
64-
output = gpt_service(generated_prompt)
65-
edit_directory_generator("terraform_generator",output)
66-
execute_pythonfile("MyTerraform","terraform_generator")
67-
return Output(output='output')
62+
63+
dir = 'app/media/terraform.tfvars'
64+
65+
file_response = IaC_template_generator_docker(request)
66+
with open(dir,'w')as f:
67+
f.write(file_response)
68+
69+
return FileResponse(dir, media_type='application/zip', filename=f"terraform.tfvars")
6870

6971
@app.post("/api/IaC-template/aws/ec2")
7072
async def IaC_template_generation_aws_ec2(request:IaCTemplateGenerationEC2) -> Output:
71-
if os.environ.get("TEST"):
72-
return Output(output='output (nothing special)')
73+
74+
dir = 'app/media/terraform.tfvars'
75+
76+
file_response = IaC_template_generator_ec2(request)
77+
with open(dir,'w')as f:
78+
f.write(file_response)
79+
80+
return FileResponse(dir, media_type='application/zip', filename=f"terraform.tfvars")
7381

74-
generated_prompt = IaC_template_generator_ec2(request)
75-
output = gpt_service(generated_prompt)
76-
edit_directory_generator("terraform_generator",output)
77-
execute_pythonfile("MyTerraform","terraform_generator")
78-
return Output(output='output')
7982

8083
@app.post("/api/IaC-template/aws/s3")
8184
async def IaC_template_generation_aws_s3(request:IaCTemplateGenerationS3) -> Output:
82-
if os.environ.get("TEST"):
83-
return Output(output='output (nothing special)')
84-
generated_prompt = IaC_template_generator_s3(request)
85-
output = gpt_service(generated_prompt)
86-
edit_directory_generator("terraform_generator",output)
87-
execute_pythonfile("MyTerraform","terraform_generator")
88-
return Output(output='output')
85+
86+
dir = 'app/media/terraform.tfvars'
87+
88+
file_response = IaC_template_generator_s3(request)
89+
with open(dir,'w')as f:
90+
f.write(file_response)
91+
92+
return FileResponse(dir, media_type='application/zip', filename=f"terraform.tfvars")
93+
8994

9095
@app.post("/api/IaC-template/aws/iam")
9196
async def IaC_template_generation_aws_iam(request:IaCTemplateGenerationIAM) -> Output:
92-
if os.environ.get("TEST"):
93-
return Output(output='output (nothing special)')
94-
generated_prompt = IaC_template_generator_iam(request)
95-
output = gpt_service(generated_prompt)
96-
edit_directory_generator("terraform_generator",output)
97-
execute_pythonfile("MyTerraform","terraform_generator")
98-
return Output(output='output')
97+
98+
dir = 'app/media/terraform.tfvars'
99+
100+
file_response = IaC_template_generator_iam(request)
101+
with open(dir,'w')as f:
102+
f.write(file_response)
103+
104+
return FileResponse(dir, media_type='application/zip', filename=f"terraform.tfvars")
105+
99106

100107

101108
@app.post("/api/IaC-template/argocd")
102109
async def IaC_template_generation_argocd(request:IaCTemplateGenerationArgoCD) -> Output:
103-
if os.environ.get("TEST"):
104-
return Output(output='output (nothing special)')
105-
generated_prompt = IaC_template_generator_argocd(request)
106-
output = gpt_service(generated_prompt)
107-
edit_directory_generator("terraform_generator",output)
108-
execute_pythonfile("MyTerraform","terraform_generator")
109-
return Output(output='output')
110+
111+
dir = 'app/media/terraform.tfvars'
112+
113+
file_response = IaC_template_generator_argocd(request)
114+
with open(dir,'w')as f:
115+
f.write(file_response)
116+
117+
return FileResponse(dir, media_type='application/zip', filename=f"terraform.tfvars")
110118

111119

112120

113121
@app.post("/api/IaC-template/aws/elb")
114122
async def IaC_template_generation_aws_elb(request:IaCTemplateGenerationELB) -> Output:
115-
if os.environ.get("TEST"):
116-
return Output(output='output (nothing special)')
117-
generated_prompt = IaC_template_generator_elb(request)
118-
output = gpt_service(generated_prompt)
119-
edit_directory_generator("terraform_generator",output)
120-
execute_pythonfile("MyTerraform","terraform_generator")
121-
return Output(output='output')
123+
124+
dir = 'app/media/terraform.tfvars'
125+
126+
file_response = IaC_template_generator_elb(request)
127+
with open(dir,'w')as f:
128+
f.write(file_response)
129+
130+
return FileResponse(dir, media_type='application/zip', filename=f"terraform.tfvars")
131+
122132

123133
@app.post("/api/IaC-template/aws/efs")
124134
async def IaC_template_generation_aws_efs(request:IaCTemplateGenerationEFS) -> Output:
125-
if os.environ.get("TEST"):
126-
return Output(output='output (nothing special)')
127-
generated_prompt = IaC_template_generator_efs(request)
128-
output = gpt_service(generated_prompt)
129-
edit_directory_generator("terraform_generator",output)
130-
execute_pythonfile("MyTerraform","terraform_generator")
131-
return Output(output='output')
135+
136+
dir = 'app/media/terraform.tfvars'
137+
138+
file_response = IaC_template_generator_efs(request)
139+
with open(dir,'w')as f:
140+
f.write(file_response)
141+
142+
return FileResponse(dir, media_type='application/zip', filename=f"terraform.tfvars")
143+

0 commit comments

Comments
 (0)