2020/08/19

初探 ansible

ansible 是一個基於 python 的工具,在 CI/CD 的世界挺受歡迎,可以做的事情很多,網路上很多 ansible 教學了,我這邊筆記一下一些比較常用的東西

deploy.yml
- hosts: localhost
  vars:
    NAME: chan

  tasks:
  - name: echo name
    command: "echo {{ NAME }}"
  
  - name: echo age from outside
    command: "echo {{ AGE }}"
    
  - name: echo name from env
    command: "echo {{ lookup('env', 'LBJ') }}"

這是一個最基礎的 ansible playbook 架構,只要把命令寫好,ansible 就會照 task name 一個一個執行,上面我的範例第一個是 echo 本地設定的 NAME,第二個 AGE 會從外部導入,第三個 LBJ 是抓取環境變數,因此要正確執行的話要這樣下

$ export LBJ=GOAT
$ ansible-playbook deploy.yml -e "AGE=40" -v

執行後可以依序看到 NAMEAGELBJ 的變數結果相繼印出,基本上架構瞭解,做的事情只是從 tasks 去變化,搭配 ansible 本身強大的 modules 可以幾乎沒有事情辦不到,也可以使用 role 來做群組管理,但如果想要簡單部署,接下來示範如何把上面的工作打散

/a.yml
- hosts: localhost
  vars:
    TARGET: a
  vars_files:
    - ./vars/var.yml

  tasks:
    - include_tasks: ./tasks/deploy.yml

    - name: echo self stuff
      command: "echo this is {{ TARGET }}"
/vars/var.yml
NAME: chan
/tasks/deploy.yml
- name: echo name
  command: "echo {{ NAME }}"

- name: echo age from outside
  command: "echo {{ AGE }}"

這樣的設定,如果要生另一個類似的流程只要複製 a.yml 改一下內容即可。