Ansibleのエラーメッセージ
お疲れ様です。伊藤です。
ちょっとModuleの説明(というか公式の翻訳情報ですが。。。)が続いたのでちょっと趣向を変えてplaybook実行時のエラーについて書きます。
というのもAnsibleのエラーメッセージは英語で分かりづらくネットにも情報がほとんど上がっていないので多少なりとも上げていきたいと。。そういう感じです。
基本的なエラーメッセージの見方ですが、"msg":の後がメッセージになっているのでその部分を拾っていけばOKです。後は\n\rとか改行記号が入っていたりするのでそのせいで読み辛くなってたりします。
- エラーメッセージ
fatal: [xxx.xxx.xxx.xxx]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host xxx.xxx.xxx.xxx port 5986: No route to host\r\n", "unreachable": true} to retry, use: --limit @/try-ansible-best-practices/site.retry
- 対処
Moduleはuserですが、エラー内容は関係ありません。このメッセージが出た場合はWindowsの接続用に通信ポートが5986(WinRM)になっていた状態でLinuxにSSHで接続しようとして繋げないよ、というエラーになっています。この場合は変数にansible_ssh_port=5986の記載があり、変数を設定する場所をミスってLinuxも含め全サーバこの変数が対象になっていたためです。Windowsのみこの変数のが有効になるように宣言をきちんとして正常終了しました。
- エラーメッセージ
fatal: [xxx.xxx.xxx.xxx]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: Host key verification failed.\r\n", "unreachable": true}
- 対処
これもモジュールは関係ありません。SSHの鍵認証の設定がミスっており、ノーパスワードでSSH接続ができない状態になっていた時に発生したものです。鍵認証でSSH接続できるように設定しましょう。
- エラーメッセージ
fatal: [xxx.xxx.xxx.xxx]: FAILED! => {"changed": false, "failed": true, "msg": "value of state must be one of: present,absent, got: resent"}
- 対処
これは単純にPlaybookの記載ミスでstateにpresentと設定すべきところがresentになっていたため発生したものです。これはメッセージがわかりやすいですね。
- エラーメッセージ
fatal: [xxx.xxx.xxx.xxx]: FAILED! => {"changed": false, "failed": true, "msg": "Could not find the requested service iptables: host"}
- 対処
これはRHEL7.3に対してiptablesを再起動するように指示しましたが、RHEL7以降はiptablesというサービスは存在せずにfirewalldになっているため、そんなサービス無いよ、と言われたものです。RHEL6では動きますがRHEL7では動かない、という例です。
- エラーメッセージ
fatal: [xxx.xxx.xxx.xxx]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.1.105 port 22: No route to host\r\n", "unreachable": true}
- 対処
こちらは単純に対象のサーバが停止していて接続できなかった場合です。対象サーバが起動していることを確認しましょう。
取り急ぎ以上ですが、またたまったら挙げていきたいと思います。
お疲れ様でした。
AnsibleのModule:yum
お疲れ様です。伊藤です。
yumについてです。まずは説明文はこちら。
yumパッケージマネージャを使用して、パッケージとグループをインストール、アップグレード、削除、および一覧表示します。
これもそのまんまですね。つまりはLinuxのyumと同等ということで。
オプションはこちら。
パラメータ | 必須 | デフォルト | 選択肢 | 備考 |
---|---|---|---|---|
conf_file | no | トランザクションに使用するリモートのyum構成ファイル。 | ||
disable_gpg_check | no | no | yes no | インストールされているパッケージのシグネチャのGPGチェックを無効にするかどうか。 状態が存在または最新の場合にのみ効果があります。 |
disablerepo | no | インストール/アップデート操作を無効にするリポジトリの Repoid これらのレポはトランザクションを超えて存続しません。 複数のreposを指定する場合は、それらを "、"で区切ります。 | ||
enablerepo | no | インストール/アップデート操作を有効にするリポジトリの Repoid これらのレポはトランザクションを超えて存続しません。 複数のreposを指定する場合は、それらを "、"で区切ります。 | ||
exclude | no | state = present、またはlatestのときに除外するパッケージ名 | ||
installroot | no | / | すべてのパッケージがインストールされる相対的なインストールルートを指定します。 | |
list | no | yum list |
||
name | yes | パッケージ名、または name-1.0 のようなバージョンのパッケージ指定子。 state = latestを使用する場合、これは '*'となります。これは実行を意味します:yum -y update。 urlまたはローカルパスをrpmファイルに渡すこともできます(state = presentを使用)。 いくつかのパッケージを操作するには、コンマで区切られたパッケージのリストまたは(2.0以降)パッケージのリストを受け入れることができます。 | ||
skip_broken | no | no | yes no | 変換によって問題の原因となっているパッケージを削除することで、デプロソルブの問題を解決します。 |
state | no | present | present latest absent | presentの場合はパッケージをインストールします。latestの場合は最新版に更新します。absentの場合はパッケージをアンインストールします。 |
update_cache | no | no | yes no | yumにキャッシュが期限切れであるかどうかを確認させ、必要に応じて再ダウンロードする。 状態が存在または最新の場合にのみ効果があります。 |
validate_certs | no | yes | yes no | これは、rpmのソースとしてhttps urlを使用している場合にのみ適用されます。例えばローカルインストール用。 noに設定すると、SSL証明書は検証されません。これは、ソースサイトの確認を避けるため、自己署名証明書を使用して個人的に管理されるサイトではnoに設定する必要があります。2.1より前は、これがyesに設定されているかのようにコードが機能しました。 |
意外に少ないですね。
続いてPlaybookの例です。以前はrpmを指定してインストールが出来なかったのですが、こちらを見るとあっさりできてますね。
# Apacheの最新バージョンをインストールする - name: install the latest version of Apache yum: name: httpd state: latest # Apacheパッケージを削除する - name: remove the Apache package yum: name: httpd state: absent # テスト用のレポから最新のバージョンのApacheをインストールする - name: install the latest version of Apache from the testing repo yum: name: httpd enablerepo: testing state: present # 特定のバージョンのApacheをインストールする - name: install one specific version of Apache yum: name: httpd-2.2.29-1.4.amzn1 state: present # すべてのパッケージをアップグレードする - name: upgrade all packages yum: name: '*' state: latest # リモートrepoからnginx rpmをインストールする - name: install the nginx rpm from a remote repo yum: name: http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state: present # ローカルファイルからnginx rpmをインストールする - name: install nginx rpm from a local file yum: name: /usr/local/src/nginx-release-centos-6-0.el6.ngx.noarch.rpm state: present # '開発ツール'パッケージグループをインストールする - name: install the 'Development tools' package group yum: name: "@Development tools" state: present # 'Gnomeデスクトップ'環境グループをインストールする - name: install the 'Gnome desktop' environment group yum: name: "@^gnome-desktop-environment" state: present # 可能なパッケージを一覧表示し、結果を登録して後でデバッグする。 - name: List ansible packages and register result to print with debug later. yum: list: ansible register: result
この例を見るだけで大体のことは問題なくできるかと思います。外部接続ができない環境ではcopyモジュールでrpmファイルをコピー後、yumモジュールでインストールの流れになるかと思います。
お疲れ様でした。