Ansible का उपयोग करके डायरेक्टरी कैसे बनाएं


375

आप कैसे एक निर्देशिका बना सकता हूँ wwwपर /srvएक डेबियन-आधारित प्रणाली एक Ansible प्लेबुक के प्रयोग पर?

जवाबों:


635

आप फ़ाइल मॉड्यूल चाहते हैं। निर्देशिका बनाने के लिए, आपको विकल्प निर्दिष्ट करने की आवश्यकता है state=directory:

- name: Creates directory
  file:
    path: /src/www
    state: directory

आप अन्य विकल्प http://docs.ansible.com/file_module.html पर देख सकते हैं


36
यदि state=directory, वे मौजूद नहीं हैं, तो सभी तत्काल उपनिर्देशिकाएं बनाई जाएंगी, क्योंकि 1.7 वे आपूर्ति अनुमतियों के साथ बनाई जाएंगी।
एलेक्स

1
@ एलेक्स all immediate subdirectoriesभ्रामक है, क्या आप इसे परिभाषित कर सकते हैं और एक उदाहरण दे सकते हैं?
जेमी जैक्सन

8
@JamieJackson एक गलती है, "सभी मध्यवर्ती उपनिर्देशिकाएं" होनी चाहिए।
एलेक्स

203

आप फ़ाइल मॉड्यूल का विस्तार भी कर सकते हैं और यहां तक ​​कि इसके माध्यम से स्वामी, समूह और अनुमति भी सेट कर सकते हैं। (संदर्भ: जवाबदेह फ़ाइल प्रलेखन )

- 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

इस तरह, यह दोनों निर्देशिकाओं का निर्माण करेगा, अगर वे मौजूद नहीं थे।


38
recursiveतर्क का उपयोग इस तरह बहुत बनाता है mkdir -p(उन Googling के लिए ansible mkdir -p )।
मीका इलियट

2
मैंने पाया कि यह चाइल्ड फाइल्स की परमिशन को भी बदलता है ... लगभग mkdir -p / foo / bar && chmod -R 0775 / foo / bar की तरह .. किसी और ने भी इसे अंसिबल 2.0.0.2 के साथ देखा है
ThePracticalOne

5
recurseपैरामीटर पसंद नहीं करता है mkdir -p। यह निर्दिष्ट फ़ाइल विशेषताओं को पुन: सेट करता है (केवल राज्य = निर्देशिका पर लागू होता है)। यदि state=directory, वे मौजूद नहीं हैं, तो सभी तत्काल उपनिर्देशिकाएं बनाई जाएंगी, क्योंकि 1.7 वे आपूर्ति अनुमतियों के साथ बनाई जाएंगी।
एलेक्स 10

1

@ThePracticalOne - हाँ ... "रिकर्व" का उपयोग करके ठीक उसी तरह व्यवहार chmod -Rकरता है। यही है, अगर pathपहले से ही एक डायर के रूप में मौजूद है, और इसके अंदर फाइलें हैं, तो recurseविकल्प (कभी-कभी दुर्भाग्य से) उन फ़ाइलों को भी उन्हीं अनुमतियों को लागू करेगा। यह बेहतर या बदतर के लिए, डिजाइन द्वारा है
डेल एंडरसन


14

निर्देशिका केवल फ़ाइल मॉड्यूल का उपयोग करके बनाई जा सकती है, क्योंकि निर्देशिका एक फ़ाइल के अलावा कुछ भी नहीं है।

# create a directory if it doesn't exist
- file:
    path: /etc/some_directory
    state: directory
    mode: 0755
    owner: foo
    group: foo

8
- file:
    path: /etc/some_directory
    state: directory
    mode: 0755
    owner: someone
    group: somegroup

यही कारण है कि आप वास्तव में अनुमतियों, स्वामी और समूह को भी सेट कर सकते हैं। अंतिम तीन पैरामीटर अनिवार्य नहीं हैं।


7

आप एक निर्देशिका बना सकते हैं। का उपयोग करते हुए

# create a directory if it doesn't exist
- file: path=/src/www state=directory mode=0755

अधिक विवरण regaridng निर्देशिका और फ़ाइल सिस्टम के लिए आप http://docs.ansible.com/ansible/file_module.html से भी परामर्श कर सकते हैं ।


7

यहां सभी उत्तरों के लिए अतिरिक्त, बहुत सारी स्थितियां हैं जब आपको अधिक बनाने की आवश्यकता होती है तो एक निर्देशिका इसलिए प्रत्येक निर्देशिका के लिए अलग कार्य बनाने के बजाय लूप का उपयोग करना एक अच्छा विचार है।

- name: Creates directory
  file:
    path: "{{ item }}"
    state: directory
  with_items:
  - /srv/www
  - /dir/foo
  - /dir/bar

3

बस विशिष्ट वितरण के लिए कार्य निष्पादित करने के लिए शर्त रखने की आवश्यकता है

- name: Creates directory
  file: path=/src/www state=directory
  when: ansible_distribution == 'Debian'

3

आप स्टेटमेंट का उपयोग कर सकते हैं

- name: webfolder - Creates web folder
  file: path=/srv/www state=directory owner=www-data group=www-data mode=0775`

3

यदि आप विंडोज़ में डायरेक्टरी बनाना चाहते हैं:

  • नाम: निर्देशिका संरचना बनाएँ
    win_file:
    पथ: C: \ Temp \ folder \ subfolder>
    स्थिति: निर्देशिका


2

हमारे पास निर्देशिका बनाने के लिए उपलब्ध है, फ़ाइल को फ़ाइल में बनाने के लिए उपलब्ध है

उदाहरण

- name: Creates directory
  file:
    path: /src/www
    state: directory

1

आप सीधे कमांड चला सकते हैं और सीधे 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

1
---
- hosts: all
  connection: local
  tasks:
    - name: Creates directory
      file: path=/src/www state=directory

Playbook के ऊपर / निर्देशिका पथ में www निर्देशिका बनाएगा।

प्लेबुक के ऊपर चलने से पहले। कृपया सुनिश्चित करें कि आपका ansible होस्ट कनेक्शन सेट किया जाना चाहिए,

"लोकलहोस्ट ansible_connection = स्थानीय"

/ etc / ansible / होस्ट में मौजूद होना चाहिए

अधिक जानकारी के लिए कृपया मुझे बताएं।


फ़ाइल: पथ = / src / www राज्य = निर्देशिका
सौरभ

1

निर्देशिका बनाने के लिए

ansible host_name -m file -a "dest=/home/ansible/vndir state=directory"

1

निर्देशिका बनाने के लिए फ़ाइल मॉड्यूल का उपयोग करें और कमांड "ansible-doc फ़ाइल" का उपयोग करके फ़ाइल मॉड्यूल के बारे में विवरण प्राप्त करें

यहाँ एक विकल्प "राज्य" है जो बताता है:

यदि directory, वे मौजूद नहीं हैं, तो सभी तत्काल उपनिर्देशिकाएं बनाई जाएंगी, क्योंकि 1.7 वे आपूर्ति अनुमतियों के साथ बनाई जाएंगी।
यदि file, फ़ाइल मौजूद नहीं है, अगर यह मौजूद नहीं है, तो [कॉपी] या [टेम्प्लेट] मॉड्यूल देखें यदि आप ऐसा व्यवहार चाहते हैं।
यदि link, प्रतीकात्मक लिंक बनाया या बदला जाएगा। hardहार्डलिंक के लिए उपयोग करें ।
यदि absent, निर्देशिकाओं को पुनरावर्ती रूप से हटा दिया जाएगा, और फ़ाइलें या सिमिलिंक को अनलिंक किया जाएगा।

ध्यान दें कि fileयदि राज्य में परिवर्तन नहीं हुआ तो मार्ग विफल नहीं होगा।

यदि touch(1.4 में नया), पथ मौजूद नहीं है, तो एक खाली फ़ाइल बनाई जाएगी, जबकि एक मौजूदा फ़ाइल या निर्देशिका को अद्यतन फ़ाइल पहुंच और संशोधन समय ( touchकमांड लाइन से काम करने के तरीके के समान ) प्राप्त होगा।


1

आप इस मामले में "फ़ाइल" मॉड्यूल का उपयोग कर सकते हैं, बहुत सारे तर्क हैं जो आप मालिक, समूह, स्थान, मोड और जैसे नव निर्मित निर्देशिका के लिए पारित कर सकते हैं .....

कृपया फ़ाइल मॉड्यूल पर विस्तृत विवरण के लिए इस दस्तावेज़ को देखें ...

https://docs.ansible.com/ansible/latest/modules/file_module.html#file-module

याद रखें कि यह मॉड्यूल केवल डायरेक्टरी बनाने के लिए नहीं है !!!


1

सबसे आसान तरीका है Ansible में डायरेक्टरी बनाने का

  • नाम: यदि यह मौजूद नहीं है तो अपना_निर्देश बनाएं। फ़ाइल: पथ: / etc / your_directory

या

आप उस निर्देशिका को sudo विशेषाधिकार देना चाहते हैं ।

  • नाम: यदि यह मौजूद नहीं है तो अपना_निर्देश बनाएं। फ़ाइल: पथ: / etc / your_directory मोड: '777'

0

मुझे बहुत सारी Playbooks के उदाहरण दिखाई देते हैं और मैं Adhoc कमांड के उदाहरण का उल्लेख करना चाहूंगा।

$ ansible -i इन्वेंट्री -m फ़ाइल -a "पथ = / tmp / direcory राज्य = निर्देशिका (निर्देशिका के बजाय हम फ़ाइलों को बनाने के लिए स्पर्श का उल्लेख कर सकते हैं)


0

आपको इस मामले के लिए फ़ाइल मॉड्यूल का उपयोग करने की आवश्यकता है। प्लेबुक के नीचे आप अपने संदर्भ के लिए उपयोग कर सकते हैं।

    ---
     - 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 

0

यह जाँचने के लिए कि क्या निर्देशिका मौजूद है और फिर कुछ कार्य चलाएं (जैसे निर्देशिका बनाएँ) निम्नलिखित का उपयोग करें

- 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

0

आप fileमॉड्यूल चाहते हैं । निर्देशिका बनाने के लिए, आपको विकल्प निर्दिष्ट करने की आवश्यकता है state: directory:

- name: Creates directory
  file:
    path: /src/www
    state: directory

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.