ฉันยังใหม่กับ ansible และสงสัยว่าจะทำอย่างไรต่อไปนี้ใช้งานไม่ได้
ansible-playbook -i '10.0.0.1,' yada-yada.yml --tags 'loaddata' django_fixtures="tile_colors"
django_fixturesตัวแปรของฉันอยู่ที่ไหน
ฉันยังใหม่กับ ansible และสงสัยว่าจะทำอย่างไรต่อไปนี้ใช้งานไม่ได้
ansible-playbook -i '10.0.0.1,' yada-yada.yml --tags 'loaddata' django_fixtures="tile_colors"
django_fixturesตัวแปรของฉันอยู่ที่ไหน
คำตอบ:
อ่านเอกสารฉันพบส่วนการส่งตัวแปรในบรรทัดคำสั่งที่ให้ตัวอย่างนี้:
ansible-playbook release.yml --extra-vars "version=1.23.45 other_variable=foo"
ตัวอย่างอื่นแสดงวิธีโหลดจากสตริงJSON (≥ 1.2) หรือไฟล์ (≥ 1.3)
key=valueไวยากรณ์จะถูกตีความว่าเป็นสตริง ใช้รูปแบบ JSON หากคุณต้องการส่งต่อสิ่งใดก็ตามที่ไม่ควรเป็นสตริง (Booleans, จำนวนเต็ม, จำนวนลอย, รายการ ฯลฯ ) ตัวอย่างเช่น:--extra-vars '{"i_wasted_30_mins_debugging_a_boolean_string":true}'
                    คำตอบอื่น ๆ ระบุวิธีส่งผ่านตัวแปรบรรทัดคำสั่ง แต่ไม่สามารถเข้าถึงได้ดังนั้นหากคุณ:
--extra-vars "version=1.23.45 other_variable=foo"
ในไฟล์ yml ของคุณคุณกำหนดสิ่งเหล่านี้ให้กับตัวแปร ansible ที่กำหนดขอบเขตโดยทำสิ่งต่อไปนี้:
vars:
    my_version: "{{ version }}"
    my_other_variable: {{ other_variable }}
อีกทางเลือกหนึ่งในการใช้บรรทัดคำสั่ง args คือการใช้ตัวแปรสภาพแวดล้อมที่กำหนดไว้แล้วในเซสชันของคุณคุณสามารถอ้างอิงสิ่งเหล่านี้ในไฟล์ yml ที่ไม่สามารถใช้งานได้ดังนี้:
vars:
    my_version: "{{ lookup('env', 'version') }}"
    my_other_variable: {{ lookup('env', 'other_variable') }}
              lookup('env', SOMETHING)ตรงกับ 12 ปัจจัย
                    version: {{ version }}ผิดเช่นกำหนดversionตัวเอง
                    ansible-playbook release.yml -e "version=1.23.45 other_variable=foo"
              -eธงเป็นรูปแบบสั้น--extra-vars
                    --extra-vars "@some_file.json"
                    --extra-varsตั้งค่าสถานะที่สองเพื่อส่งผ่านตัวแปรที่ไม่ได้อยู่ในไฟล์ ตัวอย่างเช่น--extra-vars "@some_file.json" --extra-vars "other_variable=foo"
                    คุณสามารถใช้--extra-varsตัวเลือก  ดูเอกสาร
ด้วยเหตุผลบางอย่างคำตอบข้างต้นไม่ได้ผลสำหรับฉัน เนื่องจากฉันต้องส่ง vars พิเศษหลายอันไปยัง playbook ของฉันใน Ansbile 2.2.0 นี่คือวิธีที่ฉันใช้งานได้ (หมายเหตุตัวเลือก -e ก่อนแต่ละ var):
ansible-playbook site.yaml -i hostinv -e firstvar=false -e second_var=value2
              -eเป็นรูปแบบย่อของ--extra-vars
                    -eธงของตัวเอง
                    -e "firstvar=false second_var=value2"
                    ansible-playbook test.yml --extra-vars "arg1=${var1} arg2=${var2}"
ในไฟล์ yml คุณสามารถใช้พวกเขาเช่นนี้
---
arg1: "{{ var1 }}"
arg2: "{{ var2 }}"
นอกจากนี้--extra-varsและ-eเหมือนกันคุณสามารถใช้หนึ่งในนั้น
 s3_sync:
      bucket: ansible-harshika
      file_root: "{{ pathoftsfiles  }}"
      validate_certs: false 
      mode: push
      key_prefix: "{{ folder }}"
นี่คือตัวแปรที่ใช้ชื่อ 'pathoftsfiles' และ 'folder' ตอนนี้ค่าของตัวแปรนี้สามารถกำหนดได้โดยคำสั่งด้านล่าง
sudo ansible-playbook multiadd.yml --extra-vars "pathoftsfiles=/opt/lampp/htdocs/video/uploads/tsfiles/$2 folder=nitesh"
หมายเหตุ: อย่าใช้เครื่องหมายจุลภาคคว่ำในขณะที่ส่งค่าไปยังตัวแปรในคำสั่งเชลล์
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}}"
              สิ่งนี้ใช้ได้สำหรับฉันเช่นกันหากคุณต้องการใช้ตัวแปรสภาพแวดล้อมของเชลล์:
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') }}"
ansible-playbok -i <inventory> <playbook-name> -e "proc_name=sshd"
คุณสามารถใช้คำสั่งด้านบนใน playbooks ด้านล่าง
---
- 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`
              
--extra-varsจะแทนที่ตัวแปรที่กำหนดไว้ใน playbook