2016-06-27 1 views
0

hosts_vars 파일에 포함 된 변수 목록 (to_install 이하)을 사용하여 deploy.yml 안내서를 제공합니다. 내 hosts_vars :가능 : 변수 이름 조작

--- 
clients: 
    cl1: 
    to_install: 
    - banana 8.1 
    - Firefox 46.0.1 
    to_uninstall: 
    - null 

내 각본 :이 다음 명령을 플레이 실행

- name: Deploy 
    hosts: win_clones 
    vars_files: 
    - ./hosts_vars 
    tasks: 
    - name: Fetching and copying the file on the client ... 
     win_get_url: 
     url: 'ftp://172.20.0.5/choco-repo/{{ item }}' 
     dest: 'C:\Test\{{ item }}' 
     with_items: "{{ clients[machine].to_install }}" 
    - name: Installing the package ... 
     win_chocolatey: 
     name: "{{ item }}" 
     state: present 
     with_items: "{{ clients[machine].to_install }}" 

: 내 플레이 북의 첫 번째 작업을 위해

ansible-playbook deploy.yml -e machine=cl1 

을 내가 사용 win_get_url 나는 것 내 변수 이름을 다음과 같이 변환하려고합니다 :

두 번째 작업을 위해

나는 win_chocolatey 사용하며 (버전 번호없이) 단지 변수의 이름을 통과하기 위해 충분하다 :

banana 
Firefox 

나는 마법해야 with_items: "{{clients[machine].to_install }}"에서 일어나는 것 같아요. 나는 책임감있게 그것을 어떻게 할 수 있는가?

답변

2

이렇게하려면 regex_replace를 사용할 수 있습니다.

이 :

tasks: 
    - debug: msg="{{ item | regex_replace(' ', '') }}.nupkg" 
    with_items: "{{ clients[machine].to_install }}" 

인쇄됩니다

TASK [debug] ******************************************************************* 
ok: [win_clones] => (item=banana 8.1) => { 
    "item": "banana 8.1", 
    "msg": "banana8.1.nupkg" 
} 
ok: [win_clones] => (item=Firefox 46.0.1) => { 
    "item": "Firefox 46.0.1", 
    "msg": "Firefox46.0.1.nupkg" 
} 
+0

덕분에,이 첫 번째 작업 작동합니다. 두 번째 작업을 수행하려면 어떻게해야합니까? 즉 버전 번호를 제거하여 이름 만 갖게하려면 어떻게해야합니까? – diegus

+0

정확히 내가 처음에했던 것처럼 regex_replace로 재생합니다. 바르게 할 일이 없다면 재미 없을 것입니다. 당신을 도울 수있는 해결책을 찾지 못한다면, 당신을 도울 수 있다고 생각합니다. –

+0

글쎄, 그것은 단지'debug : msg = "{{item | regex_replace ('', ''}}}" "를 사용하여 작동하지만 이상하게 보입니다. 이 공간 만 제거하지 않습니까? 그래서 나는 banana8.1과 Firefox46.0.1을 얻어야합니다. – diegus