LoginSignup
27
30

More than 5 years have passed since last update.

ansible 2.2で使えなくなってしまったものまとめ

Posted at

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

27
30
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
27
30