ansible: setup: MODULE FAILURE

メインPCのUbuntuをansibleで設定しようとしたら、"The following modules failed to execute: setup\n setup: MODULE FAILURE\nSee stdout/stderr for the exact error\n"のエラーが。

$ ansible-playbook mypc.yml --inventory-file=mypc.cfg PLAY [mypc.yml,] ************************************************************************************************** TASK [Gathering Facts] ************************************************************************************************* fatal: [ubuntu_16]: FAILED! => {"ansible_facts": {}, "changed": false, "msg": "The following modules failed to execute: setup\n setup: MODULE FAILURE\nSee stdout/stderr for the exact error\n"} PLAY RECAP ************************************************************************************************************* ubuntu_16 : ok=0 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0

試しに、playbook ymlのbecome: Trueをbecome: Falseにしたら、エラーなしで実行できました。メインPCのログインユーザーをsudo NOPASSWDにしていないのに、ansibleにsudoパスワードを指定していないことが原因でした。

対応方法1: --ask-become-pass オプション

ansible-playbookを実行するとき、コマンドラインオプション --ask-become-pass をつけてください。BECOME password: のプロンプトが表示されるので、sudoパスワードを入力してください。

$ ansible-playbook mypc.yml --inventory-file=mypc.cfg --ask-become-pass BECOME password:

対応方法2: sudoパスワード不要に設定する

ansibleの接続ユーザをsudoパスワード不要にすることでも、さきほどのansibleエラーはなくなります。

例えば、ユーザーtaroのsudoパスワードを不要にするときは、visudoコマンドを使って、/etc/sudoers.d/taroファイルを新規作成、編集します。

$ sudo visudo -f /etc/sudoers.d/taro
# /etc/sudoers.d/taro taro ALL=(ALL) NOPASSWD: ALL

保存終了するときは、viの操作どおり、ESC、コロン、wq と操作します。構文エラーがあると、

>>> /etc/sudoers.d/taro: 構文エラー2 <<< 次は何でしょうか?

と聞かれるので、「e」で編集継続します。

構文エラーで、sudoを実行できなくなったとき

うっかり、構文エラーのまま保存終了してしまうと、sudoを実行できなくなります。

そうなってしまったら、sudoではなく、pkttyagentコマンドとpkexecコマンドを使います。ターミナルを2つ開きます。

ターミナル1で、pkttyagentコマンドを実行してください。

# ターミナル1 $ pkttyagent --process $(echo $$)

ターミナル2で、pkexecコマンドを実行してください。パスワード入力のダイアログが表示されるので、パスワードを入力してください。

# ターミナル2 $ pkexec visudo -f /etc/sudoers.d/taro

ターミナル2の作業が終わったら、ターミナル1で、Ctrl + C を押して、pkttyagentを終了してください。

# ターミナル1 Ctrl+Cで終了してくださいしてくださいください
タイトルとURLをコピーしました