ansible 2.0でdeprecated(非推奨)になってしまったものが、2.2に上がって使えなくなってしまったので、全部修正する必要があります。直すの自体は簡単ですが、外部のplaybookに依存していると修正のPR出してもすぐにMergeしてもらえなかったりして面倒ではあります。
修正する際は、2.1などで試しにかけてみるのがdeprecatedと怒られて簡単です。
2.2に上げてしまうと、ただのsyntax errorとしか表示されなかったりします。
分かりやすく修正箇所をまとめていこうと思います。
with_系のloopに使う変数は "{{var}}"
で囲む
bare variablesと怒られてしまうやつ
2.2からはただのsyntax errorとしか出ないのでちょっと分かりにくくなります。
- with_items: somelist
+ with_items: "{{somelist}}"
with_系のloopの未定義変数の扱い
未定義の変数を置いているのがそもそもアレなので修正しましょう。
2.1まではloopを中断せずに警告が出るようになってます。
2.2では、'var' is undefined
と出て失敗するようになりました。
ansible-galaxyのrequirementsファイルはyaml形式にする
過去はtxt形式で書けましたが、yaml形式で書く必要があります。
Ansibleを実用的に。ansible-galaxyのロールをファイル管理しよう - さくらのナレッジ
辞書変数をtaskの全ての変数に割り当てるような使い方をしない
こちらは2.2でもDEPRICATION WARNING
として怒られるだけです。
辞書変数自体をtaskの全ての変数に割り当てるような使い方をするのではなく、明示的にキーを指定しましょう。
- hosts: localhost
gather_facts: no
vars:
debug_params:
msg: "hello there"
tasks:
# These are both deprecated:
- debug: "{{debug_params}}"
- debug:
args: "{{debug_params}}"
# Use this instead:
- debug:
msg: "{{debug_params['msg']}}"
ホストパターンの区切りにはセミコロン(;
)ではなく、コロン(:
)もしくはカンマ(,
)を使う
2.1までは、hostの定義に;を使えましたが、2.2では使えなくなっています。
(何も出ずに適用されないだけなので見逃しやすい)
和集合を表す場合は以下のように書き換えましょう
- hosts: dev;staging
+ hosts: dev:staging
ホストの範囲指定には[x-y]ではなく、[x:y]を使う
番号が振られたサーバを範囲指定する際は以下のように書き換える
こちらは2.2でもWARNING
が出ます
- hosts: web[5-10]
+ hosts: web[5:10]
sudo/suの代わりにbecomeを使う
こちらも2.2ではDEPRICATION WARNING
として怒られるだけです。
Ansible1.9からはsudo/suの代わりにbecomeを使う - Qiita
vars_promptのshort form形式を使わない
こちらも2.2ではDEPRICATION WARNING
として怒られるだけです。
- vars_prompt:
- variable_name: "Prompt string"
+ vars_prompt:
+ - name: "variable_name"
+ prompt: "Prompt string"
include構文のtop levelで変数を定義しない
- - include: foo.yml
- a: 1
+ - include: foo.yml
+ vars:
+ a: 1
any_errors_fatal
アトリビュートはtaskの中で指定していたら削除する
個人的に使ったことないですが、使っていたら削除しましょう。
environment
の辞書は"{{var}}"
で囲む
- environment: bar_env
+ environment: "{{bar_env}}"
tagsは、task includeのパラメータで指定する形式から置き換える
2.2以降だと、tagsは単に無視される(tagを指定しても実行されないことに注意)
- - include: foo.yml tags=a,b,c
+ - include: foo.yml
+ tags: [a, b, c]
タスクのfirst_available_file
オプションは置き換える
代わりにwith_first_found
オプションかlookup
プラグインを使う
Ansibleのplaybookで使用できるアトリビュートの一覧 - Qiita