Ansible - ตัวแปร
ตัวแปรใน playbooks คือ very similarเพื่อใช้ตัวแปรในภาษาโปรแกรมใด ๆ ช่วยให้คุณใช้และกำหนดค่าให้กับตัวแปรและใช้ที่ใดก็ได้ใน playbook เราสามารถวางเงื่อนไขรอบ ๆ ค่าของตัวแปรและใช้ตามนั้นใน playbook
ตัวอย่าง
- hosts : <your hosts>
vars:
tomcat_port : 8080
ในตัวอย่างข้างต้นเราได้กำหนดชื่อตัวแปร tomcat_port และกำหนดค่า 8080 ให้กับตัวแปรนั้นและสามารถใช้ค่านั้นใน playbook ของคุณได้ทุกที่ที่ต้องการ
ตอนนี้กำลังอ้างอิงจากตัวอย่างที่แชร์ รหัสต่อไปนี้มาจากหนึ่งในบทบาท (install-tomcat) -
block:
- name: Install Tomcat artifacts
action: >
yum name = "demo-tomcat-1" state = present
register: Output
always:
- debug:
msg:
- "Install Tomcat artifacts task ended with message: {{Output}}"
- "Installed Tomcat artifacts - {{Output.changed}}"
ที่นี่ผลลัพธ์คือตัวแปรที่ใช้
ให้เราดูคำหลักทั้งหมดที่ใช้ในโค้ดด้านบน -
block - ไวยากรณ์ Ansible เพื่อดำเนินการบล็อกที่กำหนด
name - ชื่อที่เกี่ยวข้องของบล็อก - ใช้ในการบันทึกและช่วยในการดีบักซึ่งบล็อกทั้งหมดถูกดำเนินการสำเร็จ
action- โค้ดที่อยู่ถัดจากแท็กการดำเนินการคืองานที่ต้องดำเนินการ การดำเนินการอีกครั้งคือคีย์เวิร์ด Ansible ที่ใช้ใน yaml
register - ผลลัพธ์ของการกระทำถูกลงทะเบียนโดยใช้คีย์เวิร์ด register และ Output คือชื่อตัวแปรที่เก็บผลลัพธ์ของการกระทำ
always - อีกครั้งคำหลัก Ansible ระบุว่าด้านล่างจะถูกดำเนินการเสมอ
msg - แสดงข้อความ
การใช้ตัวแปร - {{Output}}
สิ่งนี้จะอ่านค่าของผลลัพธ์ตัวแปร เช่นเดียวกับที่ใช้ในแท็บ msg มันจะพิมพ์ค่าของตัวแปรเอาต์พุต
นอกจากนี้คุณสามารถใช้คุณสมบัติย่อยของตัวแปรได้เช่นกัน เช่นเดียวกับในกรณีตรวจสอบ {{Output.changed}} ว่าเอาต์พุตมีการเปลี่ยนแปลงหรือไม่และใช้ตามนั้น
การจัดการข้อยกเว้นใน Playbooks
การจัดการข้อยกเว้นใน Ansible คล้ายกับการจัดการข้อยกเว้นในภาษาโปรแกรมใด ๆ ตัวอย่างของการจัดการข้อยกเว้นใน playbook แสดงไว้ด้านล่าง
tasks:
- name: Name of the task to be executed
block:
- debug: msg = 'Just a debug message , relevant for logging'
- command: <the command to execute>
rescue:
- debug: msg = 'There was an exception.. '
- command: <Rescue mechanism for the above exception occurred)
always:
- debug: msg = "this will execute in all scenarios. Always will get logged"
ต่อไปนี้เป็นไวยากรณ์สำหรับการจัดการข้อยกเว้น
rescue และ always เป็นคำหลักเฉพาะสำหรับการจัดการข้อยกเว้น
บล็อกคือที่ที่เขียนโค้ด (สิ่งที่ต้องดำเนินการบนเครื่อง Unix)
หากคำสั่งที่เขียนภายในคุณลักษณะบล็อกล้มเหลวการดำเนินการจะไปถึงบล็อกช่วยเหลือและจะถูกดำเนินการ ในกรณีที่ไม่มีข้อผิดพลาดในคำสั่งภายใต้คุณสมบัติบล็อกการช่วยเหลือจะไม่ถูกดำเนินการ
Always ถูกดำเนินการในทุกกรณี
ดังนั้นถ้าเราเปรียบเทียบสิ่งเดียวกันกับ java มันก็คล้ายกับ try, catch และสุดท้ายบล็อก
ที่นี่ Block เหมือนกับ try block ที่คุณเขียนโค้ดที่จะเรียกใช้งานและ rescue เหมือนกับ catch block และ always เหมือนกับ finally.
ลูป
ด้านล่างนี้คือตัวอย่างเพื่อสาธิตการใช้งานลูปใน Ansible
ภารกิจคือการคัดลอกชุดของไฟล์ war ทั้งหมดจากไดเร็กทอรีหนึ่งไปยังโฟลเดอร์ tomcat webapps
คำสั่งส่วนใหญ่ที่ใช้ในตัวอย่างด้านล่างจะครอบคลุมอยู่แล้ว ที่นี่เราจะมุ่งเน้นไปที่การใช้ลูป
เริ่มแรกในคำสั่ง 'เชลล์' เราได้ทำ ls * .war ดังนั้นมันจะแสดงรายการไฟล์สงครามทั้งหมดในไดเรกทอรี
เอาต์พุตของคำสั่งนั้นถูกนำมาใช้ในตัวแปรชื่อเอาต์พุต
ในการวนซ้ำจะมีการใช้ไวยากรณ์ "with_items"
with_items: "{{output.stdout_lines}}" -> output.stdout_lines ทำให้เรามีเอาต์พุตทีละบรรทัดจากนั้นเราวนซ้ำที่เอาต์พุตด้วยคำสั่ง with_items ของ Ansible
การแนบเอาต์พุตตัวอย่างเพียงเพื่อให้เข้าใจว่าเราใช้ stdout_lines ในคำสั่ง with_items อย่างไร
---
#Tsting
- hosts: tomcat-node
tasks:
- name: Install Apache
shell: "ls *.war"
register: output
args:
chdir: /opt/ansible/tomcat/demo/webapps
- file:
src: '/opt/ansible/tomcat/demo/webapps/{{ item }}'
dest: '/users/demo/vivek/{{ item }}'
state: link
with_items: "{{output.stdout_lines}}"
บล็อก
Playbook ในจำนวนทั้งหมดถูกแบ่งออกเป็นบล็อก ขั้นตอนที่เล็กที่สุดในการดำเนินการจะถูกเขียนในบล็อก การเขียนคำสั่งเฉพาะในบล็อกช่วยในการแยกฟังก์ชันการทำงานและจัดการกับการจัดการข้อยกเว้นหากจำเป็น
ตัวอย่างของบล็อกครอบคลุมในการใช้งานตัวแปรการจัดการข้อยกเว้นและลูปด้านบน
เงื่อนไข
Conditionals ถูกใช้เมื่อต้องการรันขั้นตอนเฉพาะตามเงื่อนไข
---
#Tsting
- hosts: all
vars:
test1: "Hello Vivek"
tasks:
- name: Testing Ansible variable
debug:
msg: "Equals"
when: test1 == "Hello Vivek"
ในกรณีนี้ Equals จะถูกพิมพ์ออกมาเนื่องจากตัวแปร test1 มีค่าเท่ากันตามที่กล่าวไว้ในเงื่อนไขเมื่อ when สามารถใช้กับตรรกะหรือเงื่อนไขและตรรกะเช่นเดียวกับภาษาโปรแกรมทั้งหมด
เพียงแค่เปลี่ยนค่าของตัวแปร test1 จาก Hello Vivek เป็น Hello World และดูผลลัพธ์