$30 off During Our Annual Pro Sale. View Details »

AWXのプロジェクトを自動同期させたい / Automatic AWX project synchronization

AWXのプロジェクトを自動同期させたい / Automatic AWX project synchronization

ののし

June 23, 2020
Tweet

More Decks by ののし

Other Decks in Technology

Transcript

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

    View Slide

  2. 自己紹介
    ---
    - 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

    View Slide

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

    View Slide

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

    View Slide

  5. 出てこない!

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  9. Webhook

    View Slide

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

    View Slide

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

    View Slide

  12. 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 が同期される

    View Slide

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

    View Slide

  14. API

    View Slide

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

    View Slide

  16. .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 用

    View Slide

  17. 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 が同期される

    View Slide

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

    View Slide