標題寫的很清楚啦,
今天就寫一個 hello world 的 playbook,
作為部署我們應用程式的暖身

  • adhoc 寫一個 Python FastAPI 範例 + Dockerfile
  • 用 Ansible 遠端部署 <- 現在在這裡
  • 用 Ansible AWX 自動部署
  • 當初剛學的時候,
    糾結 Ansible 的 directory 架構長怎樣,
    糾結非常久,
    糾結的點是那些參數 a.k.a vars,
    到底是怎麼在 playbook 間傳遞的?
    沒有顯式的寫 import,
    到底是怎麼引用的?
    非常困擾…
    老是覺得網路上教學都沒有把這種最簡單的事情交待一下 T^T

    後來我參考 官網的 layout 終於學會了,
    總之看到這篇的你,
    如果也糾結 playbook 不知道該怎麼組織才是最優解,
    先照著做就對了

    ├── ansible.cfg ├── inventory ├── main.yml └── roles └── hello_world ├── tasks │   └── main.yml └── vars └── main.yml

    稍微解釋一下,
    ansible.cfg 就是寫關於這包 ansible 的 config,
    長得像這樣

    [defaults]
    inventory = ./inventory
    roles_path = ./roles
    host_key_checking = False
    

    host_key_checking 應該要開 True
    但為了防呆,
    萬一卡在有些機器沒有先 ssh 過,
    接受 remote host key,
    這樣 playbook 就會卡住,
    正常來說,
    比較妥當的方法還是全部機器手動用 ssh retrieve 過一遍

    再來是 inventory
    這邊要記得 ansible_ prefix 的這些變數,
    要 align 你 ~/.ssh/config 的設定,
    你的 inventory 有兩種寫法 yaml 或是 ini,
    先示範 yaml 格式

    hosts: staging: ansible_host: ubuntu-staging-env ansible_user: ubuntu ansible_ssh_private_key_file: ~/.ssh/my_private_key

    要切記: 後面是有一個半形空格的,可以用一些 linting 的 tool 來檢查

    再來示範 ini 格式

    [all]
    staging ansible_host=ubuntu-staging-env ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/my_private_key
    

    不知道你各位喜歡哪一種,
    我一開始是 ini 派,後來變成 yaml 派,
    也沒什麼特別原因,
    可能 yaml 用習慣了,排版比較舒服,
    對照一下我們的 ~/.ssh/config 應該長怎樣

    Host ubuntu-staging-env
            Hostname xx.xx.xx.xx
            User ubuntu
            IdentityFile ~/.ssh/my_private_key
    

    最後我們測試一下 ssh 和 inventory 這些是否正常

    ansible -m ping all
    

    今天先這樣,結果又沒來得及寫完預期進度 orz...