61 lines
1.9 KiB
Python
Executable File
61 lines
1.9 KiB
Python
Executable File
import boto3
|
|
import json
|
|
import os
|
|
import subprocess
|
|
import time
|
|
|
|
from moto.ssm.utils import convert_to_tree
|
|
|
|
|
|
def retrieve_by_path(client, path):
|
|
print(f"Retrieving all parameters from {path}. "
|
|
f"AWS has around 14000 parameters, and we can only retrieve 10 at the time, so this may take a while.\n\n")
|
|
x = client.get_parameters_by_path(Path=path, Recursive=True)
|
|
parameters = x["Parameters"]
|
|
next_token = x["NextToken"]
|
|
while next_token:
|
|
x = client.get_parameters_by_path(Path=path, Recursive=True, NextToken=next_token)
|
|
parameters.extend(x["Parameters"])
|
|
next_token = x.get("NextToken")
|
|
if len(parameters) % 100 == 0:
|
|
print(f"Retrieved {len(parameters)} from {path}...")
|
|
time.sleep(0.5)
|
|
|
|
return parameters
|
|
|
|
|
|
def main():
|
|
"""
|
|
Retrieve global parameters from SSM
|
|
- Download from AWS
|
|
- Convert them to a more space-optimized data format
|
|
- Store this in the dedicated moto/ssm/resources-folder
|
|
|
|
Note:
|
|
There are around 20k parameters, and we can only retrieve 10 at a time.
|
|
So running this scripts takes a while.
|
|
"""
|
|
|
|
client = boto3.client('ssm', region_name="us-west-1")
|
|
|
|
default_param_paths = ["/aws/service/global-infrastructure/regions",
|
|
"/aws/service/global-infrastructure/services"]
|
|
|
|
for path in default_param_paths:
|
|
params = retrieve_by_path(client, path)
|
|
tree = convert_to_tree(params)
|
|
root_dir = (
|
|
subprocess.check_output(["git", "rev-parse", "--show-toplevel"])
|
|
.decode()
|
|
.strip()
|
|
)
|
|
filename = "{}.json".format(path.split("/")[-1])
|
|
dest = os.path.join(root_dir, "moto/ssm/resources/{}".format(filename))
|
|
print("Writing data to {0}".format(dest))
|
|
with open(dest, "w") as open_file:
|
|
json.dump(tree, open_file, sort_keys=True, indent=2)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|