উত্তরীয় রান গ্লোবাল ভেরিয়েবল


8

আমি জবাবদিহি করে সার্ভারগুলির একটি ক্লাস্টার তৈরি করতে চাই।

একটি মূল-প্লেবুকে আমি কয়েকটি উপ-প্লেবুক অন্তর্ভুক্ত করি।

- include: playbook_commandserver.yml
- include: playbook_agent.yml

প্লেবুক_কম্যান্ডসরভার.আইএমএল-এ, আমি কমান্ড-সার্ভার তৈরি করেছি (অ্যাউজ এ)। তারপরে, আমি এমন একটি ভূমিকা ট্রিগার set_factকরি যা কমান্ডারভারের ডিএনএস নামটি মনে রাখার জন্য মডিউলটি ব্যবহার করে :

- name: Get hostname of command server
  shell: /usr/bin/host $(/usr/bin/curl -s http://ipecho.net/plain) | /usr/bin/awk '{print $5}' | /usr/bin/awk -F 'aws.com' '{print $1"aws.com"}'
  register: cs
- name: Set hostname of command server as fact
  set_fact: commandserver="{{ cs.stdout }}"

commandserverআসলে একই খেলা পাওয়া যায়, কিন্তু একই প্লেবুক নেই .. একা দিন playbook_agent.ymlপরে, যে অন্তর্ভুক্ত পরার। এবং এটি ঠিক সেখানে রয়েছে, যেখানে আমাকে সেই কমান্ডারভার-ফ্যাক্টটি অ্যাক্সেস করতে হবে।

তাহলে কীভাবে একটি সেট / স্টোর ভেরিয়েবলগুলি সম্পূর্ণ উত্তরযোগ্য-রানের জন্য বৈধ?

আমি এটি খুঁজে পেয়েছি: /programming/26732241/ansible-save-regided-variable-to-file তবে আমার কাছে এটি দেখতে কুৎসিত হ্যাকের মতো দেখাচ্ছে।

থের কি এই সমস্যার আরও ভাল সমাধান হতে পারে? কোনও ভেরিয়েবল সেট করার কোনও উপায় নেই, এটি পুরো উত্তরযোগ্য-রান জন্য বৈধ?

উত্তর:


12

হ্যাঁ, এটি সম্ভব। আপনি যখন set_factমডিউলটি দিয়ে কোনও সত্য সেট করেন , এই তথ্যটি "হোস্টভার্স" এর মাধ্যমে অ্যাক্সেসযোগ্য। সুতরাং আপনি যদি আপনার ভেরিয়েবল কমান্ডসভারটি এর মতো সংজ্ঞায়িত করেন:

  - name: Set hostname of command server as fact
    set_fact: commandserver="{{ cs.stdout }}"

তারপরে আপনি একই চলকের অন্যান্য অন্তর্ভুক্ত প্লেবুকগুলিতে এই পরিবর্তনশীলটি অ্যাক্সেস করতে পারেন (ডিবাগ মডিউলটি কেবল একটি উদাহরণ):

  - debug: msg="{{ hostvars['put the hostname in here']['commandserver'] }}"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.