Open sakai00kou opened 3 years ago
intended_configオプションで外部ファイルを参照する場合、以下のようにlookupを使って指定してください。
intended_config: "{{ lookup('file', '/root/yamaha.cfg') }}"
ご回答ありがとうございます。
intended_config: "{{ lookup('file', '/root/yamaha.cfg') }}"
とすることでintended_config
ファイルとの比較を行うことができました。
しかしながら、intendec_config
で指定したコンフィグファイルに2バイト文字が含まれていたことから文字コードエラーとなってしまいました。
2バイト文字を使用しないようにするか、intendec_config
で使用するコンフィグファイルの文字コードをutf-8等に変換することで事象を回避しplaybookを実行することができましたがコンフィグファイルに2バイト文字が含まれていた場合でもintendec_config
で指定できるようにして頂けると助かります。
恐れ入りますが宜しくお願い致します。
# ansible-playbook -i hosts rtx.yml --diff
PLAY [NVR500] *******************************************************************************
TASK [get configuration] ********************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: UnicodeEncodeError: 'utf-8' codec can't encode character '\udc83' in position 1235: surrogates not allowed
fatal: [NVR500]: FAILED! => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"}, "changed": false, "module_stderr": "Traceback (most recent call last):\n File \"/root/.ansible/tmp/ansible-local-2104klyp91sl/ansible-tmp-1618268100.8913224-2110-72603710933653/AnsiballZ_rtx_config.py\", line 102, in <module>\n _ansiballz_main()\n File \"/root/.ansible/tmp/ansible-local-2104klyp91sl/ansible-tmp-1618268100.8913224-2110-72603710933653/AnsiballZ_rtx_config.py\", line 94, in _ansiballz_main\n invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\n File \"/root/.ansible/tmp/ansible-local-2104klyp91sl/ansible-tmp-1618268100.8913224-2110-72603710933653/AnsiballZ_rtx_config.py\", line 40, in invoke_module\n runpy.run_module(mod_name='ansible_collections.yamaha_network.rtx.plugins.modules.rtx_config', init_globals=None, run_name='__main__', alter_sys=True)\n File \"/usr/lib64/python3.6/runpy.py\", line 205, in run_module\n return _run_module_code(code, init_globals, run_name, mod_spec)\n File \"/usr/lib64/python3.6/runpy.py\", line 96, in _run_module_code\n mod_name, mod_spec, pkg_name, script_name)\n File \"/usr/lib64/python3.6/runpy.py\", line 85, in _run_code\n exec(code, run_globals)\n File \"/tmp/ansible_rtx_config_payload_qe9u4btc/ansible_rtx_config_payload.zip/ansible_collections/yamaha_network/rtx/plugins/modules/rtx_config.py\", line 470, in <module>\n File \"/tmp/ansible_rtx_config_payload_qe9u4btc/ansible_rtx_config_payload.zip/ansible_collections/yamaha_network/rtx/plugins/modules/rtx_config.py\", line 366, in main\n File \"/tmp/ansible_rtx_config_payload_qe9u4btc/ansible_rtx_config_payload.zip/ansible/module_utils/basic.py\", line 772, in __init__\n File \"/tmp/ansible_rtx_config_payload_qe9u4btc/ansible_rtx_config_payload.zip/ansible/module_utils/basic.py\", line 2078, in _log_invocation\nUnicodeEncodeError: 'utf-8' codec can't encode character '\\udc83' in position 1235: surrogates not allowed\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}
PLAY RECAP **********************************************************************************
NVR500 : ok=0 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
問題内容
backup
パラメータで取得したコンフィグをintended_config
で指定し、diff_against
パラメータをintended
オプションで動作させた際、--diff
オプション無しで実行した場合は実行結果がokとなるが、--diff
オプションをつけて実行すると、changedと判定される。また、
diff_against
パラメータをintended
、intended_config
とrunning_config
パラメータに同じファイルを指定して実行した場合、変更点が無くてもchangedと判定される。再現手順
ansible-playbook -i inventory rtx.yml
を実行発生頻度
毎回
環境
管理サーバ CentOS Linux release 8.3.2011 Python 3.6.8 ansible 2.10.7 ansible.netcommon 2.0.1 yamaha_network.rtx 1.0.1
管理対象機器 NVR500 Rev.11.00.38
実行コード
以下コードで実行しました。
Playbook
hosts: NVR500 connection: network_cli
tasks:
running_config: /root/yamaha.cfg
intended_config: /root/yamaha.cfg match: line save_when: changed
vars: ansible_network_os: yamaha_network.rtx.rtx ansible_user: user ansible_ssh_pass: userpass ansible_become: true ansible_become_password: becomepass
Inventory
実行結果抜粋(上述の実行コードで実行)
補足
running_config
パラメータが比較元となるファイルの指定、intended_config
パラメータが比較先となるファイルを指定するパラメータと考えていますが、動作確認では判断できなかったため、質問させていただきました。