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" } ] }