Ansible を使用して、Docker 化されたテスト環境と、本番環境用のプレーンな Ubuntu を展開する

Ansible を使用して、Docker 化されたテスト環境と、本番環境用のプレーンな Ubuntu を展開する

1 年半前から取り組んでいるシステムの導入について、サポートが必要です。私の懸念を理解していただくために、当社のインフラストラクチャについて少し説明します。

私たちには、システム用のさまざまなテスト環境を備えたサーバー(TESTING_SERVER と呼ぶことにします)があります。これらの環境はすべて docker で実行されています。テスト環境の各インスタンスは、次のもので構成されています。1. プロキシとして機能する nginx を備えた Docker コンテナ 2. Django Web を備えた Docker コンテナ 3. mysql を備えた Docker コンテナ

テスト目的で新しい環境を構築する必要があるたびに (例: QA が新しい機能をテストしたい場合)、TESTING_SERVER で次のタスクを実行する Ansible プレイブックを使用します。

  1. Dockerネットワークを作成する
  2. データベースコンテナを作成する
  3. TESTING_SERVER のどこかに django git リポジトリをクローンまたは更新します。
  4. Djangoコンテナを作成する
  5. Djangoコンテナ内でdjango collectstaticコマンドを実行する
  6. Djangoコンテナ内でdjango migrateコマンドを実行する
  7. nginxコンテナを作成する

私たちの本番環境には、mysql、django、nginx を実行する単純な Ubuntu サーバー (PRODUCTION_SERVER) があります。本番環境にデプロイする必要があるたびに、上記の手順を (ほぼ) 繰り返す Ansible プレイブックを実行します。

  1. MySQL 接続を確認します (DB は別のサーバーにあります)
  2. PRODUCTION_SERVER のどこかに Django Git リポジトリをクローンまたは更新します。
  3. gunicorn を確認して再起動します (django コンテナを作成するのと同等です)
  4. django collectstatic を実行する
  5. django migrateを実行する
  6. nginxの設定を確認する

これら 2 つのプレイブックは、共通点が多いものの、それぞれ異なります。各ステップを Ansible タスクに変換し、条件を使用してどのタスク (dockerized または direct) を実行する必要があるかを判断することを考えていました。ただし、各ステップには異なるタスクがまだあります (同じプレイブックですが、少し扱いに​​くいようです)。

私の質問は、これらのプレイブックを「マージ」して、繰り返しを行わずに 1 つにする方法があるかどうかです。

答え1

ベスト プラクティス ドキュメントに記載されているのと同様に、「タスク」ごとにロールを作成し、それをプレイブックで使用します。

http://docs.ansible.com/ansible/latest/playbooks_best_practices.html#ディレクトリレイアウト

例えば

roles/  
  create_a_docker_network/  
    tasks/  
      main.yml  
  create_database_container/...
  ...  
  Create_nginx_container/

そしてプレイブックで役割を呼び出します

テスト.yml

- hosts: testserver
  roles:
    - create_a_docker_network
    - create_database_container
    - ...

関連情報