2015-06-01 29 views
4

這似乎工作,但它是脆弱的?我想將文件命令中的所有者和組設置爲someguy。我希望能夠使用{{ remote_user }}但這不起作用。訪問remote_user變量

這是一個示例劇本,展示了我的意思。

--- 
- hosts: foobar 
    remote_user: someguy 
    tasks: 
    - name: configure /usr/src/foo 
     file: 
     dest: /usr/src/foo 
     state: directory 
     owner: {{ ansible_ssh_user }} 
     group: {{ ansible_ssh_user }} 
     recurse: yes 
     sudo: yes 

這不起作用:

--- 
- hosts: foobar 
    remote_user: someguy 
    tasks: 
    - name: configure /usr/src/foo 
     file: 
     dest: /usr/src/foo 
     state: directory 
     owner: {{ remote_user }} 
     group: {{ remote_user }} 
     recurse: yes 
     sudo: yes 

一個或多個未定義的變量: 'REMOTE_USER' 是不確定的

+0

凡被上述定義的?你在哪裏試圖訪問它?當你說它不起作用時,你的意思是什麼?這是一個錯誤嗎?空白值? – domino

+0

我試圖讓問題更清楚。 –

回答

-1

當指定的命令變量,你必須將它們封閉在引號中 - 例如:

file: dest=/usr/src/foo state=directory owner={{ remote_user }} group={{ remote_user }} recurse=yes 

真的應該是:

file: dest=/usr/src/foo state=directory owner="{{ remote_user }}" group="{{ remote_user }}" recurse=yes 

我很驚訝,你的第一個例子在所有工作由於缺乏報價。

此外,您的'remote_user'實際上並不一定是'someguy',因爲通常使用sudo: yes就足以讓文件模塊正確設置指定的所有者和組。

+0

它以根用戶身份運行,並且必須,因爲'/ usr/src'子目錄不能被root用戶寫入。 –

+0

您確定需要報價?我沒有在jinja文檔中看到這種情況,如果我這樣做了,那麼引用也會在最終文件中結束(因此,如果文件的該部分中不允許引用引號,那麼我會被刪除)。 –

-3

你可以嘗試寫這樣的劇本:

--- 
    - set_fact: remote_user="someguy" 
    - hosts: foobar 
    tasks: 
     - name: configure /usr/src/foo 
     file: dest=/usr/src/foo state=directory owner={{ remote_user }} group={{ remote_user }} recurse=yes 
     sudo: yes 
+0

這基本上是一樣的,但我真的很鄙視側面滾動,以及思考每行多個變量的認知負荷。它也不完全一樣。 –

0

您可以通過添加瓦爾解決這個問題:選項

--- 
- hosts: foobar 
    vars: 
    remote_user: someguy 
    tasks: 
    - name: configure /usr/src/foo 
     file: 
     dest: /usr/src/foo 
     state: directory 
     owner: {{ remote_user }} 
     group: {{ remote_user }} 
     recurse: yes 
     sudo: yes