คุณจะสร้างไดเรกทอรีwww
ที่/srv
บนระบบที่ใช้เดเบียนด้วยเพลย์บุ๊ค Ansible ได้อย่างไร
คุณจะสร้างไดเรกทอรีwww
ที่/srv
บนระบบที่ใช้เดเบียนด้วยเพลย์บุ๊ค Ansible ได้อย่างไร
คำตอบ:
คุณต้องการโมดูลไฟล์ ในการสร้างไดเรกทอรีคุณต้องระบุตัวเลือกstate=directory
:
- name: Creates directory
file:
path: /src/www
state: directory
คุณสามารถดูตัวเลือกอื่น ๆ ได้ที่http://docs.ansible.com/file_module.html
all immediate subdirectories
สับสนคุณสามารถกำหนดมันและยกตัวอย่างได้หรือไม่?
คุณสามารถขยายโมดูลไฟล์และตั้งค่าเจ้าของกลุ่ม & สิทธิ์ผ่านมันได้ (Ref: เอกสารประกอบไฟล์ Ansible )
- name: Creates directory
file:
path: /src/www
state: directory
owner: www-data
group: www-data
mode: 0775
แม้คุณสามารถสร้างไดเรกทอรีซ้ำ:
- name: Creates directory
file:
path: /src/www
state: directory
owner: www-data
group: www-data
mode: 0775
recurse: yes
ด้วยวิธีนี้มันจะสร้างไดเรกทอรีทั้งสองถ้าพวกเขาไม่อยู่
recursive
อาร์กิวเมนต์ทำให้นี้มากเช่นการใช้mkdir -p
(สำหรับผู้ googling เบิ้ล mkdir -p )
recurse
mkdir -p
จะตั้งค่าแอ็ตทริบิวต์ไฟล์ที่ระบุซ้ำ ๆ หากstate=directory
ไดเรกทอรีย่อยทันทีทั้งหมดจะถูกสร้างขึ้นหากไม่มีอยู่ตั้งแต่ 1.7 จะถูกสร้างขึ้นด้วยสิทธิ์ที่ให้มา
=
ตัวอักษรจะดีในการปรับปรุงด้วย:
ไวยากรณ์กับแต่ละคนบนบรรทัดใหม่
chmod -R
ไม่ นั่นคือถ้าpath
มีอยู่แล้วในฐานะ dir และมีไฟล์อยู่ข้างในrecurse
ตัวเลือกจะ (บางครั้งน่าเสียดาย) ก็จะใช้การอนุญาตแบบเดียวกันกับไฟล์เหล่านั้น นี่คือโดยการออกแบบให้ดีขึ้นหรือแย่ลง
คุณสามารถสร้างโดยใช้:
- name: Create Folder
file:
path: /srv/www/
owner: user
group: user
mode: 0755
state: directory
- name: Create Folder
file:
path=/srv/www/
owner=user
group=user
mode=0755
state=directory
สามารถสร้างไดเรกทอรีได้โดยใช้โมดูลไฟล์เท่านั้นเนื่องจากไดเรกทอรีไม่มี แต่ไฟล์
# create a directory if it doesn't exist
- file:
path: /etc/some_directory
state: directory
mode: 0755
owner: foo
group: foo
- file:
path: /etc/some_directory
state: directory
mode: 0755
owner: someone
group: somegroup
นั่นคือวิธีที่คุณสามารถกำหนดสิทธิ์เจ้าของและกลุ่มได้ พารามิเตอร์สามตัวสุดท้ายนั้นไม่จำเป็น
คุณสามารถสร้างไดเรกทอรี การใช้
# create a directory if it doesn't exist
- file: path=/src/www state=directory mode=0755
นอกจากนี้คุณยังสามารถศึกษา http://docs.ansible.com/ansible/file_module.html เพื่อดูรายละเอียดเพิ่มเติมเกี่ยวกับไดเร็กทอรีและระบบไฟล์ regaridng
เพิ่มเติมสำหรับคำตอบทั้งหมดที่นี่มีสถานการณ์มากมายเมื่อคุณต้องการสร้างมากกว่าหนึ่งไดเรกทอรีดังนั้นจึงเป็นความคิดที่ดีที่จะใช้ลูปแทนการสร้างงานแยกต่างหากสำหรับแต่ละไดเรกทอรี
- name: Creates directory
file:
path: "{{ item }}"
state: directory
with_items:
- /srv/www
- /dir/foo
- /dir/bar
เพียงแค่ต้องใส่เงื่อนไขในการดำเนินงานสำหรับการกระจายที่เฉพาะเจาะจง
- name: Creates directory
file: path=/src/www state=directory
when: ansible_distribution == 'Debian'
คุณสามารถใช้คำสั่ง
- name: webfolder - Creates web folder
file: path=/srv/www state=directory owner=www-data group=www-data mode=0775`
หากคุณต้องการสร้างไดเรกทอรีใน windows:
- ชื่อ: สร้างโครงสร้างไดเรกทอรี
win_file:
เส้นทาง: C: \ Temp \ folder \ subfolder>
state: directory
เรามีโมดูลที่พร้อมใช้งานในการสร้างไดเรกทอรีไฟล์ใน ansible
ตัวอย่าง
- name: Creates directory
file:
path: /src/www
state: directory
คุณสามารถเรียกใช้คำสั่งโดยตรงและสร้างโดยตรงโดยใช้ ansible
ansible -v targethostname -m shell -a "mkdir /srv/www" -u targetuser
หรือ
ansible -v targethostname -m file -a "path=/srv/www state=directory" -u targetuser
---
- hosts: all
connection: local
tasks:
- name: Creates directory
file: path=/src/www state=directory
playbook ด้านบนจะสร้างไดเรกทอรี www ใน / src path
ก่อนเล่นข้างบน playbook โปรดตรวจสอบให้แน่ใจว่าการตั้งค่าการเชื่อมต่อโฮสต์ของคุณนั้น
"localhost ansible_connection = local"
ควรมีอยู่ใน / etc / ansible / hosts
สำหรับข้อมูลเพิ่มเติมโปรดแจ้งให้เราทราบ
เพื่อสร้างไดเรกทอรี
ansible host_name -m file -a "dest=/home/ansible/vndir state=directory"
ใช้โมดูลไฟล์เพื่อสร้างไดเรกทอรีและรับรายละเอียดเกี่ยวกับโมดูลไฟล์โดยใช้คำสั่ง "ไฟล์ ansible-doc"
นี่คือตัวเลือก "สถานะ" ที่อธิบาย:
หาก
directory
ไดเรกทอรีย่อยทันทีทั้งหมดจะถูกสร้างขึ้นหากไม่มีอยู่ตั้งแต่ 1.7 จะถูกสร้างขึ้นด้วยสิทธิ์ที่ให้มา
หากfile
ไฟล์นั้นจะไม่ถูกสร้างขึ้นหากไม่มีอยู่ให้ดูที่โมดูล [คัดลอก] หรือ [แม่แบบ] หากคุณต้องการพฤติกรรมดังกล่าว
หากlink
ลิงก์สัญลักษณ์จะถูกสร้างหรือเปลี่ยนแปลง ใช้hard
สำหรับการเชื่อมโยง
หากabsent
ไดเร็กทอรีจะถูกลบซ้ำและไฟล์หรือ symlink จะถูกยกเลิกการเชื่อมโยงโปรดทราบว่า
file
จะไม่ล้มเหลวหากเส้นทางไม่มีอยู่เนื่องจากสถานะไม่เปลี่ยนแปลงหาก
touch
(ใหม่ใน 1.4) ไฟล์ว่างเปล่าจะถูกสร้างขึ้นหากไม่มีพา ธ ในขณะที่ไฟล์หรือไดเรกทอรีที่มีอยู่จะได้รับการเข้าถึงไฟล์ที่ปรับปรุงและเวลาแก้ไข (คล้ายกับวิธีการtouch
ทำงานจากบรรทัดคำสั่ง)
คุณสามารถใช้โมดูล "ไฟล์" ในกรณีนี้มีข้อโต้แย้งมากมายที่คุณสามารถส่งผ่านไปยังไดเรกทอรีที่สร้างขึ้นใหม่เช่นเจ้าของกลุ่มที่ตั้งโหมดและอื่น ๆ .....
โปรดอ้างอิงเอกสารนี้สำหรับคำอธิบายโดยละเอียดเกี่ยวกับโมดูลไฟล์ ...
https://docs.ansible.com/ansible/latest/modules/file_module.html#file-module
โปรดจำไว้ว่าโมดูลนี้ไม่ได้เป็นเพียงการสร้างไดเรกทอรี !!!
วิธีที่ง่ายที่สุดในการสร้างไดเรกทอรีใน Ansible
หรือ
คุณต้องการให้สิทธิ์ sudo แก่ไดเรกทอรีนั้น
ฉันเห็นตัวอย่าง Playbooks มากมายและฉันต้องการพูดถึงตัวอย่างคำสั่ง Adhoc
$ ansible -i inventory -m file -a "path = / tmp / direcory state = ไดเรกทอรี (แทนที่จะเป็นไดเรกทอรีเราสามารถพูดถึง touch เพื่อสร้างไฟล์)
คุณต้องใช้โมดูลไฟล์สำหรับกรณีนี้ Playbook ด้านล่างคุณสามารถใช้สำหรับการอ้างอิงของคุณ
---
- hosts: <Your target host group>
name: play1
tasks:
- name: Create Directory
files:
path=/srv/www/
owner=<Intended User>
mode=<Intended permission, e.g.: 0750>
state=directory
ในการตรวจสอบว่ามีไดเรกทอรีอยู่หรือไม่จากนั้นเรียกใช้งานบางอย่าง (เช่นสร้างไดเรกทอรี) ให้ใช้สิ่งต่อไปนี้
- name: Check if output directory exists
stat:
path: /path/to/output
register: output_folder
- name: Create output directory if not exists
file:
path: /path/to/output
state: directory
owner: user
group: user
mode: 0775
when: output_folder.stat.exists == false
คุณต้องการfile
โมดูล ในการสร้างไดเรกทอรีคุณต้องระบุตัวเลือกstate: directory
:
- name: Creates directory
file:
path: /src/www
state: directory
นี่เป็นวิธีที่ง่ายกว่า
- name: create dir
command: mkdir -p dir dir/a dir/b
state=directory
ไดเรกทอรีย่อยทันทีทั้งหมดจะถูกสร้างขึ้นหากไม่มีอยู่ตั้งแต่ 1.7 จะถูกสร้างขึ้นด้วยสิทธิ์ที่ให้มา