2016-10-05 50 views
0

註冊任務的結果,當我調試變量之後之後。我得到的價值是雙引號,如"1234"。如果我在另一個模塊或任務中使用,它將變爲[u'1234']使用註冊變量ansible去除單引號

我已刪除u和用括號替換字符。

如何擺脫單引號是ansible默認的。

Actual output : '1234' 
expected output: 1234 

劇本片斷

- uri: 
     url: http://test/ws?Id=4a3d 
     method: GET 
     content_as_json: yes 
     password: admin 
     user: admin 
     validate_certs: no 
     return_content: yes 
     HEADER_Cookie: "{{login.set_cookie}}" 
    register: name 

- debug: msg="{{ name.content | regex_findall('name=\"(\d+)\"') }}" 
    register: test  

    - uri: 
     url: "http://test/ws?name={{test.msg | replace('u','') | replace('[','') | replace(']','')}}" 
     method: GET 
     content_as_json: true 
     password: admin 
     user: admin 
     validate_certs: no 
     return_content: yes 
     HEADER_Cookie: "{{login.set_cookie}}" 

我用int也但返回0

{{test.msg | replace('u','') | replace('[','') | replace(']','') | int}} 

URI模塊輸出:在

"<listResponse type=\"cust\" count=\"1\"><instance name=\"1234\" id=\"abcd\" customerRefId=\"xyz\" refId1=\"2345\" type=\"org\" enabled=\"true\" phone=\"\" fax=\"\" billingZip=\"\" billingAddress=\"\" billingCity=\"\" billingCountry=\"\" billingState=\"\" vendorId=\"1\" defaultEmail=\"pqr\" defaultContactName=\"wer\"/></listResponse>" 
+0

請添加您的playbook片段。我懷疑還有更好的辦法。 –

+0

添加了代碼片段 –

+0

爲什麼在這裏使用debug?只需將'regex_findall'提供給下一個任務的url即可。 –

回答

0

刪除debug動作,並與下一個任務使用過濾名:

- uri: 
     url: "http://test/ws?name={{ name.content | regex_search('name=\"(\\d+)\"','\\1') | first }}" 
     method: GET 
     content_as_json: true 
     password: admin 
     user: admin 
     validate_certs: no 
     return_content: yes 
     HEADER_Cookie: "{{login.set_cookie}}" 

在這種情況下regex_search('name=\"(\d+)\"','\1')搜索name=\"<number>\"和僅打印數(因爲它是第一個匹配的組 - 用於regex_search第二參數) 。

+0

語法使用該解決方案在錯誤「(\ d +)\」指向第一slash.If我刪除外雙引號然後我得到相同的「[u'1234' ]」作爲名稱 –

+0

響應@DeepaliMittal抱歉,校正的代碼:逸出斜線和取第一個元素。 –

+0

感謝。它的工作和其如此驚人的我試過這麼多東西正則表達式和反斜槓,但無法得到它的工作。 –

0

寄存器輸出變量,並使用{{var.stdout}}得到結果。它將1234沒有更多的字符。

- shell: echo 1234 
    register: out 

- debug: msg="Output= {{out.stdout}}" 
+0

我正在註冊輸出。但它是JSON和XML格式的webservices響應。從那裏我獲取價值並傳遞給下一個任務 –

+0

'debug:msg =「{{name.content}}''將返回沒有任何'u'或''''的數據。你是否試過通過'{ {name.content}}'到下一個任務? – Nasr

+0

我不能直接使用name.context,它有很多其他的數據,以及XML格式的。你看上面我已經添加了什麼是他們在內容 –