Skip to content

Commit 8eeb9df

Browse files
authored
fix: unused imports, unused context, typos (#4)
Various tidy up, unused imports, unused context, typos
1 parent acbbea3 commit 8eeb9df

File tree

12 files changed

+84
-82
lines changed

12 files changed

+84
-82
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,3 +44,5 @@ terraform.rc
4444
settings.json
4545
TODO.md
4646
.DS_Store
47+
.idea
48+
.venv

CONTRIBUTING.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ For best practices and information on developing with Terraform, see the [I&A Mo
88

99
## Contributing Code
1010

11-
In order to contibute code to this repository, you must submit a *[Pull Request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request)*. To do so, you must *[fork](https://docs.github.com/en/get-started/quickstart/fork-a-repo)* this repostiory, make your changes in your forked version and submit a *Pull Request*.
11+
In order to contribute code to this repository, you must submit a *[Pull Request](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request)*. To do so, you must *[fork](https://docs.github.com/en/get-started/quickstart/fork-a-repo)* this repository, make your changes in your forked version and submit a *Pull Request*.
1212

1313
## Writing Documentation
1414

@@ -20,7 +20,7 @@ README.md is automatically generated by pulling in content from other files. For
2020

2121
Pull Requests (PRs) submitted against this repository undergo a series of static and functional checks.
2222

23-
> :exclamation: Note: Failures during funtional or static checks will prevent a pull request from being accepted.
23+
> :exclamation: Note: Failures during functional or static checks will prevent a pull request from being accepted.
2424
2525
It is a best practice to perform these checks locally prior to submitting a pull request.
2626

@@ -37,15 +37,15 @@ TIPS: **do not** modify the `./project_automation/{test-name}/entrypoint.sh`, in
3737
- Checkov
3838
- Terratest
3939

40-
> :bangbang: The readme.md file will be created after all checks have completed successfuly, it is recommended that you install terraform-docs locally in order to preview your readme.md file prior to publication.
40+
> :bangbang: The readme.md file will be created after all checks have completed successfully, it is recommended that you install terraform-docs locally to preview your README.md file prior to publication.
4141
4242
## Install the required tools
4343

4444
Prerequisites:
4545

4646
- [Python](https://docs.python.org/3/using/index.html)
4747
- [Pip](https://pip.pypa.io/en/stable/installation/)
48-
- [golang](https://go.dev/doc/install) (for macos you can use `brew`)
48+
- [golang](https://go.dev/doc/install) (for macOS you can use `brew`)
4949
- [tflint](https://github.com/terraform-linters/tflint)
5050
- [tfsec](https://aquasecurity.github.io/tfsec/v1.0.11/)
5151
- [Markdown Lint](https://github.com/markdownlint/markdownlint)

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ To use this module you need have the following:
190190
| <a name="input_lambda_python_runtime"></a> [lambda\_python\_runtime](#input\_lambda\_python\_runtime) | Lambda Python runtime | `string` | `"python3.11"` | no |
191191
| <a name="input_lambda_reserved_concurrency"></a> [lambda\_reserved\_concurrency](#input\_lambda\_reserved\_concurrency) | Maximum Lambda reserved concurrency, make sure your AWS quota is sufficient | `number` | `100` | no |
192192
| <a name="input_name_prefix"></a> [name\_prefix](#input\_name\_prefix) | Name to be used on all the resources as identifier. | `string` | `"runtask-tf-plan-analyzer"` | no |
193-
| <a name="input_recovery_window"></a> [recovery\_window](#input\_recovery\_window) | Numbers of day Number of days that AWS Secrets Manager waits before it can delete the secret | `number` | `0` | no |
193+
| <a name="input_recovery_window"></a> [recovery\_window](#input\_recovery\_window) | Number of days that AWS Secrets Manager waits before it can delete the secret | `number` | `0` | no |
194194
| <a name="input_run_task_iam_roles"></a> [run\_task\_iam\_roles](#input\_run\_task\_iam\_roles) | List of IAM roles to be attached to the Lambda function | `list(string)` | `null` | no |
195195
| <a name="input_runtask_stages"></a> [runtask\_stages](#input\_runtask\_stages) | List of all supported run task stages | `list(string)` | <pre>[<br> "pre_plan",<br> "post_plan",<br> "pre_apply"<br>]</pre> | no |
196196
| <a name="input_tags"></a> [tags](#input\_tags) | Map of tags to apply to resources deployed by this solution. | `map(any)` | `null` | no |

lambda/runtask_callback/handler.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import re
2222
from urllib.request import urlopen, Request
2323
from urllib.error import HTTPError, URLError
24-
from urllib.parse import urlencode
2524

2625
HCP_TF_HOST_NAME = os.environ.get("HCP_TF_HOST_NAME", "app.terraform.io")
2726

@@ -32,7 +31,7 @@
3231
logger.info("Log level set to %s" % logger.getEffectiveLevel())
3332

3433

35-
def lambda_handler(event, context):
34+
def lambda_handler(event, _):
3635
logger.debug(json.dumps(event))
3736
try:
3837
# trim empty url from the payload

lambda/runtask_edge/handler.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
import hashlib
21
import base64
3-
import os
2+
import hashlib
43
import json
5-
from urllib.parse import parse_qs, urlencode
64
import logging
5+
import os
76

87
logger = logging.getLogger()
98
log_level = os.environ.get("log_level", logging.INFO)
109

1110
logger.setLevel(log_level)
1211
logger.info("Log level set to %s" % logger.getEffectiveLevel())
1312

14-
def lambda_handler(event, context):
13+
14+
def lambda_handler(event, _):
1515
logger.info("Incoming event : {}".format(json.dumps(event)))
1616
request = event['Records'][0]['cf']['request']
1717
headers = request["headers"]
@@ -31,9 +31,11 @@ def lambda_handler(event, context):
3131
logger.info("Returning request: %s" % json.dumps(request))
3232
return request
3333

34+
3435
def decode_body(encoded_body):
3536
return base64.b64decode(encoded_body).decode('utf-8')
3637

38+
3739
def calculate_payload_hash(payload):
3840
## generate sha256 from payload
3941
return hashlib.sha256(payload.encode('utf-8')).hexdigest()

lambda/runtask_eventbridge/handler.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import logging
2626
import urllib.parse
2727
import boto3
28-
import botocore
2928
import botocore.session
3029

3130
from cgi import parse_header
@@ -63,7 +62,7 @@ class PutEventError(Exception):
6362
"""Raised when Put Events Failed"""
6463
pass
6564

66-
def lambda_handler(event, _context):
65+
def lambda_handler(event, _):
6766
"""Terraform run task function"""
6867
logger.debug(json.dumps(event))
6968

@@ -103,7 +102,7 @@ def lambda_handler(event, _context):
103102
)
104103
return {
105104
"statusCode": 500,
106-
"body": "FailedEntry Error - The entry could not be succesfully forwarded to Amazon EventBridge",
105+
"body": "FailedEntry Error - The entry could not be successfully forwarded to Amazon EventBridge",
107106
}
108107

109108
return {"statusCode": 200, "body": "Message forwarded to Amazon EventBridge"}
@@ -149,7 +148,7 @@ def contains_valid_cloudfront_signature(
149148

150149
def contains_valid_signature(event):
151150
"""Check for the payload signature
152-
HashiCorp Terraform run task documention: https://developer.hashicorp.com/terraform/cloud-docs/integrations/run-tasks#securing-your-run-task
151+
HashiCorp Terraform run task documentation: https://developer.hashicorp.com/terraform/cloud-docs/integrations/run-tasks#securing-your-run-task
153152
"""
154153
secret = cache.get_secret_string(hcp_tf_hmac_secret_arn)
155154
payload_bytes = get_payload_bytes(

lambda/runtask_fulfillment/ai.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
11
import json
2+
import os
3+
24
import boto3
35
import botocore
4-
import logging
5-
import subprocess
6-
import os
76

8-
from utils import logger, stream_messages, tool_config
97
from runtask_utils import generate_runtask_result
108
from tools.get_ami_releases import GetECSAmisReleases
9+
from utils import logger, stream_messages, tool_config
1110

1211
# Initialize model_id and region
13-
default_model_id = "anthropic.claude-3-sonnet-20240229-v1:0"
14-
model_id = os.environ.get("BEDROCK_LLM_MODEL", default_model_id)
12+
model_id = os.environ.get("BEDROCK_LLM_MODEL")
1513
guardrail_id = os.environ.get("BEDROCK_GUARDRAIL_ID", None)
1614
guardrail_version = os.environ.get("BEDROCK_GUARDRAIL_VERSION", None)
1715

@@ -148,7 +146,6 @@ def eval(tf_plan_json):
148146
tool = content["toolUse"]
149147

150148
if tool["name"] == "GetECSAmisReleases":
151-
tool_result = {}
152149

153150
release_details = GetECSAmisReleases().execute(
154151
tool["input"]["image_ids"]

lambda/runtask_fulfillment/handler.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
1-
import os
2-
import sys
31
import json
4-
import time
52
import logging
6-
import requests
3+
import os
4+
75
import boto3
86

97
import ai
@@ -20,7 +18,7 @@
2018
cwl_client = session.client('logs')
2119

2220
# THIS IS THE MAIN FUNCTION TO IMPLEMENT BUSINESS LOGIC
23-
# TO PROCESS THE TERRFORM PLAN FILE or TERRAFORM CONFIG (.tar.gz)
21+
# TO PROCESS THE TERRAFORM PLAN FILE or TERRAFORM CONFIG (.tar.gz)
2422
# SCHEMA - https://developer.hashicorp.com/terraform/cloud-docs/api-docs/run-tasks/run-tasks-integration#severity-and-status-tags
2523
def process_run_task(type: str, data: str, run_id: str):
2624
url = None
@@ -63,7 +61,7 @@ def write_run_task_log(run_id: str, results: list, cw_log_group_dest: str):
6361
)
6462

6563
# Main handler for the Lambda function
66-
def lambda_handler(event, context):
64+
def lambda_handler(event, _):
6765

6866
logger.debug(json.dumps(event, indent=4))
6967

@@ -103,12 +101,12 @@ def lambda_handler(event, context):
103101
configuration_version_download_url, access_token
104102
)
105103
logger.debug(
106-
f"Config downloaded for Workspace: {organization_name}/{workspace_name}, Run: {run_id}\n downloaded at {os.getcwd()}/config"
104+
f"Config downloaded for Workspace: {organization_name}/{workspace_id}, Run: {run_id}\n downloaded at {os.getcwd()}/config"
107105
)
108106

109107
# Run the implemented business logic here
110108
url, status, message, results = process_run_task(
111-
type="pre_plan", path=config_file, run_id=run_id
109+
type="pre_plan", data=config_file, run_id=run_id
112110
)
113111

114112
elif event["payload"]["detail"]["stage"] == "post_plan":

lambda/runtask_fulfillment/runtask_utils.py

Lines changed: 31 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
1-
import os
2-
import re
31
import json
4-
import tarfile
5-
import hashlib
62
import logging
7-
import requests
3+
import os
4+
import re
85
import time
9-
10-
from urllib.request import urlopen, Request
116
from urllib.error import HTTPError, URLError
7+
from urllib.request import urlopen, Request
8+
9+
import requests
1210

1311
logging.basicConfig(format="%(levelname)s: %(message)s")
1412
logger = logging.getLogger()
@@ -31,7 +29,7 @@ def download_config(configuration_version_download_url, access_token):
3129
return config_file
3230

3331

34-
def get_plan(url, access_token) -> str:
32+
def get_plan(url, access_token) -> (str, str):
3533
headers = {
3634
"Authorization": f"Bearer {access_token}",
3735
"Content-type": "application/vnd.api+json",
@@ -59,7 +57,7 @@ def get_plan(url, access_token) -> str:
5957
except URLError as error:
6058
logger.error(str(f"URL error: {error.reason}"))
6159
return None, f"URL Error: {str(error)}"
62-
except TimeoutError:
60+
except TimeoutError as error:
6361
logger.error(f"Timeout error: {str(error)}")
6462
return None, f"Timeout Error: {str(error)}"
6563
except Exception as error:
@@ -73,6 +71,7 @@ def validate_endpoint(endpoint):
7371
result = re.match(pattern, endpoint)
7472
return result
7573

74+
7675
def generate_runtask_result(outcome_id, description, result):
7776
result_json = json.dumps(
7877
{
@@ -105,33 +104,37 @@ def convert_to_markdown(result):
105104
return result
106105

107106

108-
def log_helper(cwl_client, log_group_name, log_stream_name, log_message): # helper function to write RunTask results to dedicated cloudwatch log group
109-
if log_group_name: # true if CW log group name is specified
107+
def log_helper(cwl_client, log_group_name, log_stream_name,
108+
log_message): # helper function to write RunTask results to dedicated cloudwatch log group
109+
if log_group_name: # true if CW log group name is specified
110110
global SEQUENCE_TOKEN
111111
try:
112-
SEQUENCE_TOKEN = log_writer(cwl_client, log_group_name, log_stream_name, log_message, SEQUENCE_TOKEN)["nextSequenceToken"]
112+
SEQUENCE_TOKEN = log_writer(cwl_client, log_group_name, log_stream_name, log_message, SEQUENCE_TOKEN)[
113+
"nextSequenceToken"]
113114
except:
114-
cwl_client.create_log_stream(logGroupName = log_group_name,logStreamName = log_stream_name)
115+
cwl_client.create_log_stream(logGroupName=log_group_name, logStreamName=log_stream_name)
115116
SEQUENCE_TOKEN = log_writer(cwl_client, log_group_name, log_stream_name, log_message)["nextSequenceToken"]
116117

117-
def log_writer(cwl_client, log_group_name, log_stream_name, log_message, sequence_token = False): # writer to CloudWatch log stream based on sequence token
118-
if sequence_token: # if token exist, append to the previous token stream
118+
119+
def log_writer(cwl_client, log_group_name, log_stream_name, log_message,
120+
sequence_token=False): # writer to CloudWatch log stream based on sequence token
121+
if sequence_token: # if token exists, append to the previous token stream
119122
response = cwl_client.put_log_events(
120-
logGroupName = log_group_name,
121-
logStreamName = log_stream_name,
122-
logEvents = [{
123-
'timestamp' : int(round(time.time() * 1000)),
124-
'message' : time.strftime('%Y-%m-%d %H:%M:%S') + ": " + log_message
123+
logGroupName=log_group_name,
124+
logStreamName=log_stream_name,
125+
logEvents=[{
126+
'timestamp': int(round(time.time() * 1000)),
127+
'message': time.strftime('%Y-%m-%d %H:%M:%S') + ": " + log_message
125128
}],
126-
sequenceToken = sequence_token
129+
sequenceToken=sequence_token
127130
)
128-
else: # new log stream, no token exist
131+
else: # new log stream, no token exist
129132
response = cwl_client.put_log_events(
130-
logGroupName = log_group_name,
131-
logStreamName = log_stream_name,
132-
logEvents = [{
133-
'timestamp' : int(round(time.time() * 1000)),
134-
'message' : time.strftime('%Y-%m-%d %H:%M:%S') + ": " + log_message
133+
logGroupName=log_group_name,
134+
logStreamName=log_stream_name,
135+
logEvents=[{
136+
'timestamp': int(round(time.time() * 1000)),
137+
'message': time.strftime('%Y-%m-%d %H:%M:%S') + ": " + log_message
135138
}]
136139
)
137-
return response
140+
return response

0 commit comments

Comments
 (0)