কমান্ড লাইনে আমি কীভাবে উত্তরযোগ্য প্লেবুককে ভেরিয়েবল পাস করতে পারি?


218

আমি জবাবদিহি করার জন্য নতুন এবং নিম্নলিখিত বিষয়গুলি কার্যকর না হওয়ায় কীভাবে এটি করা যায় তা অবাক করেই চলেছি

ansible-playbook -i '10.0.0.1,' yada-yada.yml --tags 'loaddata' django_fixtures="tile_colors"

django_fixturesআমার পরিবর্তনশীল কোথায় ।

উত্তর:


307

দস্তাবেজগুলি পড়তে আমি কমান্ড লাইনে ভেরিয়েবলগুলি অধ্যায়টি পাই যা এই নমুনা দেয়:

ansible-playbook release.yml --extra-vars "version=1.23.45 other_variable=foo"

অন্য উদাহরণগুলি JSON স্ট্রিং (≥ 1.2) বা ফাইল (≥ 1.3) থেকে কীভাবে লোড করবেন তা দেখায়


33
নোট করুন যে সংশোধন করা পরিবর্তনশীল (গুলি) --extra-varsপ্লেবুকের ভিতরে সংজ্ঞায়িত ভেরিয়েবল (গুলি) ওভাররাইড করবে।
চেকসাম

5
এছাড়াও নোট করুন (ডক্স থেকে): key=valueবাক্যবিন্যাস ব্যবহার করে পাস করা মানগুলি স্ট্রিং হিসাবে ব্যাখ্যা করা হয় । আপনার যদি স্ট্রিং না হওয়া উচিত এমন কোনও কিছুতে পাস করার দরকার হয় তবে JSON ফর্ম্যাটটি ব্যবহার করুন (বুলিয়ান, পূর্ণসংখ্যা, ভাসমান, তালিকা ইত্যাদি)। উদাহরণস্বরূপ:--extra-vars '{"i_wasted_30_mins_debugging_a_boolean_string":true}'
smilin_stan

158

অন্যান্য উত্তরগুলি কমান্ড লাইন ভেরিয়েবলগুলিতে কীভাবে পাস করতে হয় তবে কীভাবে সেগুলিতে অ্যাক্সেস করবেন তা জানায় না, তাই আপনি যদি করেন:

--extra-vars "version=1.23.45 other_variable=foo"

আপনার yML ফাইলে আপনি এগুলি কিছু এমন কিছু করে স্কোপযুক্ত উত্তরযোগ্য ভেরিয়েবলগুলিতে নিয়োগ করেন:

vars:
    my_version: "{{ version }}"
    my_other_variable: {{ other_variable }}

কমান্ড লাইন আরোগুলি ব্যবহারের বিকল্প হ'ল পরিবেশগত ভেরিয়েবলগুলি ব্যবহার করা যা আপনার সেশনের মধ্যে ইতিমধ্যে সংজ্ঞায়িত করা হয়েছে, আপনি এগুলি আপনার উত্তরযুক্ত yML ফাইলগুলির মধ্যে উল্লেখ করতে পারেন:

vars:
    my_version: "{{ lookup('env', 'version') }}"
    my_other_variable: {{ lookup('env', 'other_variable') }}

28
নিশ্চিত আপনি কি সম্পর্কে কথা বলছেন না ?? আমার উত্তর কমান্ড লাইন পতাকা --extra-vars এবং আপনার yaml কনফিগারেশনের মধ্যে কীভাবে সেগুলি উল্লেখ করতে পারে তা উল্লেখ করে পূর্ববর্তী গৃহীত উত্তরের উপর প্রসারিত হয় । তারপরে আমি এটি করার বিকল্প উপায়ও দিই।
গ্রিনস্টাররক্স

1
এখানে প্রশ্নটি বিশেষভাবে কমান্ড লাইনের মাধ্যমে ভেরিয়েবল পাস করা । ঠিক এ কারণেই এটি নিজের প্রশ্ন / উত্তর এবং সম্পর্কিত লিঙ্ক হিসাবে ভাল হবে। আপনি এবং সম্পর্কিত লিঙ্কটি প্রশ্নের মন্তব্য হিসাবে করতে পারেন।
লোপেজ

42
বর্ধিত উত্তরটি আমাকে সাহায্য করেছিল। প্যারামিটারগুলি কীভাবে পাস করবেন তা জানার অংশে কীভাবে চলকগুলি উল্লেখ করতে হবে তা অবশ্যই জেনে রাখা। অন্যথায় আপনার সেগুলি পাস না করে বরং ঘোষিত করে যে আপনি ভেরিয়েবলটি পাস করতে চান। কোনও বস্তু পাস করার জন্য একজন দাতা এবং রিসিভার দরকার। একটি ভেরিয়েবল পাস করার জন্য একটি প্যারামিটার ঘোষণা এবং প্যারামিটার ব্যবহার প্রয়োজন।
বিরোধ

lookup('env', SOMETHING)12 টি ফ্যাক্টরের সাথে মিলছে।
zx1986

1
ভেরিয়েবলের নাম পরিবর্তন করতে ভুলবেন না: নিজে থেকে version: {{ version }}সংজ্ঞায়নের মতো ভুল version
মিন্হ Nghĩa

41
ansible-playbook release.yml -e "version=1.23.45 other_variable=foo"

25
-eপতাকার সংক্ষিপ্ত রূপ--extra-vars
Edouard লোপেজ

4
আমি কি ভেরিয়েবল ফাইলটি পাস করতে পারি?
অপ্সকো

13
@ অণিরুদ্ধজবাঞ্জল হ্যাঁ, যেমন--extra-vars "@some_file.json"
এলানএসই

1
@ অপ্সকো @ অ্যালানসী নোট করুন যে আপনি যদি কোনও ফাইল থেকে --extra-varsভেরিয়েবল পাস করে থাকেন তবে আপনার ফাইলটিতে নয় ভেরিয়েবলগুলি পাস করার জন্য একটি দ্বিতীয় পতাকা লাগবে। উদাহরণস্বরূপ--extra-vars "@some_file.json" --extra-vars "other_variable=foo"
বনহ

আপনাকে ধন্যবাদ @ বুনহ যা আমি খুঁজছিলাম
ভক্ত


31

কোনও কারণে উপরের উত্তরগুলির মধ্যে আমার পক্ষে কাজ হয়নি। আনসবাইল ২.২.০-তে আমার প্লেবুকে আমার বেশ কয়েকটি অতিরিক্ত বার পাস করার দরকার রয়েছে, এটিই আমি এটি কাজ করে চলেছি (প্রতিটি বারের আগে -e বিকল্পটি নোট করুন):

ansible-playbook site.yaml -i hostinv -e firstvar=false -e second_var=value2


@ এলএক্সসিদেব কোহালাপ্পি +1 দেখানোর জন্য যে আপনি নিজের -eপতাকাটিতে অতিরিক্ত যুদ্ধ নির্দিষ্ট করতে পারবেন
সিটিলকি

আপনি একক পতাকা ব্যবহার করে একাধিক ভেরিয়েবলগুলিও সংজ্ঞায়িত করতে পারেন:-e "firstvar=false second_var=value2"
নীলস ব্রুনিউস

একই সমস্যা. একক পতাকা সহ একাধিক বার কাজ করবে না। আমি ভাবছি কেন?
ব্রেট

14
ansible-playbook test.yml --extra-vars "arg1=${var1} arg2=${var2}"

YML ফাইলে আপনি এগুলি তাদের ব্যবহার করতে পারেন

---
arg1: "{{ var1 }}"
arg2: "{{ var2 }}"

এছাড়াও, --extra-varsএবং -eএকই, আপনি তাদের মধ্যে একটি ব্যবহার করতে পারেন।


4
 s3_sync:
      bucket: ansible-harshika
      file_root: "{{ pathoftsfiles  }}"
      validate_certs: false 
      mode: push
      key_prefix: "{{ folder }}"

এখানে ভেরিয়েবলগুলি 'প্যাথোফটসফায়ালস' এবং 'ফোল্ডার' হিসাবে ব্যবহার করা হচ্ছে। এখন এই ভেরিয়েবলের মান নীচের কমান্ড দ্বারা দেওয়া যেতে পারে

sudo ansible-playbook multiadd.yml --extra-vars "pathoftsfiles=/opt/lampp/htdocs/video/uploads/tsfiles/$2 folder=nitesh"

দ্রষ্টব্য: শেল কমান্ডের ভেরিয়েবলের মানগুলি পাস করার সময় উল্টানো কমা ব্যবহার করবেন না


2
ansible-playbook release.yml --extra-vars "username=hello password=bye"

#you can now use the above command anywhere in the playbook as an example below:
tasks:
- name: Create a new user in Linux
shell: useradd -m -p {{username}} {{password}}"

2

আপনি শেল এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করতে চাইলে এটি আমার পক্ষেও কাজ করেছে:

ansible-playbook -i "localhost," ldap.yaml --extra-vars="LDAP_HOST={{ lookup('env', 'LDAP_HOST') }} clustername=mycluster env=dev LDAP_USERNAME={{ lookup('env', 'LDAP_USERNAME') }} LDAP_PASSWORD={{ lookup('env', 'LDAP_PASSWORD') }}"


1

ansible-playbok -i <inventory> <playbook-name> -e "proc_name=sshd"

আপনি উপরের কমান্ডটি নীচের প্লেবুকগুলিতে ব্যবহার করতে পারেন।

---
- name: Service Status
gather_facts: False
tasks:
- name: Check Service Status (Linux)
shell: pgrep "{{ proc_name }}"
register: service_status
ignore_errors: yes
debug: var=service_status.rc`
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.