仕組み

インストールの構成要素、起動時に起きること、データの保存場所

  1. アーキテクチャ
    1. 使用している技術
  2. フォームを起動すると何が起きるか
  3. 保存場所

アーキテクチャ

AnsibleForms は、MySQL データベースを使って Web アプリケーションと REST API を提供する Node.js サーバーです。フォームは YAML ファイルから読み取り、自分では何も実行しません。各ジョブを ランナー に渡します。プレイブックは RTE (ランタイム環境)コンテナーのいずれかに渡されて ansible-playbook が実行され、テンプレートやジョブは AWX、AAP、Ascender、Semaphore、Rundeck、Jenkins に渡されます。

AnsibleForms のアーキテクチャ ブラウザーと任意の MCP クライアントが AnsibleForms サーバーと通信します。サーバーはデータを MySQL と永続フォルダーに保存し、データソース、シークレットストア、Git リポジトリ、ログインプロバイダー、通知チャネル、Syslog サーバー、任意のモデルプロバイダーに接続します。そのランナーは、各プレイブックを 1 つ以上ある RTE コンテナーのいずれかにそれぞれ 1 本の WebSocket で渡し、RTE は ansible-playbook を実行して出力をサーバーに返します。各テンプレートやジョブは AWX、AAP、Ascender、Semaphore、Rundeck、Jenkins に渡します。 ブラウザー フォーム、デザイナー、ジョブ、チャット MCP クライアント 任意 AnsibleForms サーバー Node.js / Express Web アプリと REST API フォームエンジン、式 ワークフロー、スケジュール MCP サーバー(任意) ランナー 各ジョブをそのランナーに渡す データソース データベース、REST API、ファイル シークレットストア HashiCorp Vault, CyberArk Git リポジトリ フォーム、プレイブック、設定 ログインプロバイダー LDAP, Entra ID, OIDC 通知チャネル メール、Slack、Teams、Webhook Syslog サーバー ログ、監査証跡 モデルプロバイダー 任意、チャットアシスタント 永続フォルダー 設定、フォーム、プレイブック MySQL / MariaDB ジョブ、ユーザー、認証情報 RTE コンテナー ansible-playbook を実行 AWX / AAP / Ascender Semaphore, Rundeck, Jenkins プレイブック、 WebSocket テンプレート、ジョブ

図の各コンポーネントには、それぞれ次の役割があります。

コンポーネント 役割
ブラウザー Vue の Web アプリケーション。フォーム、 デザイナー 、ジョブ履歴、設定
AnsibleForms サーバー フォームを評価し、ジョブを記録し、ワークフローとスケジュールを実行し、各ジョブをそのランナーに渡して追跡し、 REST API を提供します
ランナー ジョブの実行場所で、 接続 > ランナー で追加します。フォームは runner: <name> で 1 つを指定するか、その種類の既定のランナーを使います( ランナー を参照)
RTE コンテナー 1 つ以上のランタイム環境コンテナーで、 AF_ROLE=rte で起動した同じサーバーです。それぞれが ansible フォーム のために、イメージの python ライブラリとコレクションを使って ansible-playbook を実行し、出力と最終的なステータスを 1 本の WebSocket でサーバーに返します。データベースの認証情報は持ちません( RTE の動作 を参照)
AWX / AAP / Ascender、Semaphore、Rundeck、Jenkins テンプレートとジョブ用のランナーです。 AWX フォーム はジョブテンプレートまたはワークフローテンプレートを起動し、 Semaphore 、 Rundeck 、 Jenkins のフォームはそれぞれのジョブを起動して、サーバーがその出力を追跡します
MySQL / MariaDB ジョブとその出力、ユーザー、認証情報、接続を保持します。読み書きするのはサーバーだけです
永続フォルダー config.yaml 、フォームファイル、プレイブック、ログ、バックアップを保持します
データソース フィールドを埋めます。 データベースのクエリ 、 REST API 、ファイル、 その他の関数 です
シークレットストア 使用時に認証情報のユーザーとパスワードを提供します。 シークレットストア を参照してください
Git リポジトリ フォーム、プレイブック、 config.yaml をバージョン管理します
ログインプロバイダー ローカルユーザーに加えて、 LDAP、Entra ID、OIDC でユーザーをサインインさせます
通知チャネル 通知 と承認依頼を運びます。 メール、Slack、Microsoft Teams、Telegram、Webhook です
Syslog サーバー ログと監査証跡を書き込まれるそばから受け取ります。 Syslog を参照してください
MCP クライアント、チャット 任意で、どちらも既定ではオフです。 MCP サーバー と チャットアシスタント で、チャットアシスタントにはモデルプロバイダーが必要です

既定では、1 つのコンテナーがサーバー、Web アプリ、バックグラウンド処理をまとめて実行し、その隣で 1 つの RTE が動きます。ロードバランサーの背後に複数のアプリノードを置く構成、 バックグラウンド処理を実行するワーカー、RTE の追加については、 スケーリング を参照してください。

使用している技術

サーバーと Web インターフェースは、次のコンポーネントで構築されています。

部分 技術
サーバー Node.js と Express
データベース MySQL または MariaDB
Web インターフェース Vue 3、Bootstrap 5、Font Awesome

フォームを起動すると何が起きるか

起動は、ブラウザーからでも REST API からでも、同じステップを通ります。

  1. 読み込み : サーバーはユーザーの ロール が許可するフォームだけを送り、サーバー側の式を評価します
  2. 送信 : ブラウザーはフィールドの値を extravars に変換し、 POST /api/v2/job に送ります
  3. チェック : サーバーはユーザーのロールでフォームを読み込み直し、 起動時の検証 が有効なら値をチェックします
  4. 記録 : ジョブがステータス running で保存され、その ID が __jobid__ として extravars に追加されます
  5. 承認 : approval ポイントを持つフォームは、承認者がジョブを受け入れるまで待ちます
  6. 認証情報 : プレイブックの場合、アプリ(RTE ではありません)がフォームの認証情報をデータベースまたは シークレットストア から読み取ります
  7. 実行 : ジョブはそのランナー、つまりフォームが runner: で指定したもの、またはその種類の既定のランナーに渡されます。プレイブックの場合、アプリは その RTE 用に封をした認証情報とともに、RTE の WebSocket 経由でジョブを送り、RTE が ansible-playbook を実行します( RTE の動作 を参照)。 テンプレートやジョブは AWX、AAP、Ascender、Semaphore、Rundeck、Jenkins が実行します。 ワークフロー はそのノードを、それぞれ 専用のランナー上の個別のジョブとして実行します
  8. 追跡 : サーバーは届いた出力をデータベースに保存します。プレイブックの場合は RTE がソケット経由で送り、それ以外は ほかのランナーから読み取ります。フォームのページは 2 秒ごとにジョブを読み直し、「ジョブ」ページはサーバーが 変更を通知するたびにライブで追従します
  9. 終了 : ジョブは最終的なステータスになり、フォームが求めていれば、その notifications がメールと 通知チャネル に送られます

保存場所

AnsibleForms は状態を 2 か所に保存します。MySQL データベースと永続フォルダーです。両方をバックアップしてください。

データベース

データベース AnsibleForms は初回起動時に作成され( ALLOW_SCHEMA_CREATION が 0 の場合を除く)、次のものを保持します。

  • ジョブ、その extravars と出力、スケジュール、保存済みジョブ
  • ローカルユーザー、グループ、API トークン
  • ENCRYPTION_SECRET で暗号化された認証情報と、シークレットストアの接続
  • ランナー、通知チャネル(メールを含む)、Syslog サーバー、そして LDAP、SSO、リポジトリ、チャットアシスタントの設定
  • 監査ログ

永続フォルダー

イメージでは /app/dist/persistent 、ソースからの場合は server/persistent です。各パスには専用の 変数 があります。

既定のパス 変数 内容
config.yaml CONFIG_PATH カテゴリ、ロール、定数
forms/ FORMS_FOLDER_PATH フォームファイル( .yaml または .yml )。必要ならサブフォルダーに分けられます
playbooks/ ANSIBLE_PATH ansible フォームのプレイブックと、その作業ディレクトリ
repositories/ REPO_PATH Git リポジトリのクローン
forms_backups/ FORMS_BACKUP_PATH デザイナーが保存の前に作成するコピー
backups/ BACKUP_PATH データベースのバックアップ
uploads/ UPLOAD_PATH file フィールドでアップロードされたファイル
logs/ LOG_PATH ansibleforms.log と ansibleforms.errors.log
certificates/ HTTPS_CERT, HTTPS_KEY HTTPS が 1 の場合の証明書と鍵
.env   設定ページから保存された環境変数( ALLOW_ENV_EDIT が 0 の場合を除く)

生成された SSH キーは HOME_PATH にあり、既定では永続フォルダーの外です。