Slide 1

Slide 1 text

AWXのプロジェクトを自動同期させたい 2020.06.23 @nnstt1 Ansible Night Tokyo 2020

Slide 2

Slide 2 text

自己紹介 --- - name : ののし - twitter : @nnstt1 - job : previous : SIer(アプリ寄り) current : 社内インフラ(主に Windows Server) - relationship_with_ansible : - 2019.8 Ansible と出会う - 社内で Ansible 推進 - Ansible ユーザー会 への物理参加が目標 - win_updates が好き Ansible Night Tokyo 2020 #ansiblejp 2

Slide 3

Slide 3 text

AWXを使っていて こんなことを思ったことは ありませんか?

Slide 4

Slide 4 text

とある 新規Playbook の追加で… Ansible Night Tokyo 2020 #ansiblejp 4 git push 新しく作った ぼくのかんがえたさいきょうの Playbook を Job Template で使おう YAML YAML saikyo-playbook.yml

Slide 5

Slide 5 text

出てこない!

Slide 6

Slide 6 text

プロジェクトの同期が必要だった Ansible Night Tokyo 2020 #ansiblejp 6 < Playbook追加の度にボタン押すの(‘A` )マンドクセ

Slide 7

Slide 7 text

1. git push 2. Job Template で Playbook 選択 3. Job Template 起動 理想の姿 7 Ansible Night Tokyo 2020 #ansiblejp 新Playbookを作ったら… この時点でプロジェクトは 同期済みであってほしい

Slide 8

Slide 8 text

検討した方法 8 Ansible Night Tokyo 2020 #ansiblejp • プロジェクト同期用 JT を Webhook で起動 • AWX の API でプロジェクト同期ジョブを起動

Slide 9

Slide 9 text

Webhook

Slide 10

Slide 10 text

JT は Webhook 経由で起動可能 Ansible Night Tokyo 2020 #ansiblejp 10 • Webhook で直接プロジェクト同期させることは不可能 • 同期用JT を用意 - 同期させたいプロジェクトを選択 - Playbook の中身は空っぽ(debug など)

Slide 11

Slide 11 text

JT 実行時にプロジェクトを更新 Ansible Night Tokyo 2020 #ansiblejp 11

Slide 12

Slide 12 text

GitLab から Webhook でリクエスト送信 Ansible Night Tokyo 2020 #ansiblejp 12 Project Webhookで JT 実行 git push YAML YAML YAML Playbook 同期 Repository 同期用 JT (中身 空っぽ) SCM Update 1. GitLab から Webhook 送信して 同期用 JT を実行 2. 同期用JT で使用するプロジェクトが更新される 3. 新Playbook が同期される

Slide 13

Slide 13 text

Webhook でプロジェクトの同期可能 Ansible Night Tokyo 2020 #ansiblejp 13 ジョブ履歴 JT 作成 Webhook で実行されている! プロジェクトが同期された! 新 Playbook を選択できる!

Slide 14

Slide 14 text

API

Slide 15

Slide 15 text

AWX は API が提供されている Ansible Night Tokyo 2020 #ansiblejp 15 http:///api/ でブラウザから見れます /api/v2/projects//update/ POST すればプロジェクトが同期される

Slide 16

Slide 16 text

.gitlab-ci.yml Ansible Night Tokyo 2020 #ansiblejp 16 image: docker:latest ...(略)... molecule: stage: test script: - molecule test awx: stage: sync script: - 'curl -X POST -H "Authorization: Bearer $AWX_TOKEN" -H "Content-Type: application/json“ http:///api/v2/projects//update/’ only: - master 事前に AWX のトークンを取得して GitLab に登録が必要 curl -s -u : -X POST http:///api/v2/tokens/ | jq -r .token Molecule クリア & master ブランチ の場合のみ API 実行 Molecule 用

Slide 17

Slide 17 text

GitLab CI で API を叩く Ansible Night Tokyo 2020 #ansiblejp 17 Project CI curl Playbook 同期 git push YAML Repository YAML YAML SCM Update 1. GitLab CI で Runner 起動 2. Runner 内で プロジェクト更新 API 実行 3. 新Playbook が同期される

Slide 18

Slide 18 text

まとめ 18 Ansible Night Tokyo 2020 #ansiblejp プロジェクト自動同期は可能 Webhook と API の 2通り確認できた 職場では API を採用 AWX は API が豊富 AWX は多くの API が提供されているので他にも活かせそう awx コマンドでも可能 某金魚さんブログにて awx コマンドでの同期を紹介