2017-07-08 12 views
1

私はAWSインスタンスを管理するために日常的にアウェアネスを使用しています。今は私たちのネットワークインフラストラクチャの管理をテストしています。いくつかのシステム管理のもの)が、私は周りを回っているように見えないという問題に遭遇しました。シェルを開くことができません:Ansible v2.3.1.0

ここでは、Cisco 3750GをSSHを有効にしています。私は指定されたユーザーと一緒にsshをして、私のプレイブックで失敗しているすべてのコマンドを実行することができます。

私はこのスイッチにAnsibleから正常にpingモジュールを使用できますが、ios_commandsまたはios_configsモジュールを使用しようとすると、エラーunable to open shellで失敗します。

私は新しい機能として永続的な接続を持つAnsible v2.3.1.0を使用しています。いくつかのグーグル・グーグルを終了し、この問題を抱えていて、それをさまざまな方法で修正した少数の人々を見つけました(どちらも私のために働いていませんでした)。私が試した

もの:

  • secrets.yamlファイルの接続変数を指定しました。 次に、私のユーザー名、auth_pass、およびパスワード を秘密ファイルに使用してproviderを指定しました。
  • 私が試したことのdidntの仕事の後、私のansible.cfgファイル

で(どちらも が働いていない)localssh今の

  • 無効host_key_checkingにansible_connection設定を変更する: - 手動でプロバイダ接続変数を作成しますプレイブック - 使用される2つの異なるモジュールios_commandsios_configs

    https://docs.ansible.com/ansible/network_debug_troubleshooting.html#category-unable-to-open-shell このドキュメントの状態を私は見ているエラーは、通常、認証の問題であること(2つのモジュール間が、両方が同じ行動しなければならない私の使用のためのいくつかの
    違いがあります)しかし、それはここではそうではないようです。

    誰かがこれにぶつかり、洞察力を持っていますか? 誰かが見たい場合は、私のプレイブックからのデバッグ出力を持つログファイルがあります。 私は以下のサンプルのプレイブックをレビューのために投稿しました。

    ホスト:スイッチ gather_facts:いいえ 接続:ローカル タスク:私は最終的にここに起こっていたことを考え出し

    - name: GATHER CREDENTIALS 
        include_vars: secrets.yaml 
    
    - name: DEFINE CONNECTION PROVIDER 
        set_fact: 
        provider: 
         username: "{{ creds['username'] }}" 
         password: " {{ creds['password'] }}" 
         auth_pass: "{{ creds['auth_pass'] }}" 
    
    - name: Show interfaces 
        ios_config: 
        provider: "{{ provider }}" 
        commands: 
         - show ip int br 
        register: cisco_int 
    
    - debug: var=cisco_int.stdout_lines 
    
  • +0

    それで、私はまだこのバージョンのAnsibleを使ってこれを動作させることができませんでした。私は古いバージョンをインストールしてみましょう(永続的な接続機能はありません)。 –

    答えて

    2

    。 それは物事の組み合わせだった。

    • 2.3の持続的接続機能が私のために壊れているので、私はその後、私は手動で自分のインベントリに私のPythonインタプリタを指定する必要がありました2.2.0.0

    • に ダウングレードしなければなりませんでした。 parachikoをインストールしないと、 /usr/bin/pythonになりますが、 には/usr/local/bin/python、代わりにAnipalがそのモジュールを実行します。

    • また、ios_commandios_config の動作が似ていると誤って考えました。 configは、グローバル/インターフェイス設定 モードのコマンドに使用されます。 commandは、ユーザーとpriv execモードから実行されます。

    今私の脚本が実行され、私はあなたが格下げと知っている私の3750

    0

    show ip int brの出力を得ることができます。たぶんこれは、あなたが別のショットを2.3与えることにした場合に役立ちます。私は2.2から2.3への移行の間に幾分同じ問題を抱えていました。私のTACACSの設定では私はオプションを含んだ秘密を有効にしていません。

    ホスト

    [ios:vars] 
    ansible_python_interpreter=/usr/bin/python 
    ansible_connection = local 
    # If SSH/ For Telnet - Port=23 
    port=22 
    [ios] 
    ios-swt-1 
    ios-rtr-1 
    

    secrets.yml

    --- 
    creds: 
    username: ansible 
    password: '@ns1Bl3' 
    #Uncomment For Enable: 
    #auth_pass: [email protected] 
    

    ハンドブック

    --- 
    - hosts: ios 
        gather_facts: no 
        connection: local 
    
        tasks: 
    
        - name: obtain login credentials 
        include_vars: secrets.yml 
    
        - name: define provider 
        set_fact: 
         provider: 
         host: "{{ inventory_hostname }}" 
         username: "{{ creds['username'] }}" 
         password: "{{ creds['password'] }}" 
         #Uncomment next line if enable password is needed 
         #auth_pass: "{{ creds['auth_pass'] }}" 
         transport: cli 
    
        - include: tasks/ios_command-freeform.yml 
    

    タスク/ ios_command-freeform.yml

    --- 
    - name: Freeform Task 
        ios_command: 
        provider: "{{ provider }}" 
        commands: 
    # Change the command after "-" to any IOS command you would like to run. 
         - show version 
        register: freeform 
    
    # Provides an output if -vvv is not used when running ansible-playbook 
    - debug: var=freeform.stdout_lines 
    
    - name: append to output 
    # append the command output to a local file 
        copy: 
        content: "{{ freeform.stdout[0] }}" 
        dest: "play_results/{{ inventory_hostname }}.txt" 
    
    +0

    私の環境では可能ではないとは思わない。有効なパスワードはすべてにあります:P最新のバージョンのnetworkcliモジュールにいくつかの変更がありましたが、多分それは別の行けば.... –

    関連する問題