Ansible Playbook แบบง่ายๆ


  • Ansible Playbook Structure Basic
- playbook.yml //จะเป็น file หลักที่จะมีการ สร้าง droplet หรือ จัดการ resource ต่างๆ
- variables.json // ที่ๆ เราประกาศตัวแปร ไว้ใช้ ใน main.tf 
- inventory // ตามชื่อเลย อารมณ์ประมาณเป็นคลัง เก็บ config ต่างๆ เช่น host ,server ,group ,...
  • ใน inventory
[dev]
server ansible_host=192.xxx
[prod]
server ansible_host=xxx

โดยที่ [dev] ,[prod] เป็นการประกาศ ตัวแปร สำหรับ ระบุใน playbook เช่นว่า ถ้าเลือก host: [dev] เป็นอะไร ก็จะเอาของ server ที่อยู่ ภายใต้ตัวแปร dev ก็คือ server ansible_host=192.xxx

โดย สามารถเขียน inventory เป็น แบบ ไฟล์ yaml ได้เช่นกัน

  • ใน variables.json

ในนี้จะเป็นการ ประกาศ config ที่สำคัญจำพวก ข้อมูลภายใน server ที่ทำจะทำการเข้าไป ติดตั้ง แบบไม่ผูกติดกับ ไฟล์ playbook.yml ( ใน playbook.yml จะเป็นการประกาศตัวแปรตั้งไว้ ลอยๆแล้วรับค่าตัวแปรจาก variables.json นี้แหละ )

{    
    "container_name": "<docker_name>",    
    "container_image": "<docker_images>",    
    "container_images_port" : "<port_default ใน images นั้นๆ>",    
    "container_port" : "<port ที่จะให้แสดงออกมา>"
}
  • ใน playbook.yml
- hosts: dev  
  become: true  
  vars_files: # จะเป็นการนำตัวแปรที่ใส่ค่าไว้มาใช้    
  - variables.json   
  tasks:    
  - name: Pull default Docker image      
  docker_image:        
  name: "{{container_image}}"        
  source: pull    
  - name: Create default containers      
  docker_container:        
  name: "{{container_name}}"        
  image: "{{container_image}}"        
  state: started        
  recreate: yes        
  ports: "{{ container__port }}:{{ container_images_port }}"
  • How to Run
$ ansible-playbook playbook.yml \
  -i inventory \
  --private-key app.key 

ที่เพิ่มเติมมาก็คือ –private-key app.key ก็คือ private key ที่จะเข้าไปยัง server ปลายทาง

  • ( ก่อนจะอื่น จะต้อง ทำการ ssh-copy-id เพื่อให้เราสามารถ เข้า server ปลายทางได้ง่าย ไม่ต้องถาม password )
$ ssh-keygen
$ ssh-copy-id -i <public_key ที่ได้> <user>@<ip ปลายทาง>

แล้ว เก็บ private key ไว้เข้าไป