回答:如何根据组成员身份将文件复制到主机?

时间:2018-11-01 13:23:22

标签: copy ansible

如何根据组成员身份将文件复制到主机?

我不知道该怎么做。我唯一能想到的就是这样:

hostsfile:
[webserver]
hostA
[dbserver]
hostB

files:
webfile.zip
dbfile.zip

- copy:
    src: one of the files
    dest: /opt
    owner: '{owner}}'
    group: '{group}}'
    Fashion: 0644
  when: groupname == webserver then file: webfile.zip OR groupname == dbserver then dbfile.zip

但是据我所知,它是行不通的。

3 个答案:

答案 0 :(得分:0)

使用Ansible,通常有几种处理方法,因此实际上取决于此剧本的最终结果以及以后是否进行扩展。但是,您可以通过使用组变量来完成此操作(主机变量可以做同样的事情,但是设置不同)。

INVENTORY_FILE.txt

[WEBSERVERS]
hostname1

[DBSERVERS]
hostname2

[WEBSERVERS:vars]
file=webserver_file.txt
destination=/web/server/path

[DBSERVERS:vars]
file=dbserver_file.txt
destination=/db/server/path

PLAYBOOK.yml

- name: Deployment Files to Hosts
  hosts: all
  gather_facts: false
  vars:
    owner: user_name
    group: group_name

  tasks:
  - name: loop through items based on group_vars
    copy:
      src: '{{ file }}'
      dest: '{{ destination }}'
      owner: '{{ owner }}'
      group: '{{ group }}'
      mode: 644

答案 1 :(得分:0)

您可以为此使用组变量。当剧本在Web服务器上运行时,webserver.yml将被加载,而dbserver则相同:

group_vars / webserver.yml

file: webfile.zip

group_vars / dbserver.yml

file: dbfile.zip

task.yml

- copy:
    src: "{{ file }}"
    dest: /opt
    owner: "{{ owner }}"
    group: "{{ group }}"
    Fashion: 0644

答案 2 :(得分:0)

预先准备一个包含文件位置的数组,然后在with_first_found查找中使用它。以下内容可用于选择主机定制的资源,组(无优先级)或默认资源。

这对于没有公用主机(即prodtestdev)的组非常适用。

- hosts: all                                                                     
  tasks:                                                                         
    - name: create group paths array                                                     
      set_fact:                                                                  
        group_paths: "{{ group_paths | default([]) + [ 'files/' + item ] }}"            
      with_items: "{{ group_names }}"                                            
    - name: show first found based on group                                         
      debug:                                                                     
        msg: "found {{ item }}"                                                     
      with_first_found:                                                             
        - "files/{{ inventory_hostname }}"                                          
        - "{{ group_paths }}"                                                         
        - "files/default"