プロジェクト

全般

プロフィール

AnsibleでYAMLの書き方

トラブルシュート

文字列中のコロンとそれに続くスペースが文法エラーとなる

次のようなタスクを実行すると、

- name: 管理ユーザー(wheelグループ)がsudoできる権限の設定
  replace: dest=/etc/sudoers
           regexp='^#\s+(%wheel.*NOPASSWD: ALL)'
           replace='\1'

次のように文法エラーが発生します。

ERROR! Syntax Error while loading YAML.

The error appears to have been in '/home/foobar/work/roles/adminuser/tasks/main.yml': line 11, column 42,
 but maybe elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

  replace: dest=/etc/sudoers
           regexp="^#\s+(%wheel.*NOPASSWD: ALL)" 
                                         ^ here

回避策

コロンを変数化する

- name: 管理ユーザー(wheelグループ)がsudoできる権限の設定
  replace: dest=/etc/sudoers
           regexp="^#\s+(%wheel.*NOPASSWD{{':'}} ALL)" 
           replace='\1'

折り返し記号(>)を使う

- name: 管理ユーザー(wheelグループ)がsudoできる権限の設定
  replace: >
    dest=/etc/sudoers
    regexp='^#\s+(%wheel.*NOPASSWD: ALL)'
    replace='\1'

ディクショナリ記法を使う

- name: 管理ユーザー(wheelグループ)がsudoできる権限の設定
  replace:
    dest: /etc/sudoers
    regexp: '^#\s+(%wheel.*NOPASSWD: ALL)'
    replace: '\1'