■ はじめに
検証環境で、ios_command
モジュールや、ios_config
モジュールを利用した Playbook 実行時に、以下のようなエラーメッセージに遭遇しました。
fatal: [172.16.0.2]: FAILED! => {"msg": "unable to set terminal parameters"}
自分が調べた方法と対処方法をご紹介します。
- 確認環境: Ansible 2.6.2
■ エラーの原因
-vvv
オプションを付けて Playbook を実行すると、plugins/terminal/ios.py
の以下のコード分で例外が発生していることが分かりました。
def on_open_shell(self): try: for cmd in (b'terminal length 0', b'terminal width 512'): self._exec_cli_command(cmd) except AnsibleConnectionFailure: raise AnsibleConnectionFailure('unable to set terminal parameters') # ここ
つまり、ネットワーク機器にログイン後、terminal length 0
または terminal width 512
コマンドの実行に失敗していることになります。
一般ユーザーであっても、 terminal length 0
といったコマンドは実行できるはずだと思ったのですが、念のため手動でSSHでログインして terminal length 0
コマンドを実行しようとしたところエラーになってしまいました。
ip-172-31-15-25>ter len 0 ^ % Invalid input detected at '^' marker.
おやおやと思って、コンフィグを見直すと
username testuser privilege 0 ...略...
のように権限を低くしすぎる設定誤りをしていました。
このため、terminal length 0
も実行できない状態となっていました。
■ 対処
ネットワーク機器側で
username testuser privilege 1 ...略...
や
username testuser privilege 15 ...略...
のように権限を変更したら解決しました。
(2018/08/30 追記)
issue があげられていました。 github.com
(2019/06/06 追記)
関連していそうなプルリクが Ansible 2.8 にマージされているようです。 github.com