উত্তরযোগ্য: প্লেবুক খেলতে গিয়ে ডিটগ হিসাবে নয়, "ক্যাট ফাইল" করা এবং আউটপুটটি স্ক্রিনে রফতানি করা সম্ভব?


22

আমি একটি প্লেবুক লিখেছি যা প্রতি ব্যবহারকারীকে গুগল প্রমাণীকরণকারী ইনস্টল ও কনফিগার করে।

আমি catপ্লেবুকের শেষ ধাপটি google_authenticator কনফিগারেশন ফাইলটিতে চাই।

"ডিবাগ" মডিউলটি ব্যবহার করে আমি স্ক্রিনে ডেটা প্রদর্শিত হতে সক্ষম হচ্ছি তবে কেবল ডিবাগ বার্তা হিসাবে:

TASK: [debug var=details.stdout_lines] ****************************************
ok: [localhost] => {
    "details.stdout_lines": [
        "ZKMFTE2ADYA2OYCH",
        "\"RATE_LIMIT 3 30",
        "\" DISALLOW_REUSE",
        "\" TOTP_AUTH",
        "12920994",
        "88224784",
        "69464205",
        "38144121",
        "45634120"
    ]
}

আমি অনলাইনে পড়েছি যে আমি এরকম কিছু করতে পারি:

  - name: Print to screen google authenticator details
    command: /bin/cat {{ google_authenticator_secret_file_location }}
    register: details
    tags: google_2fa_user

  - debug: msg="{{ details.stdout_lines }}"

আমি চালানোর সময় আমি একটি ত্রুটি পেয়েছি:

TASK: [Print to screen google authenticator details] **************************
changed: [localhost]

TASK: [debug msg="{{details.stdout_lines}}"] **********************************
fatal: [localhost] => Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/ansible/runner/__init__.py", line 532, in _executor
    exec_rc = self._executor_internal(host, new_stdin)
  File "/usr/lib/python2.7/dist-packages/ansible/runner/__init__.py", line 629, in _executor_internal
    return self._executor_internal_inner(host, self.module_name, self.module_args, inject, port, complex_args=complex_args)
  File "/usr/lib/python2.7/dist-packages/ansible/runner/__init__.py", line 815, in _executor_internal_inner
    result = handler.run(conn, tmp, module_name, module_args, inject, complex_args)
  File "/usr/lib/python2.7/dist-packages/ansible/runner/action_plugins/debug.py", line 41, in run
    kv = utils.parse_kv(module_args)
  File "/usr/lib/python2.7/dist-packages/ansible/utils/__init__.py", line 526, in parse_kv
    vargs = [x.decode('utf-8') for x in shlex.split(args, posix=True)]
  File "/usr/lib/python2.7/shlex.py", line 279, in split
    return list(lex)
  File "/usr/lib/python2.7/shlex.py", line 269, in next
    token = self.get_token()
  File "/usr/lib/python2.7/shlex.py", line 96, in get_token
    raw = self.read_token()
  File "/usr/lib/python2.7/shlex.py", line 172, in read_token
    raise ValueError, "No closing quotation"
ValueError: No closing quotation


FATAL: all hosts have already failed -- aborting

PLAY RECAP ********************************************************************

ত্রুটিটি বলে: "এটি বন্ধ করা কোটেশন নেই" যদিও এটি উদ্ধৃত হয়েছে। চেষ্টাও করেছেন:

 - debug: msg= "{{ details.stdout_lines }}"

কোন ধারণা কি সমস্যা হতে পারে?

উত্তর:


3

উদ্ধৃতি Jinja ফিল্টার উদ্ধৃত সমস্যা সমাধানের করা উচিত নয়। এটি এর মতো ব্যবহার করুন:

  - debug: msg="{{ details.stdout_lines | quote }}"

অন্য প্রশ্নের জন্য, আমি মডিউলটি ছাড়া অন্য বিবৃতিগুলি মুদ্রণের জন্য কোনও মডিউল সম্পর্কে অবগত নই debug। আপনি যাচাই করতে পারেন ফাইলটিতে রেজিস্টার্ড ভেরিয়েবল কোনও বিকল্প কিনা is আপনি যদি নিয়ামক হোস্টে উত্তরযোগ্য ভেরিয়েবলগুলি সঞ্চয় করতে চান তবে এরকম কিছু করা সম্ভব:

- local_action: copy content={{ details.stdout_lines }} dest=/path/to/destination/file

সম্পাদনা করুন আমার নিজেকে কিছুটা সংশোধন করা দরকার। কটাক্ষপাত এই serverfault প্রশ্ন । আপনি callback.displayফাংশনটি ব্যবহার করে উত্তরীয় আউটপুটটিকে টুইঙ্ক করতে পারেন । আমি লিঙ্কযুক্ত ব্লগ পোস্ট পড়ার পরামর্শ দিচ্ছি ।


1

আমি বাজি ধরব যে সমস্যাটি আপনি যে ফাইলটি ক্যাট করছেন সেটির উদ্ধৃতিগুলি মেলে না এবং এই চিত্রের উদ্ধৃতিগুলির সাথে বিশৃঙ্খলা হয়। হয়তো চেষ্টা করুন:

- ডিবাগ: msg = "{{বিশদ। স্টডআউট_লাইনস | রিজেক্স_স্কেপ ()}"

অথবা

- ডিবাগ: msg = "{{Details.stdout_lines | regex_replace ('"', '\ "')}"

এটিকে এইপি-এর উদ্ধৃতিগুলি এড়িয়ে যাওয়া উচিত যাতে এই চিত্রটির চারপাশের উদ্ধৃতিগুলি একে অপরের সাথে মেলে।

এটি পরীক্ষা করা হয়নি (আমি এখনই এটি পরীক্ষা করার মতো অবস্থানে নেই) তবে আপনি এটি বাস্তব চেষ্টা করে দেখতে পারেন।


দু'জনের চেষ্টা ... কাজ হয়নি।
Itai Ganot

হুঁ, আমি আমার উপরের পরামর্শ ছাড়াই এটি চালিয়েছি এবং শুরুতে আপনার একই রকম আউটপুট পেয়েছি। তবে এটি প্রদর্শিত হয় না আপনি উত্তরটি দেওয়ার জন্য নিজের লগ মডিউলটি না লিখে, বা শেল বা পার্ল স্ক্রিপ্ট বা কোনও কিছুর কাছে পাইপিং না করেই আপনি এটি ডিবাগ ব্যতীত অন্য কোনও ফর্ম্যাটে পেতে পারেন। এই লিঙ্কটি একটি ভাল উত্তর ছিল stackoverflow.com/questions/28564811/...
এলএসডি

1

আমি ইন্টারনেটে গভীরভাবে তাকিয়েছি এবং কিছু উত্তরযোগ্য পেশাদারের সাথে চেক করেছি।

আমি যতদূর বুঝতে পেরেছি, উত্তরযোগ্য 1.8 তে কোনও বিকল্প নেই যা কমান্ডের আউটপুটটিকে স্ক্রিনে ডিবাগ আউটপুট না করে সাধারণ আউটপুট হিসাবে পুনঃনির্দেশ করতে পারে।


2
উত্তরযোগ্য ২.২ হিসাবে এখনও ডিবাগ ব্যবহার করা ছাড়া অন্য স্ক্রিনে মুদ্রণের কোনও বিকল্প নেই।
Itai Ganot

0

আপনার উপরের পাঠ্যের ব্লকটিতে আমি কয়েকটি পরীক্ষা চালিয়েছি - এটি এটিকে ফেলে দেওয়া হয়েছে এবং বিবরণ.stdout_lines ব্যবহার করে যোগ করা জসন উদ্ধৃতিগুলি সাফ করে দিয়েছি।

যদি আপনার লেখক ফাইলের 'খারাপ' পাঠ্যটি সর্বদা অগ্রণী হয় \", তবে এই (পরীক্ষিত) কাজটি ঠিক একই রকম আউটপুট তৈরি করে তবে এই স্ট্রিংয়ের জায়গায় একটি কোলন দিয়েই ঘটে।

- debug: msg="{{ details.stdout.replace('\\"',':').split('\n') }}"

এখন এটি অত্যন্ত সীমিত ব্যবহারের ক্ষেত্রে, তবে যদি গুগল এইথ আউটপুটটিকে এখানে কঠোরভাবে সংজ্ঞায়িত করা হয় (এবং এটি সম্পূর্ণরূপে সম্ভব তবে কেস) তবে এটি আপনার যা করতে চান তা করা উচিত।

তবে, var=details.stdout_linesকেবল এখানে সামগ্রীগুলি পেতে এটি ব্যবহার করা আরও সহজ এবং ভাল ।

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