【Cisco編:telnetモジュールでsshを有効にする】
---telnetモジュールでsshを有効にする---
前回は、HSRPプライオリティ変更をtelnetモジュールで実装してみた。実際のところ、command
をリストで並べるだけで冪等性を担保しない。必ずchanged=1
になるのでchanged_when:False
を入れる。teratermマクロのようにコマンド投入時のプロンプト応答文字列を判断してfaild終了させる実装もできないように見えるので、yamlの書き方や実行順序順序で実装する必要があり。今回もtelnetモジュールではコマンド投入だけ実施したところcommandの下に書いたリストが表示されなかったり、sh runが途中までしか表示されなかったり、、、で、設定確認はruning-configをコントローラにftpで転送してコントローラ側で実施した。
<<Cisco編手順>>
-
以下の手順の工事を自動化することを想定
*1
<<playbook>>
--- - hosts: cisco connection: local gather_facts: False tasks: - name: ssh configration telnet: user: "{{user}}" password: "{{pass}}" login_prompt: "Username: " prompts: - "[>|#|?]|Password: " command: - "enable" - "{{enpass}}" - terminal length 0 - copy running-config ftp://{{ftpuser}}:{{ftpass}}@{{ftp_server_add}}/{{path}} - "{{ftp_server_add}}" - "ssh_pre_{{inventory_hostname}}" - "conf t" - "ip ssh version 2" - "ip domain name 38lab.com" - "crypto key generate rsa modulus 2048" - "line vty 0 15" - "transport input telnet ssh" - "exit" - "exit" - copy running-config ftp://{{ftpuser}}:{{ftpass}}@{{ftp_server_add}}/{{path}} - "{{ftp_server_add}}" - "ssh_af_{{inventory_hostname}}" changed_when: False register: command_result_af - name: debug debug: var: command_result_af.output - name: debug log export local_action: module: copy dest: "./ssh_af_{{inventory_hostname}}.log" backup: yes content: "{{ command_result_af.output}}" changed_when: False - name: delete hostkey lineinfile: path: /root/.ssh/known_hosts regexp: "{{ansible_host}}" state: absent - name: change Line feed replace: dest: "./ssh_af_{{inventory_hostname}}.log" regexp: '\\r\\n' replace: '\n' changed_when: False - name: check ssh port wait_for: host: "{{inventory_hostname}}" port: 22 delay: 5 state: present timeout: 10 - name: check telnet port wait_for: host: "{{inventory_hostname}}" port: 23 delay: 5 state: present timeout: 10
<<inventory>>
sshhosts
[cisco] ciscoR1 ansible_host=192.168.3.215 domain=38lab.com [cisco:vars] user="hoge" pass="1234" enpass="1234" ansible_become=yes ansible_become_method=enable ftpuser=ktn ftpass=ktn ftp_server_add=192.168.3.218 path=sshconf/
<<確認>>
- sshが有効になること
- Ansibleコントローラから設定ターゲット宛てにpingが通ること
- .ssh/known_hostsファイルのターゲットの登録行を削除できていること。(playbookを再度実行するとkeyが変更になってしまい次回のsshアクセスが失敗するため)
<<結果と課題>>
- 前回と同じくコマンドをリストで投入。設定前後の確認はftpでコントローラにrunning-configを送り、
command
モジュールで実施する方法でどうにか実装できた。 - パイプ|で切ってincludeでコマンドを指定するとすべてのリストのコマンドが表示されず下の方のリストの出力がない。
- show run コマンドはパイプを使わずフルコマンド投入したのに出力は途中までとなった。※NW機器依存かな?
local_action
を使うのもやめ、telnet接続でcommandを使ってftpでconfigやログ出力をコントローラに転送しコントローラで正常性確認をする方法にした。
<<思ったこと>>
- telnetでの設定は、AnsibleのNWモジュールの機能が使えないので、使えるモジュールとyamlを駆使して判断処理を実装しなければならない。慣れてるteratermマクロやシェルスクリプトを使う方が楽でリスクも少なく良い。ここは割り切ってssh化する手段はAnsibleを使わず何でもよしにして、さっさとssh化してAnsibleの機能を思う存分を使うことにする!
*1:手順書は実在のものではなくイメージで、パラメータも架空のものです