উত্তর:
আপনি প্রথমে গন্তব্য ফাইলটি উপস্থিত আছে কিনা তা যাচাই করতে পারেন এবং তার ফলাফলের ফলাফলের ভিত্তিতে সিদ্ধান্ত নিতে পারেন:
tasks:
- name: Check that the somefile.conf exists
stat:
path: /etc/file.txt
register: stat_result
- name: Create the file, if it doesnt exist already
file:
path: /etc/file.txt
state: touch
when: not stat_result.stat.exists
stat_result
একটি stat_result.state.exists
মিথ্যা হবে (এবং এটি তখন দ্বিতীয় কাজটি চালিত হবে) have : আপনি এখানে পরিসংখ্যান মডিউল বিবরণ দেখতে পারবেন docs.ansible.com/ansible/stat_module.html
when: stat_result.stat.exists == False
আপনি when: not stat_result.stat.exists
যদি এটি আরও প্রাকৃতিক পড়তে চান।
পরিসংখ্যান মডিউল এই হিসাবে ভাল হিসাবে ফাইলগুলির জন্য অন্যান্য তথ্য অনেক সংগ্রহ করবে। উদাহরণ নথি থেকে:
- stat: path=/path/to/something
register: p
- debug: msg="Path exists and is a directory"
when: p.stat.isdir is defined and p.stat.isdir
ফাইল উপস্থিত থাকলে টাস্ক এড়ানোর জন্য স্ট্যাটিক মডিউলটি দিয়ে এটি অর্জন করা যেতে পারে।
- hosts: servers
tasks:
- name: Ansible check file exists.
stat:
path: /etc/issue
register: p
- debug:
msg: "File exists..."
when: p.stat.exists
- debug:
msg: "File not found"
when: p.stat.exists == False
সাধারণভাবে আপনি স্ট্যাট মডিউলটি দিয়ে এটি করবেন । কিন্তু কমান্ড মডিউল হয়েছে creates
বিকল্প যা এই খুব সহজ করে তোলে:
- name: touch file
command: touch /etc/file.txt
args:
creates: /etc/file.txt
আমার ধারণা আপনার টাচ কমান্ডটি কি কেবল উদাহরণ? সেরা অনুশীলনটি হ'ল কোনও কিছু পরীক্ষা না করা এবং উত্তরদাতাকে তার কাজটি করতে দেওয়া - সঠিক মডিউল সহ। সুতরাং আপনি যদি ফাইলটি বিদ্যমান তা নিশ্চিত করতে চান তবে আপনি ফাইল মডিউলটি ব্যবহার করবেন:
- name: make sure file exists
file:
path: /etc/file.txt
state: touch
state: file
ফাইল তৈরি করে না। ডকস.সানসিল.স্যাবসিল.ফেসি_ফৌড_মডিউল এইচটিএমএল
vars:
mypath: "/etc/file.txt"
tasks:
- name: checking the file exists
command: touch file.txt
when: mypath is not exists
when: mypath is not exists
এই ক্ষেত্রে এর অর্থ কী? নয় mypath
একটি সহজ স্ট্রিং?
আমি দেখতে পাই যে এই .stat.exists
ধরণের চেকগুলি করার জন্য এটি বিরক্তিকর এবং ত্রুটিযুক্ত হতে পারে । উদাহরণস্বরূপ তাদের চেক মোড ( --check
) কাজ করতে অতিরিক্ত যত্ন প্রয়োজন ।
অনেক উত্তর এখানে পরামর্শ দেয়
যাইহোক, কখনও কখনও এটি একটি কোড গন্ধ তাই সর্বদা উত্তরযোগ্য ব্যবহারের আরও ভাল উপায়গুলি সন্ধান করুন, বিশেষত সঠিক মডিউলটি ব্যবহার করার অনেক সুবিধা রয়েছে। যেমন
- name: install ntpdate
package:
name: ntpdate
অথবা
- file:
path: /etc/file.txt
owner: root
group: root
mode: 0644
তবে এটি যখন একটি মডিউল ব্যবহার সম্ভব না হয়, আপনি নিবন্ধভুক্ত করতে পারেন এবং কোনও পূর্ববর্তী কার্যের ফলাফল পরীক্ষা করতে পারেন কিনা তাও তদন্ত করুন। যেমন
# jmeter_version: 4.0
- name: Download Jmeter archive
get_url:
url: "http://archive.apache.org/dist/jmeter/binaries/apache-jmeter-{{ jmeter_version }}.tgz"
dest: "/opt/jmeter/apache-jmeter-{{ jmeter_version }}.tgz"
checksum: sha512:eee7d68bd1f7e7b269fabaf8f09821697165518b112a979a25c5f128c4de8ca6ad12d3b20cd9380a2b53ca52762b4c4979e564a8c2ff37196692fbd217f1e343
register: download_result
- name: Extract apache-jmeter
unarchive:
src: "/opt/jmeter/apache-jmeter-{{ jmeter_version }}.tgz"
dest: "/opt/jmeter/"
remote_src: yes
creates: "/opt/jmeter/apache-jmeter-{{ jmeter_version }}"
when: download_result.state == 'file'
নোট করুন when:
কিন্তু creates:
তাই --check
ত্রুটি আউট না
আমি এটি উল্লেখ করছি কারণ প্রায়শই এই তুলনায় আদর্শের চেয়ে কম অনুশীলনগুলি জোড়ায় আসে অর্থাৎ কোনও আপ্ট / ইয়ম প্যাকেজ নেই সুতরাং আমাদের 1 টি ডাউনলোড করতে হবে এবং 2) আনজিপ করুন
আশাকরি এটা সাহায্য করবে
আবিষ্কার হয়েছে যে কলিং stat
ধীর গতির এবং ফাইলের অস্তিত্ব চেকের জন্য প্রয়োজনীয় নয় এমন প্রচুর তথ্য সংগ্রহ করে।
সমাধান অনুসন্ধানের জন্য কিছু সময় ব্যয় করার পরে, আমি নিম্নলিখিত সমাধানটি আবিষ্কার করেছি, যা আরও দ্রুত কাজ করে:
- raw: test -e /path/to/something && echo true || echo false
register: file_exists
- debug: msg="Path exists"
when: file_exists == true
আপনি ফাইলটি রেজিস্ট্রেশন করতে, এবং শর্তটি প্রয়োগ করার জন্য মডিউলটি যখন উপযুক্ত স্থিতি মডিউল ব্যবহার করতে পারেন ।
- name: Register file
stat:
path: "/tmp/test_file"
register: file_path
- name: Create file if it doesn't exists
file:
path: "/tmp/test_file"
state: touch
when: file_path.stat.exists == False
**
**
ওএস প্রান্তে ফাইল উপস্থিত থাকলে ফাইলটি সরাতে আমি যে উত্তরযোগ্য প্লেটি ব্যবহার করি তা নীচে।
- name: find out /etc/init.d/splunk file exists or not'
stat:
path: /etc/init.d/splunk
register: splunkresult
tags:
- always
- name: 'Remove splunk from init.d file if splunk already running'
file:
path: /etc/init.d/splunk
state: absent
when: splunkresult.stat.exists == true
ignore_errors: yes
tags:
- always
আমি নীচের মতো প্লে শর্ত ব্যবহার করেছি
when: splunkresult.stat.exists == true --> Remove the file
আপনি আপনার প্রয়োজনের ভিত্তিতে সত্য / মিথ্যা দিতে পারেন
when: splunkresult.stat.exists == false
when: splunkresult.stat.exists == true
যদি আপনি কেবল একটি নির্দিষ্ট ফাইল উপস্থিত রয়েছে তা নিশ্চিত করতে চান (f.ex. কারণ এটি উত্তরদাতাদের চেয়ে আলাদাভাবে তৈরি করা যেতে পারে) এবং যদি এটি না ঘটে তবে ব্যর্থ হয়, তবে আপনি এটি করতে পারেন:
- name: sanity check that /some/path/file exists
command: stat /some/path/file
check_mode: no # always run
changed_when: false # doesn't change anything
অন্যান্য উত্তরগুলির পরিপূরক হিসাবে আপেক্ষিক পথে একটি নোট।
কোড হিসাবে পরিকাঠামো করার সময় আমি সাধারণত ভূমিকা এবং কাজগুলি ব্যবহার করি যা আপেক্ষিক পাথ গ্রহণ করে, বিশেষত সেই ভূমিকাগুলির মধ্যে সংজ্ঞায়িত ফাইলগুলির জন্য।
প্লেবুক_ডির এবং ভূমিকা_পাথের মতো বিশেষ ভেরিয়েবলগুলি অস্তিত্বের জন্য পরীক্ষা করার জন্য প্রয়োজনীয় নিখুঁত পাথ তৈরি করতে খুব দরকারী।