You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 02:18:01