Kanji
・云架构工程师 / 自由职业 ・1993年出生 ・爱媛县出身 / 现居东京都涩谷区 ・5年 AWS 实战经验 个人资料详情
目录
本文引用的Python脚本符合PEP8。
他们使用 flake8 进行语法检查,使用 black 进行自动格式化。
由于处理原因必须忽略检查的代码包括“#noqa”。
最大行长度( max-line-length )设置为 200 个字符。
max-line-length
Python运行时版本为3.12.1,兼容性已测试。
argparse
pyyaml
samconfig.yml
parameter_overrides
import yaml import argparse def is_already_transformed(overrides): return all(isinstance(item, str) and "=" in item for item in overrides) def transform_parameter_overrides(data): for key, value in data.items(): if isinstance(value, dict) and "global" in value and "parameters" in value["global"]: parameters = value["global"]["parameters"] if "parameter_overrides" in parameters: if not is_already_transformed(parameters["parameter_overrides"]): new_overrides = [] for override in parameters["parameter_overrides"]: if isinstance(override, dict): for k, v in override.items(): if isinstance(v, list): v = ",".join(v) new_overrides.append(f"{k}={v}") parameters["parameter_overrides"] = new_overrides return data def main(input_file, output_file): with open(input_file, "r") as f: data = yaml.safe_load(f) transformed_data = transform_parameter_overrides(data) with open(output_file, "w") as f: yaml.dump(transformed_data, f, default_flow_style=False, sort_keys=False) if __name__ == "__main__": parser = argparse.ArgumentParser(description="Transform parameter overrides in a YAML file.") parser.add_argument("--input-file", help="Path to the input YAML file.", default="samconfig.original.yml") parser.add_argument("--output-file", help="Path to the output YAML file.", default="samconfig.yml") args = parser.parse_args() main(args.input_file, args.output_file)
samconfig.original.yml
python transform_parameter_overrides.py
version: 0.1 dev: global: parameters: parameter_overrides: - Environment: dev - Whitelist: # Windows Update # reference: https://learn.microsoft.com/en-us/windows-server/administration/windows-server-update-services/deploy/2-configure-wsus#211-configure-your-firewall-to-allow-your-first-wsus-server-to-connect-to-microsoft-domains-on-the-internet - .windowsupdate.microsoft.com - .update.microsoft.com - .windowsupdate.com - download.microsoft.com - .download.windowsupdate.com - wustat.windows.com - ntservicepack.microsoft.com - go.microsoft.com - dl.delivery.mp.microsoft.com - .delivery.mp.microsoft.com - .microsoft.com
Whitelist
version: 0.1 dev: global: parameters: parameter_overrides: - Environment=dev - Whitelist=.windowsupdate.microsoft.com,.update.microsoft.com,.windowsupdate.com,download.microsoft.com,.download.windowsupdate.com,wustat.windows.com,ntservicepack.microsoft.com,go.microsoft.com,dl.delivery.mp.microsoft.com,.delivery.mp.microsoft.com,.microsoft.com
部署CloudFormation时,您可以提供参数作为外部文件,并使用“–cli-input-json”选项指定JSON文件。从 YAML 文件生成此 JSON 文件的过程如下。
所需的模块是:
argparse 是标准库的一部分,因此不需要额外安装。
pyyaml json
parameter.original.yml
Parameters
--cli-input-json
import yaml import json import argparse def transform_parameters(data): if "Parameters" in data: new_parameters = [] for param in data["Parameters"]: for key, value in param.items(): if isinstance(value, list): value = ",".join(value) new_parameters.append({"ParameterKey": key, "ParameterValue": value}) data["Parameters"] = new_parameters return data def main(input_file, output_file): with open(input_file, "r") as f: data = yaml.safe_load(f) transformed_data = transform_parameters(data) with open(output_file, "w") as f: json.dump(transformed_data, f, indent=4) if __name__ == "__main__": parser = argparse.ArgumentParser(description="Transform parameters in a YAML file.") parser.add_argument("--input-file", help="Path to the input YAML file.", default="parameter.original.yml") parser.add_argument("--output-file", help="Path to the output JSON file.", default="parameter.json") args = parser.parse_args() main(args.input_file, args.output_file)
parameter.json
python transform_parameters.py
Parameters: Environment: - dev Whitelist: - .windowsupdate.microsoft.com - .update.microsoft.com - .windowsupdate.com - download.microsoft.com - .download.windowsupdate.com - wustat.windows.com - ntservicepack.microsoft.com - go.microsoft.com - dl.delivery.mp.microsoft.com - .delivery.mp.microsoft.com - .microsoft.com
{ "Parameters": [ { "ParameterKey": "Environment", "ParameterValue": "dev" }, { "ParameterKey": "Whitelist", "ParameterValue": ".windowsupdate.microsoft.com,.update.microsoft.com,.windowsupdate.com,download.microsoft.com,.download.windowsupdate.com,wustat.windows.com,ntservicepack.microsoft.com,go.microsoft.com,dl.delivery.mp.microsoft.com,.delivery.mp.microsoft.com,.microsoft.com" } ] }