LoginSignup
2
2

More than 5 years have passed since last update.

Ansibleでtemplateのdestに設定されている値を取得する

Last updated at Posted at 2015-02-21

Ansibleでtemplateタスクを使う時、これから生成しようとするファイルが既に存在する場合、そのファイルには、どんな値が設定されているか知りたい時がある。

そこで、現在のdestの変数部分にあたる値を取得するスクリプトをざっくり書いてみた。

こんなansibleのタスクと、

example.yml
   - template: |
       src=src.conf
       dest=dest.conf

こんなtemplateがあるとする。

src.conf
tmp_dir={{ tmp_dir }}

で、既にdestにあたるファイルが存在する場合、変数部分に何の値が入っているか知りたい。この例だと/tmpにあたる。

dest.conf
tmp_dir=/tmp

そこで、以下のスクリプトを書いてみた。

get_dest_value.rb
delimitor="!!del!!"
template_variable_symbol=/{{.*?}}/

src_filename=ARGV[0]
dest_filename=ARGV[1]

src_file=open(src_filename).read.split("\n")
dest_file=open(dest_filename).read.split("\n")

cnt=0
src_file.each{|f|

  src_str=src_file[cnt]
  dest_str=dest_file[cnt]

  mask=src_str.gsub(template_variable_symbol,delimitor).split(delimitor)
  template_variable=src_str.scan(template_variable_symbol)

  dest_variable=[]

  (0..mask.size-1).each{|i|

    mask_preffix=""

    (0..i).each{|i|

      if i==0

        mask_preffix+=mask[i]

      else i>0

        if !dest_variable[i-1].nil?

          mask_preffix+=dest_variable[i-1]
          mask_preffix+=mask[i]

        end

      end

    }

    mask_suffix=""
    if mask[i+1].nil?
      mask_suffix="$"
    else
      mask_suffix=mask[i+1]
    end

    /#{mask_preffix}(.*?)#{mask_suffix}/ =~ dest_str

    dest_variable << $1

    print "#{template_variable[i]} : #{dest_variable[i]}\n"

  }

  cnt+=1

}

スクリプトを実行すると、destに設定されている値が表示される。
templateがマスクになってるイメージですかね。

$ ruby get_dest_value.rb src.conf dest.conf 
{{ tmp_dir }} : /tmp

サーバで設定ファイル直接書き換えられてる可能性がある場合や、
未知のサーバに対してtemplate適用したい際の現状調査や、
serverspecと組み合わせて、設定ファイルのテストとかできる。

ansibleのDry-runだとちょい物足りないときとか使えばいい。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2