ฉันยังใหม่กับ 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