আমি উত্তর-প্লেবুক মডিউল মৃত্যুদন্ড কার্যকর করার লগ / বিশদটি কীভাবে পেতে পারি?


96

বলুন আমি নিম্নলিখিতটি কার্যকর করি।

$ cat test.sh
#!/bin/bash
echo Hello World
exit 0

$ cat Hello.yml
---

- hosts: MyTestHost
  tasks:
  - name: Hello yourself
    script: test.sh


$ ansible-playbook  Hello.yml

PLAY [MyTestHost] ****************************************************************

GATHERING FACTS ***************************************************************
ok: [MyTestHost]

TASK: [Hello yourself] ********************************************************
ok: [MyTestHost]

PLAY RECAP ********************************************************************
MyTestHost                    : ok=2    changed=0    unreachable=0    failed=0

$

আমি নিশ্চিত যে এটি সফল ছিল।

দূরবর্তী হোস্টে (মাই টেস্টহস্ট) আমার স্ক্রিপ্ট দ্বারা "হ্যালো ওয়ার্ল্ড" প্রতিধ্বনিত / মুদ্রিত কোথায় দেখতে পাচ্ছি? নাকি স্ক্রিপ্টের রিটার্ন / এক্সিট কোড?

আমার গবেষণা আমাকে দেখায় যে মডিউল সম্পাদন কলব্যাক বা সেই লাইনে কিছু রেকর্ড করতে একটি লগইন লিখতে এবং লগ ফাইল লিখতে সম্ভব হবে। আমি তার সাথে আমার সময় নষ্ট না করা পছন্দ করব।

উদাহরণস্বরূপ নীচের স্টাডাউটের মতো কিছু (নোট করুন যে আমি জবাবদিহি করছি এবং উত্তর-প্লেবুক নয়):

$ ansible plabb54 -i /project/plab/svn/plab-maintenance/ansible/plab_hosts.txt -m script -a ./test.sh
plabb54 | success >> {
    "rc": 0,
    "stderr": "",
    "stdout": "Hello World\n"
}

$

উত্তর:


115

আপনি যদি -vকমান্ড লাইনের উত্তর-প্লেবুকটিতে পতাকাটি পাস করেন তবে আপনি প্রতিটি কার্য সম্পাদনের জন্য স্টাডআউট এবং স্টাডার দেখবেন:

$ ansible-playbook -v playbook.yaml

জবাবদিহি লগিং জন্য অন্তর্নির্মিত সমর্থন আছে। আপনার উত্তরসূচক কনফিগারেশন ফাইলে নিম্নলিখিত লাইনগুলি যুক্ত করুন :

[defaults] 
log_path=/path/to/logfile

উত্তরটি কনফিগার ফাইলের জন্য বেশ কয়েকটি স্থানে সন্ধান করবে:

  • ansible.cfg আপনি যে দৌড়েছিলেন সেই বর্তমান ডিরেক্টরিতে ansible-playbook
  • ~/.ansible.cfg
  • /etc/ansible/ansible.cfg

8
ধন্যবাদ কেবল লোভী: আমি কি কোনও প্লেবুক থেকে গতিশীলভাবে লগিং শুরু / বন্ধ করতে পারি? লাইক set -xএবং set +xশেল স্ক্রিপ্টে।
কাশ্যপ

@ থেককাশ্যপ আমি বর্তমানে এটি সম্ভব বলে মনে করি না।
লরিন হচস্টেইন

9
no_log: Trueকমান্ড বা প্লেবুকটিকে লগিং করা থেকে বিরত রাখতে আপনি পতাকাটি ব্যবহার করতে পারেন তবে এটি আমার বিশ্বাসের মতোই জরিমানা ined
অ্যাডে মিলার

4
আপনি দয়া করে বর্ণনা logrotateকরতে log_pathপারেন যে আমি কীভাবে রাখি যাতে প্রতিটি ansibleরানের একটি আলাদা ফাইল থাকে (ফাইলটিতে অন্তর্ভুক্ত কমান্ড / প্লেবুক থাকে)?
স্টাইলফোম ফ্লাই 19

vস্টাডআউট এবং স্টাডার পেতে আমার তিনজনের দরকার
সমৃদ্ধ

24

প্লেবুক স্ক্রিপ্ট টাস্কটি stdoutনন-প্লেবুক কমান্ডের মতোই উত্পন্ন হবে , এটি ব্যবহার করে কেবল একটি ভেরিয়েবলে সংরক্ষণ করা দরকার register। একবার আমরা এটি পেয়ে গেলে, ডিবাগ মডিউলটি প্লেবুকের আউটপুট স্ট্রিমে মুদ্রণ করতে পারে।

tasks:
- name: Hello yourself
  script: test.sh
  register: hello

- name: Debug hello
  debug: var=hello

- name: Debug hello.stdout as part of a string
  debug: "msg=The script's stdout was `{{ hello.stdout }}`."

আউটপুটটি দেখতে এরকম কিছু দেখা উচিত:

TASK: [Hello yourself] ******************************************************** 
changed: [MyTestHost]

TASK: [Debug hello] *********************************************************** 
ok: [MyTestHost] => {
    "hello": {
        "changed": true, 
        "invocation": {
            "module_args": "test.sh", 
            "module_name": "script"
        }, 
        "rc": 0, 
        "stderr": "", 
        "stdout": "Hello World\r\n", 
        "stdout_lines": [
            "Hello World"
        ]
    }
}

TASK: [Debug hello.stdout as part of a string] ******************************** 
ok: [MyTestHost] => {
    "msg": "The script's stdout was `Hello World\r\n`."
}

তবে হ্যালো নিজেই কোনও কাজই কোনও স্টডআউট দেয়নি
সৌরভ চন্দ্র প্যাটেল

এটি আমার পছন্দের পদ্ধতি। ডিবাগ স্টেটমেন্টগুলিতে নিবন্ধিত ভেরিয়েবলের মানগুলি ব্যবহার করতে ভাল হন এবং বিশ্বটি আপনার ঝিনুক।
জোশুয়া কে

16

লগ ফাইল উত্পন্ন করার অন্যান্য উপায়ও রয়েছে।

ansible-playbookচালানোর আগে লগিং সক্ষম করতে নিম্নলিখিত কমান্ডগুলি চালান:

  • লগ ফাইলের জন্য অবস্থান নির্দিষ্ট করুন।

    ANSIBLE_LOG_PATH = ~ / উত্তরযোগ্য.লগ রফতানি করুন

  • ডিবাগ সক্ষম করুন

    রফতানি করুন ANSIBLE_DEBUG = সত্য

  • যে উত্পন্ন লগ ফাইল চেক করতে।

    কম $ ANSIBLE_LOG_PATH


4
ANSIBLE_DEBUG কোনও লগ ফাইল নির্দিষ্ট করে দেওয়ার থেকে পৃথক। এটি ভার্বোসিটি নির্বাচনের থেকে পৃথক! কল করা এখনও এটি খুব ভাল - ডিবাগ একেবারে চূড়ান্ত ভার্বোসিটি স্তরে আপনাকে বিকাশকারী-ভিত্তিক ডিবাগ বার্তা দেয়। কাছাকাছি থাকতে ভাল।
অ্যালানএসই

4

অফলিক্যাল প্লাগইন

আপনি আউটপুট কলব্যাক প্লাগইন ব্যবহার করতে পারেন । উদাহরণস্বরূপ, উত্তরযোগ্য ২.৪ থেকে শুরু করে, আপনি ডিবাগ আউটপুট কলব্যাক প্লাগইন ব্যবহার করতে পারেন :

# In ansible.cfg:
[defaults]
stdout_callback = debug

(পরিবর্তনমূলকভাবে, export ANSIBLE_STDOUT_CALLBACK=debugআপনার প্লেবুক চালানোর আগে চালনা করুন)

গুরুত্বপূর্ণ: প্রভাবটি দেখতে আপনাকে অবশ্যই ( ) বিকল্পটি ansible-playbookদিয়ে চলতে হবে । সঙ্গে সেট, আউটপুট এখন ভালো কিছু হওয়া উচিত:-v--verbosestdout_callback = debug

TASK [Say Hello] ********************************
changed: [192.168.1.2] => {
    "changed": true,
    "rc": 0
}

STDOUT:


Hello!



STDERR:

Shared connection to 192.168.1.2 closed.

debugআপনি যদি আউটপুটটিকে অন্যরকমভাবে ফর্ম্যাট করতে চান তবে মডিউল ছাড়াও অন্যান্য মডিউল রয়েছে । আছে json, yaml, unixy, dense, minimal, ইত্যাদি ( সম্পূর্ণ তালিকা )।

উদাহরণস্বরূপ, এর সাথে stdout_callback = yamlআউটপুটটি এরকম কিছু দেখবে:

TASK [Say Hello] **********************************
changed: [192.168.1.2] => changed=true 
  rc: 0
  stderr: |-
    Shared connection to 192.168.1.2 closed.
  stderr_lines:
  - Shared connection to 192.168.1.2 closed.
  stdout: |2-

    Hello!
  stdout_lines: <omitted>

তৃতীয় পক্ষের প্লাগইন

যদি অফিশিয়াল প্লাগইনগুলির কোনওটি সন্তোষজনক না হয় তবে আপনি human_logপ্লাগইনটি চেষ্টা করতে পারেন । কয়েকটি সংস্করণ রয়েছে:


3

কলব্যাক প্লাগইনগুলি ব্যবহার করে, আপনার কমান্ড আউটপুটটির পঠনযোগ্য ফর্মটিতে প্লে : গিস্ট: হিউম্যান_লগ.পি

উদাহরণস্বরূপ আউটপুট জন্য সম্পাদনা করুন:

 _____________________________________
< TASK: common | install apt packages >
 -------------------------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||


changed: [10.76.71.167] => (item=htop,vim-tiny,curl,git,unzip,update-motd,ssh-askpass,gcc,python-dev,libxml2,libxml2-dev,libxslt-dev,python-lxml,python-pip)

stdout:
Reading package lists...
Building dependency tree...
Reading state information...
libxslt1-dev is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 24 not upgraded.


stderr:

start:
2015-03-27 17:12:22.132237

end:
2015-03-27 17:12:22.136859

1

উত্তরসূচক কমান্ড-লাইন সহায়তা, যেমন ansible-playbook --helpভার্বোস মোড (-v) কে আরও ভার্বোসিটি (-vvv) এ সেট করে বা ডিবাগিং ভার্বোসিটি (-vvvv) সংযুক্ত করে আউটপুট ভার্বোসিটি বাড়াতে হয় তা দেখায়। এটি আপনাকে স্টডআউটে যাওয়ার পরে এমন কিছু বিবরণ দেয় যা আপনি লগ ইন করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.