64 lines
1.5 KiB
Python
64 lines
1.5 KiB
Python
|
#!/usr/bin/python3
|
||
|
import os
|
||
|
import boto3
|
||
|
import argparse
|
||
|
|
||
|
parser = argparse.ArgumentParser(
|
||
|
description="Get SSM parameters beyond <path> and write to files")
|
||
|
parser.add_argument(
|
||
|
"--path",
|
||
|
dest="path",
|
||
|
action="store",
|
||
|
required=True,
|
||
|
help="SSM parameter path")
|
||
|
parser.add_argument(
|
||
|
"--root",
|
||
|
dest="root",
|
||
|
action="store",
|
||
|
required=True,
|
||
|
help="root filesystem path to create files")
|
||
|
|
||
|
args = parser.parse_args()
|
||
|
|
||
|
|
||
|
session = boto3.Session()
|
||
|
awsSSMClient = session.client('ssm')
|
||
|
|
||
|
|
||
|
def get_parameters_by_path(nextToken=None):
|
||
|
params = {
|
||
|
'Path': args.path,
|
||
|
'Recursive': True,
|
||
|
'WithDecryption': True
|
||
|
}
|
||
|
if nextToken is not None:
|
||
|
params['NextToken'] = nextToken
|
||
|
return awsSSMClient.get_parameters_by_path(**params)
|
||
|
|
||
|
|
||
|
def getParameters():
|
||
|
nextToken = None
|
||
|
while True:
|
||
|
response = get_parameters_by_path(nextToken)
|
||
|
parameters = response['Parameters']
|
||
|
if len(parameters) == 0:
|
||
|
break
|
||
|
for parameter in parameters:
|
||
|
yield parameter
|
||
|
if 'NextToken' not in response:
|
||
|
break
|
||
|
nextToken = response['NextToken']
|
||
|
|
||
|
|
||
|
for parameter in getParameters():
|
||
|
file_name = os.path.join(
|
||
|
args.root, parameter["Name"].removeprefix(
|
||
|
args.path).lstrip("/"))
|
||
|
|
||
|
os.makedirs(os.path.dirname(file_name), mode=0o755, exist_ok=True)
|
||
|
|
||
|
#print(f'{file_name}={parameter["Value"]}')
|
||
|
|
||
|
with open(file_name, "w") as file:
|
||
|
file.write(parameter["Value"])
|