フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

gcp_computeを使ったinventoryで動的にグループを作る

f:id:lirlia:20211001231533p:plain

gcp_compute を使ってAnsibleのグループを作成するTipsを載せておきます。

GCEの操作

GCEにラベルを付与する(コンソールでもコマンドでも)

  • ansible = true
  • env = development or env = stg or env = production

ラベルはなんでもよいし、値もなんでも良いので好きに設定してください。

inventory/gcp.yaml

plugin: gcp_compute
projects:
  - xxx
filters:
  - labels.ansible = "true"
auth_kind: application
keyed_groups:
  # Create groups from GCE labels
  - key: labels
hostnames:
  # List host by name instead of the default public ip
  - name

先ほどつけたラベルでフィルタリングしたければしてください。(フィルタリングはマストではないです)

コマンド実行

ansible-inventory --graph -i inventory/gcp.yaml
@all:
  |--@_ansible_true:
  |  |--server1
  |  |--server2
  |  |--server3
  |--@_env_stg:
  |  |--server2
  |--@_env_development:
  |  |--server3
  |--@_env_production:
  |  |--server1
  |--@ungrouped:

上記のように勝手にグループが分けられ、Ansibleで操作できるのが以下のグループ。

  • all
  • _ansible_true
  • _env_stg
  • _env_development
  • _env_production

あとはこれを使うだけ!

  • ansible-playbook -l _env_stg にして限定して実行するとか
  • group_vars/_ansible_true.yaml を作って変数を定義するとか