2017-04-03 77 views
1

我願做一個測試在Ansible並確保以下屬性具有文件/etc/sysconfig/rhn/up2date中沒有值:統計寄存器特殊字符

proxyUser= 
proxyPassword= 

要做到這一點,我用下面的命令,包括$在proxyPassword =和proxyUser =的末尾檢查它們是否爲空並且沒有值。

- name: Check proxy configuration for Red Hat Subscription manager 
    shell: "grep -i proxy /etc/sysconfig/rhn/up2date" 
    register: cmd_result 

- name: Make sure that proxy configuration for Red Hat Subscription manager is as expected 
    assert: 
    that: 
     - "'proxyPassword=$' in cmd_result.stdout" 
     - "'proxyUser=$' in cmd_result.stdout" 

但是,我得到了錯誤。它看起來就是因爲這個特殊字符,Ansible在我的文件中沒有找到這行,儘管它存在。

我試過\之前特殊字符($)如下:

proxyUser=\$ 
proxyPassword=\$ 

仍然得到錯誤。有關它的任何想法?

回答

0

我認爲會更容易邏輯移到grep命令(例如用於GNU的grep):

grep -e proxyUser=$ -e proxyPassword=$ /etc/sysconfig/rhn/up2date 

然後繼續用一個簡單的斷言與in操作者用於proxyUserproxyPassword字符串。

注意grep的返回代碼,當沒有匹配發生時可能導致任務失敗。檢查this answer中的解決方法。

另外:它可能是值得從開始到該行的結束,檢查,使grep的不匹配評論(^proxyUser=$)。

此外,對於完全可靠的代碼,您可能需要檢查是否沒有覆蓋設置,即更改grep邏輯以在=之後檢查包含值的行。


否則,你可以使用filtersstdout_lines匹配字符串,但這需要通過結果循環。


另一種方法是使用像lineinfile本地Ansible模塊基於結果的任務和行動check_mode: yes集。

這將使遊戲更具可移植性,因爲您不必考慮grep語法中的GNU/BSD差異。