Ansible: คัดลอกไฟล์ขึ้นอยู่กับชื่อโฮสต์หรือบทบาท


9

วิธีที่ดีที่สุดในการคัดลอกไฟล์ขึ้นอยู่กับชื่อโฮสต์คืออะไร?

ฉันต้องการคัดลอกไฟล์ที่มีเนื้อหาแตกต่างกัน แต่มีชื่อไฟล์เดียวกันกับหลายเครื่อง

ฉันมีหลายไฟล์:

file.role1
file.role2
file.role3

ฉันต้องการคัดลอกfile.roleXและเปลี่ยนชื่อเป็นทั้งนี้ขึ้นอยู่กับชื่อโฮสต์และ / หรือบทบาทfile

ขอบคุณ

คำตอบ:


31

มีหลายวิธีในการทำเช่นนี้ ที่ง่ายที่สุด:

- name: Copy file.role1 to host1
  copy: src=file.role1 dest=/somewhere/file
  when: inventory_hostname == "host1"
- name: Copy file.role2 to host2
  copy: src=file.role2 dest=/somewhere/file
  when: inventory_hostname == "host2"

ทางเลือกกะทัดรัดมากขึ้น:

- name: Copy file to host
  copy: src=file.{{ inventory_hostname }} dest=/somewhere/file

หรือใช้เทมเพลต:

- name: Copy file to host
  template: src=file dest=/somewhere/file

โดยที่เทมเพลตสามารถเป็นดังนี้:

{% if inventory_hostname == "host1" %}
{% include "file1" %}
{% endif %}
...

หากคุณต้องการไฟล์ที่แตกต่างในบทบาทที่แตกต่างกันทำไมคุณไม่ใส่:

- name: Copy file.role1 to file
  copy: src=file.role1 dest=/somewhere/file

ในรหัสของแต่ละบทบาทหรือไม่

ไม่มีวิธีที่แนะนำให้ทำ - ขึ้นอยู่กับสิ่งที่คุณพยายามทำ


5
คะแนนโบนัสสำหรับTIMTOWTDI !
tedder42

ขอบคุณ - ฉันเป็นไฟล์ apt.sources ที่แตกต่างกันขึ้นอยู่กับระบบปฏิบัติการ & สถาปัตยกรรมโดยไม่สร้างความยุ่งเหยิงหรือมีบทบาทมากเกินไป / ไฟล์คลังใหญ่ ฉันไปหาตัวแปรที่อยู่หลังชื่อโฮสต์ในไฟล์รายการสินค้า: sources_list = debian และนั่นทำให้ source.list.debian คัดลอกไปยัง source.list
Tuinslak
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.