2017-10-05 81 views
2

我有一大堆的大廳管道文件如下所示:如何防止Ruby的YAML解析器試圖解析{{VAR名}}

--- 
resources: 
    - name: example 
    type: git 
    source: 
     uri: [email protected]:me/example.git 
     branch: {{tracking_branch}} 
     private_key: {{ssh_key}} 
     paths: 
     - code/src/do/teams/sampleapp 
     params: 
     depth: 1 

    - name: deploy-image 
    type: docker-image 
    source: 
     repository: {{docker_image_url}} 

我想分析它們在Ruby中執行一堆轉換(如驗證它們並更新某些鍵,如果它們丟失)。

問題是,每當我試圖加載和他們傾倒他們帶回文件有{{something}}成爲片:

branch: 
    ? tracking_branch: 
    : 
private_key: 
    ? ssh_key: 
    : 

爲什麼這樣做的,有什麼辦法,我可以配置解析器不做這個?就這樣保留這些變量?

回答

1

爲了避免與YAML的內部語法需要引用你的價值觀衝突:

--- 
resources: 
    - name: example 
    type: git 
    source: 
     uri: [email protected]:me/example.git 
     branch: '{{tracking_branch}}' 
     private_key: '{{ssh_key}}' 
     paths: 
     - code/src/do/teams/sampleapp 
     params: 
     depth: 1 

這樣的事情出現在Ansible配置文件中的所有出於同樣的原因時。

1

{}字符在Yaml中用於flow mappings(即散列)。如果您沒有提供映射條目的值,您將獲得nil

所以在branch: {{tracking_branch}}的情況下,由於有雙括號,你會得到一個哈希值與

{{"tracking_branch"=>nil}=>nil} 

關鍵branch和值(紅寶石)當此甩回給YAML你有點awwkward和詳細:

branch: 
    ? tracking_branch: 
    : 

的解決方案是簡單地引用值:

branch: "{{tracking_branch}}" 
0

完全忘記了現在中央廣場提供了模板的((var-name)),只是切換到管道而不是{{var-name}},YAML解析器現在很開心!