Deployment
通過 Ansible playbook 中的別名獲取主機的連接選項
我有一個角色,反對
localhost
:--- - hosts: localhost tasks: ... - name: Push code to target host shell: scp -P "{{ ansible_port }}" "{{ home_dir }}/{{ project }}.tgz" root@{{ target_server }}:/home/teamcity/
我使用 target_server env var 執行這個劇本,它在另一個子任務中用作目標主機:
ansible-playbook \ -i 'ansible/hosts' \ --extra-vars "target_server=stage" \ ansible/deliver.yml
有沒有辦法獲取連接選項
scp
,由伺服器別名描述ansible/hosts
,作為 env var 傳遞?目標不是ansible_port
兩次傳遞或其他連接選項,而是從已經傳遞的伺服器別名中獲取target_server
。換句話說,如果我執行 playbook ,
--extra-vars "target_server=stage"
我怎樣才能讓host用作 scp 連接選項?ansible_hostname``ansible_port``'stage'
由於您正在針對 localhost 執行劇本,因此我假設源文件位於那裡。
您可以使用更多合適的模組來複製文件,例如複製模組:
- hosts: target_server tasks: - name: Push code via copy copy: src: "{{ home_dir }}/{{ project }}.tgz" dest: "/home/teamcity/"
如果要在目標伺服器上提取存檔,可以使用unarchive 模組一步完成:
- name: Push code via unarchive unarchive: src: "{{ home_dir }}/{{ project }}.tgz" dest: "/home/teamcity/"
如果源文件在不同的伺服器上,您可以使用同步模組從伺服器 A 複製到 B:
- name: Push code from remote server synchronize: src: "{{ home_dir }}/{{ project }}.tgz" dest: "/home/teamcity/" delegate_to: src_server
如果您堅持使用帶有 scp 的 shell 模組,您可以使用以下變數訪問
hostvars
變數:- hosts: localhost - name: Push code to target host shell: scp -P "{{ hostvars['target_server']['ansible_port'] }}" "{{ home_dir }}/{{ project }}.tgz" root@{{ hostvars['target_server']['ansible_hostname'] }}:/home/teamcity/