জাসন প্রতিক্রিয়া কীভাবে উত্তর সহ ইউরি অনুরোধ থেকে পরীক্ষা করবেন?


15

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

- name: Get JSON from the Interwebs
  uri: url="http://whatever.com/jsonresponse" return_content=yes
  register: json_response

- name: Write nested JSON variable to disk
  copy: content={{json_response.json.nested1.nested2}} dest="/tmp/foo.txt"

নোট করুন যে ignore_errorsকেবল জিনজা টেমপ্লেটের মধ্যে নেস্টেড ডেটা স্ট্রাকচারের অনির্ধারিত মানগুলি পরীক্ষা করার জন্য নয়, কেবলমাত্র টাস্ক কমান্ড ব্যর্থতার জন্য কাজ করে । সুতরাং যদি json_response.json.nested1.nested2সংজ্ঞায়িত না হয় তবে এই কাজটি ignore_errors=yesসেট করা সত্ত্বেও ব্যর্থ হবে ।

/tmp/foo.txtঅনুরোধ ব্যর্থ হলে বা অনুরোধটির সঠিক নেস্টেড মানটি সংজ্ঞায়িত না করা থাকলে আমি কীভাবে কিছু ডিফল্ট মান সঞ্চয় করতে এই প্লেবুকটি পাব ?

উত্তর:


20

আপনাকে একটি জিনজা 2 ফিল্টার ব্যবহার করতে হবে ( http://docs.ansible.com/ansible/playbooks_filters.html )। এই ক্ষেত্রে, ফিল্টারটির নাম from_json । নিম্নলিখিত উদাহরণে আমি কীটি পাওয়া গেলে এবং যখন খুঁজে পাওয়া যায়নি তখন অন্য ক্রিয়াটি গ্রহণ করব:

 ---                                                                                                            

 - hosts: somehost                                                                                               
   sudo: yes                                                                                                    

   tasks:                                                                                                       

   - name: Get JSON from the Interwebs                                                                          
     uri: url="https://raw.githubusercontent.com/ljharb/node-json-file/master/package.json" return_content=yes  
     register: json_response                                                                                    

   - debug: msg="Error - undefined tag"                                                                         
     when: json_response["non_existent_tag"] is not defined                                                     

   - debug: msg="Success - tag defined =>{{  (json_response.content|from_json)['scripts']['test'] }}<="  
     when:  (json_response.content|from_json)['scripts']['test']  is defined    

পছন্দসই পদক্ষেপ গ্রহণের উপযুক্ত হওয়ার জন্য এখন ডিবাগ প্রতিস্থাপন করুন।

আশা করি এটা সাহায্য করবে,


3

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

uri: url="https://api.github.com/repos/.../.../releases/latest" return_contents=yes

register: github_json

এবং এটি অন্য কোথাও ব্যবহার করুন:

"{{ github_json.json.$key }}"

1
আমি নিশ্চিত নই যে এটি আসলে ওপিকে সহায়তা করে: আপনি আসলেই ব্যাখ্যা করেন না যে $ কীটি এসেছে, এবং মূলত প্রশ্নটি জিজ্ঞাসা করছে যে $keyপ্রতিক্রিয়াতে কোনও ক্ষেত্র না থাকলে কী ঘটে - যেমন জিনজার defaultফিল্টারটি কার্যকর হতে পারে।
iwaseatenbyagrue

1
প্রশ্নটি দেড় বছরেরও বেশি পুরানো হওয়ায় এটি ওপিতে সরাসরি প্রতিক্রিয়া ছিল না তবে আমি আশা করছিলাম যে এটি এমন লোকদের পক্ষে সহায়ক হতে পারে যেগুলি কেবলমাত্র জবাবযুক্ত ব্যবহার করে কোনও এপিআই থেকে জেএসওএন মান পেতে চায় যা আমি এইভাবেই হোঁচট খেয়েছি is পাতা।
স্যামি কেনেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.