2017-05-09 94 views
0

我有一個非常複雜的命令,我需要通過shell命令運行,但它具有我需要保留的各種特殊字符。我也希望能夠在多個環境的命令行中添加變量。Ansible和YAML特殊字符

我應該如何格式化,以免出現各種古怪的錯誤。

殼:OC_EDITOR = 「SED -i的/節點選擇:* /節點選擇器:\ 」區域=伯,區=等等\「/」'OC編輯命名空間的默認

後來我會將區域更改爲變量{{zone}}

+0

我可以用shell嗎? OC_EDITOR =「sed -i's/node-selector:。*/node-selector:\」region = primary,zone = blah \「/'」oc編輯命名空間默認 –

回答

0

您可以將環境變量用作任務和註冊變量。我沒有試過這個,但它可能工作。

- name: Echo OC_EDITOR shell: "echo $OC_EDITOR" environment: OC_EDITOR: "sed -i 's/node-selector:.*/node-selector: \"region=primary, zone=blah\"/'" oc edit namespace default register: sed_command

- name: Execute OC_EDITOR shell: sed_command

0

我是用單引號而不是反斜槓的問題。沒有其他角色需要轉義。我也用單引號包裹了整個命令。

這是通過--check函數工作的最終工作命令。我重新運行,以驗證它的工作原理..

- name: EXECUTE - Change the node selectors for the default and openshift-infra projects 
    shell: 'OC_EDITOR="sed -i ''s/node-selector:.*/node-selector: \region=infra, zone=blah\"/''" oc edit namespace default' 
    ignore_errors: True 

希望這有助於有人在那裏。

已更新並刪除了額外的反斜槓。