2017-07-28 11 views
1

私は、2つのファイルの内容を読むためのプレイブックを作成しました。最初のものは、プロトコルCDPを持つスイッチインターフェイスを動的に保持する責任があります。不可能な変数の値を変更することは可能ですか?

example.cdp

0/0 
14/0 

第1(の.cfg)は、動的にも私はCiscoコマンドを使用してデバイスにプッシュする必要があるインターフェイスの束を含むファイルである「シャットダウン"私のマスター/バックアップ環境をテストします。 example.cdpのインターフェイスがここにある場合は、管理がインバンドであるため、このデバイスとの通信が失われないため、インターフェイスを削除する必要があります。

example.cfg

interface FastEthernet0/0 
shutdown 
interface FastEthernet1/0 
shutdown 
interface FastEthernet2/0 
shutdown 
interface FastEthernet2/1 
shutdown 
... 
interface FastEthernet14/0 
shutdown 

が脚本

脚本を実行している
- name: Looping file 
    debug: 
    msg: "{{ item }}" 
    register: items 
    with_file: 
    - ~/ANSIBLE/{{ inventory_hostname }}.cfg 
- debug: var=items.results[0].item 

- name: capturing interfaces with cdp 
    raw: egrep '[0-9]+\/[0-9]+ ' -o ~/ANSIBLE/{{ inventory_hostname }}.cdp 
    register: cdp 
- debug: var=cdp.stdout_lines 

- set_fact: 
    cdp: "{{cdp.stdout_lines}}" 
- debug: var=cdp 

- name: Removing interfaces with cdp 
    raw: sed 's/interface FastEthernet{{item}}//' ~/ANSIBLE/{{ inventory_hostname }}.cfg 
    with_items: 
    - "{{cdp}}" 
    register: items 
- debug: var=items 

- name: Applying The Shutdown Template 
    ios_config: 
    lines: 
     - "{{ items.results[0].item }}" 
    provider: "{{cli}}" 
    register: shut1 
- debug: var=shut1 
    tags: shut1 

<169.255.0.1> EXEC sed 's/interface FastEthernet0/0 //' ~/ANSIBLE /169.255.0.1.cfg 
failed: [169.255.0.1] (item=0/0) => { 
"changed": true, 
"failed": true, 
"item": "0/0 ", 
"rc": 1, 
"stderr": "sed: -e expression #1, char 30: unknown option to `s'\n", 
"stdout": "", 
"stdout_lines": [] 
} 
    <169.255.0.1> EXEC sed 's/interface FastEthernet14/0 //' ~/ANSIBLE/169.255.0.1.cfg 
failed: [169.255.0.1] (item=14/0) => { 
"changed": true, 
"failed": true, 
"item": "14/0 ", 
"rc": 1, 
"stderr": "sed: -e expression #1, char 31: unknown option to `s'\n", 
"stdout": "", 
"stdout_lines": [] 
} 

あなたが見ることができるように、問題は内容でありますvar "cdp"。インターフェースには "/"という記号があり、 "sed"コマンドで使用されています。私はこの問題を解決するために、この問題をバックスラッシュする必要があります。変数を開いてその変数をいくつか書き出す方法はありますか?書くためのより良い方法だろう、私は印象のテンプレートを持っている

sed 's#interface FastEthernet{{item}}##' ~/ANSIBLE/{{ inventory_hostname }}.cfg 

答えて

1

sedは(#文字を使用して、インスタンスのため)にそれを回す、正規表現トークナイザとして任意の文字を使用するので、すぐにあなたの問題を解決することができますあなたの仕事。

+0

ありがとう@GUIDO。私はあなたが私のようにトークンとしてシンボルを使用できることは聞いたことがありません。できます! –

関連する問題