如何用Python按变量名对Terraform的variables.tf文件排序
Terraform variables.tf 变量按名称排序的Python实现方案
实现逻辑
- 读取variables.tf文件内容,逐个提取完整的variable定义块
- 提取每个块的变量名作为排序键
- 按字母顺序对所有变量块排序后,重新拼接写入文件
完整代码
import re def sort_terraform_variables(input_path: str, output_path: str = None): # 读取原始文件内容 with open(input_path, 'r', encoding='utf-8') as f: content = f.read() # 正则匹配所有完整的variable定义块,支持块内换行 var_pattern = re.compile(r'variable\s+"([^"]+)"\s+\{[\s\S]*?\}', re.MULTILINE) # 匹配文件开头的注释(如果有的话,保留文件头注释) header_pattern = re.compile(r'^[\s\S]*?(?=variable\s+")', re.MULTILINE) # 提取文件头注释 header_match = header_pattern.match(content) header = header_match.group(0) if header_match else '' # 提取所有变量块,按变量名排序 sorted_vars = sorted( [(match.group(1), match.group(0)) for match in var_pattern.finditer(content)], key=lambda x: x[0].lower() # 不需要忽略大小写排序可以删掉.lower() ) # 拼接排序后的内容 sorted_content = header + '\n\n'.join([var[1] for var in sorted_vars]) + '\n' # 写入输出文件,默认覆盖原文件 output_path = output_path or input_path with open(output_path, 'w', encoding='utf-8') as f: f.write(sorted_content) if __name__ == '__main__': # 执行排序,默认处理当前目录的variables.tf直接覆盖 # 需要保留原文件的话,可传入第二个参数作为输出路径,比如'sorted_variables.tf' sort_terraform_variables('variables.tf')
使用说明
- 运行前先备份你的variables.tf文件,避免意外丢失内容
- 将上述代码保存为
sort_tf_vars.py,放在和variables.tf同级的目录下 - 执行命令
python sort_tf_vars.py即可完成排序 - 如果你的variables.tf中除了variable定义和开头注释外,还包含locals、output等其他类型的块,调整正则匹配规则即可适配。
内容的提问来源于stack exchange,提问作者Boxy
相关产品推荐
相关产品推荐

