Ansible 动态加密配置变量并将其放置在特定文件夹中

Ansible 动态加密配置变量并将其放置在特定文件夹中,ansible,ansible-vault,Ansible,Ansible Vault,我有一个配置文件,其中包含用户需要更改以适应其环境的字符串变量列表: 配置文件示例: # first_file.yml value_one: <UPDATE> value_two: <UPDATE> # second_file.yml value_one: <UPDATE> value_two: <UPDATE> 我不确定如何最好地解决这个问题,主要的挑战是如何: 成功加密每个变量,而不加密整个文件 将加密变量复制到指定文件 我刚刚把它放在

我有一个配置文件,其中包含用户需要更改以适应其环境的字符串变量列表:

配置文件示例:

# first_file.yml

value_one: <UPDATE>
value_two: <UPDATE>

# second_file.yml

value_one: <UPDATE>
value_two: <UPDATE>
我不确定如何最好地解决这个问题,主要的挑战是如何:

  • 成功加密每个变量,而不加密整个文件
  • 将加密变量复制到指定文件

  • 我刚刚把它放在一起,但它适用于您的情况,保留了结构和缩进:

    #!/bin/bash
    IFS=; while read line; do
      # read key and value from line
      key=$( echo "${line}" | cut -d: -f1 )
      value=$( echo "${line}" | cut -d: -f2 | tr -d '\n' )
    
      # Get spaces to indent
      indent=$( echo "${key}" | grep -o '^ *' )
    
      # if value is not empty... 
      if [ -n "$value" ]; then
        # Encrypt value and indent
        cval=$( echo -n "${value## }" | sed -e "s/^'//" -e "s/'$//" | ansible-vault encrypt_string --vault-password-file ~/.ssh/vault_key.txt | sed "s/^ / ${indent}/")
      fi
    
      # if key is not empty...
      if [ -n "$key" ]; then
        echo -n "${key}: ${cval}"
      fi
      # End the line
      echo
      # unset cval
      unset cval
    done < /dev/stdin
    
    如果您有一些奇怪的结构,请首先通过
    yq
    运行文件以清理它:

    yq r {imput-file} | ./encrypt_values.sh > {output_file}
    

    非常感谢。我不得不做一些小的修改以适应我的文件结构,但它的工作原理与预期相符。我无法理解一个人怎么能如此精通BASH,如此快速地一起完成某件事。这是一项特殊技能。
    cat {input-file} | ./encrypt_values.sh > {output_file}
    
    yq r {imput-file} | ./encrypt_values.sh > {output_file}