জবাবদিহিতে অ বিদ্যমান বিদ্যমান দিরকে অটো তৈরির সহজ উপায় কী


117

আমার উত্তরযোগ্য প্লেবুকে অনেকবার আমার সেখানে ফাইল তৈরি করতে হবে

 - name: Copy file
   template:
     src: code.conf.j2
     dest: "{{project_root}}/conf/code.conf"

এখন অনেকবার confদির নেই। তারপরে আমাকে প্রথমে সেই দির তৈরি করার জন্য আরও টাস্ক তৈরি করতে হবে।

কিছু বিকল্পের সাথে উপস্থিত না থাকলে অটো তৈরির কোনও সহজ উপায় আছে কি?



আমি বিশ্বাস করতে পারি না এটি উত্তরসূরী ২.৯-এ এখনও একটি সমস্যা। এই মডিউলগুলির জন্য একটি তৈরি ডিয়ার টগল রাখা, ডিফল্টরূপে বন্ধ করা কতটা কঠিন। এটি প্লেবুকগুলিতে
এতগুলি ক্রাফট সংরক্ষণ করবে,

উত্তর:


139

এখনই, এটি একমাত্র উপায়

- name: Ensures {{project_root}}/conf dir exists
  file: path={{project_root}}/conf state=directory
- name: Copy file
  template:
    src: code.conf.j2
    dest: "{{project_root}}/conf/code.conf"

2
আমি মনে করি নিশ্চিত করা এখানে সঠিক শব্দ। আশ্বাস দিন: "কোনও সন্দেহকে দূরীকরণের জন্য কাউকে ইতিবাচকভাবে কিছু বলুন", নিশ্চিত করুন: "নিশ্চিত করুন যে (কিছু) ঘটবে বা ঘটবে"।
ড্যানিয়েল কম্পটন

এটি ডিরেক্টরটি আছে কিনা তা যাচাই করে দেখা যাচ্ছে, তবে এটি এটি তৈরি করে বলে মনে হচ্ছে না।
ম্যাট

8
সচেতন থাকা আবশ্যক আপনি যোগ করতে চান করতে পারে যে recurse=yesকরতে fileপেতে কল mkdir -pটাইপ আচরণ
মিচ

1
ধাঁধাটির আর একটি অংশ যা সহায়ক হতে পারে তা হল একটি ফাইল রয়েছে এমন ডিরেক্টরি পাওয়ার জন্য উত্তর-নির্দিষ্ট dirnameফিল্টার
ক্যাস্পার

1
@radtek ফাইল মডিউলটি ইতিমধ্যে state = ডিরেক্টরিতে এটি করে। প্রস্তাবিত ফাইল পাথ কোনও ডিরেক্টরিতে নির্দেশ করে তা নিশ্চিত করা সম্ভব না হলে এটি ব্যর্থ হবে।
আলেকজান্ডার জারডিম

21

পূর্ণ পাথ দিয়ে সাফল্য নিশ্চিত করতে পুনরাবৃত্তি = হ্যাঁ ব্যবহার করুন

- name: ensure custom facts directory exists
    file: >
      path=/etc/ansible/facts.d
      recurse=yes
      state=directory

2
ডকুমেন্টেশন অনুসারে (এবং আমার পরীক্ষাগুলি) সাব-ডাইরেক্টরিগুলি সর্বদা তৈরি হয় এবং recurse=yesকেবল পুনরাবৃত্তভাবে অনুমতিগুলি প্রয়োগ করে। যাইহোক, ডকুমেন্টেশনে বলা হয়েছে যে v1.7 থেকে এটি স্বয়ংক্রিয়ভাবে ঘটে, তাই recurseসম্ভবত অপ্রচলিত হতে পারে।
থেকে

16

আপনি যদি উত্তরীয় > = ২.০ চালাচ্ছেন তবে সেখানে একটি ডায়ারনেম ফিল্টার রয়েছে যা আপনি কোনও পাথের ডিরেক্টরি অংশটি বের করতে ব্যবহার করতে পারেন। উভয় কাজ কখনও সিঙ্ক থেকে বেরিয়ে না যায় তা নিশ্চিত করার জন্য আপনি পুরো পথটি ধরে রাখতে কেবল একটি পরিবর্তনশীল ব্যবহার করতে পারেন।

সুতরাং উদাহরণস্বরূপ, যদি আপনার dest_pathমতো ভেরিয়েবলের সংজ্ঞায়িত প্লেবুক থাকে তবে আপনি একই ভেরিয়েবলটি পুনরায় ব্যবহার করতে পারেন:

- name: My playbook
  vars:
    dest_path: /home/ubuntu/some_dir/some_file.txt
  tasks:

    - name: Make sure destination dir exists
      file:
        path: "{{ dest_path | dirname }}"
        state: directory
        recurse: yes

    # now this task is always save to run no matter how dest_path get's changed arround
    - name: Add file or template to remote instance
      template: 
        src: foo.txt.j2
        dest: "{{ dest_path }}"

1
যদিও এই সমাধানটি এখনও ভার্জোজ, আমার মনে হয় এটি লেখকের অভিপ্রায়গুলির নিকটতম। আমি এটি পছন্দ করতাম যদি লবনের মতো একটি সাধারণ 'মেকের্ডার্স' প্যারামিটার থাকে: ডকসস.সালটসটেক.এইন
স্লেট

7

আফাইক, বিকল্পটি ব্যবহার করে এটি করা যেতে পারে way state=directoryযদিও templateঅধিকাংশ মডিউল সমর্থন copyঅপশন, যেটা ঘুরে সমর্থন সবচেয়ে fileঅপশন, আপনি ভালো কিছু ব্যবহার করতে পারবেন না state=directoryএটা দিয়ে। তদুপরি, এটি বেশ বিভ্রান্তিকর হবে (এর অর্থ কী এটি {{project_root}}/conf/code.confএকটি ডিরেক্টরি? বা এটির অর্থ {{project_root}}/conf/কি এটি তৈরি করা উচিত)।

সুতরাং আমি কোনও পূর্ববর্তী fileকাজ যোগ না করে এখনই এটি সম্ভব বলে মনে করি না ।

- file: 
    path: "{{project_root}}/conf"
    state: directory
    recurse: yes

7

সর্বশেষতম দস্তাবেজ অনুসারে যখন রাজ্যটি ডিরেক্টরি হিসাবে সেট করা থাকে, প্যারেন্ট ডিরেক্টরিগুলি তৈরি করতে আপনাকে প্যারামিটার পুনরাবৃত্তি ব্যবহার করার দরকার নেই , ফাইল মডিউল এটির যত্ন নেবে।

- name: create directory with parent directories
  file:
    path: /data/test/foo
    state: directory

মূল ডিরেক্টরি ডেটা তৈরি করতে এবং foo দিয়ে পরীক্ষা করার জন্য এটি যথেষ্ট ভাড়া

অনুগ্রহ করে প্যারামিটারের বিবরণ উল্লেখ করুন - " রাষ্ট্র " http://docs.ansible.com/ansible/latest/modules/file_module.html


ভবিষ্যতে ভাঙতে পারে এমন লিঙ্কের পরিবর্তে এখানে সমাধানটি যুক্ত করুন।
Ignacio আরা

@ ইগনাসিওআর মূল্যবান মন্তব্যের জন্য ধন্যবাদ, আমি সমাধান যোগ করেছি।
অ্যালবাই

1

আপনার উত্তরসূচক সংস্করণের উপর নির্ভর করে আপনি নিম্নলিখিতটি ব্যবহার করে ফোল্ডারটি তৈরি করতে পারেন।

সর্বশেষ সংস্করণ 2 <

- name: Create Folder
  file: 
   path: "{{project_root}}/conf"
   recurse: yes
   state: directory

পুরানো সংস্করণ:

- name: Create Folder
  file: 
      path="{{project_root}}/conf"
      recurse: yes
      state=directory

দেখুন - http://docs.ansible.com/ansible/latest/file_module.html


1

কপি মডিউল ডিরেক্টরি না থাকলে এটি তৈরি করে। এক্ষেত্রে এটি রেজলিউশন.কনফ.ডি ডিরেক্টরি তৈরি করে

- name: put fallback_dns.conf in place                                                                 
  copy:                                                                                                
    src: fallback_dns.conf                                                                             
    dest: /etc/systemd/resolved.conf.d/                                                                
    mode: '0644'                                                                                       
    owner: root                                                                                        
    group: root                                                                                        
  become: true                                                                                         
  tags: testing
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.