てくなべ (tekunabe)

ansible / network automation / 学習メモ

【Ansible】ios_command / ios_config モジュールでエラー "unable to set terminal parameters" が表示される場合の対処

■ はじめに

検証環境で、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