diff --git a/README.md b/README.md index 1184e3d..53469e4 100644 --- a/README.md +++ b/README.md @@ -43,8 +43,8 @@ func main() { Name: "component1", MaxCpu: "0.1", MaxMemory: "256Mi", - Datasource: v1.PostApplicationBodyComponentDataSource{ - ContainerRegistry: &v1.PostApplicationBodyComponentDataSourceContainerRegistry{ + DeploySource: v1.PostApplicationBodyComponentDeploySource{ + ContainerRegistry: &v1.PostApplicationBodyComponentDeploySourceContainerRegistry{ Image: "apprun-test.sakuracr.jp/apprun/test1:latest", }, }, diff --git a/acceptance_test.go b/acceptance_test.go index 73205c7..74df9cd 100644 --- a/acceptance_test.go +++ b/acceptance_test.go @@ -72,8 +72,8 @@ func TestApplicationAPI(t *testing.T) { Name: "component1", MaxCpu: "0.1", MaxMemory: "256Mi", - Datasource: v1.PostApplicationBodyComponentDataSource{ - ContainerRegistry: &v1.PostApplicationBodyComponentDataSourceContainerRegistry{ + DeploySource: v1.PostApplicationBodyComponentDeploySource{ + ContainerRegistry: &v1.PostApplicationBodyComponentDeploySourceContainerRegistry{ Image: "apprun-test.sakuracr.jp/apprun/test1:latest", }, }, @@ -144,8 +144,9 @@ func TestVersionAPI(t *testing.T) { Name: "component1", MaxCpu: "0.1", MaxMemory: "256Mi", - Datasource: v1.PostApplicationBodyComponentDataSource{ - ContainerRegistry: &v1.PostApplicationBodyComponentDataSourceContainerRegistry{ + + DeploySource: v1.PostApplicationBodyComponentDeploySource{ + ContainerRegistry: &v1.PostApplicationBodyComponentDeploySourceContainerRegistry{ Image: "apprun-test.sakuracr.jp/apprun/test1:latest", }, }, @@ -212,8 +213,8 @@ func TestTrafficAPI(t *testing.T) { Name: "component1", MaxCpu: "0.1", MaxMemory: "256Mi", - Datasource: v1.PostApplicationBodyComponentDataSource{ - ContainerRegistry: &v1.PostApplicationBodyComponentDataSourceContainerRegistry{ + DeploySource: v1.PostApplicationBodyComponentDeploySource{ + ContainerRegistry: &v1.PostApplicationBodyComponentDeploySourceContainerRegistry{ Image: "apprun-test.sakuracr.jp/apprun/test1:latest", }, }, diff --git a/apis/v1/spec/openapi.yaml b/apis/v1/spec/openapi.yaml index 77d64aa..6c5ea85 100644 --- a/apis/v1/spec/openapi.yaml +++ b/apis/v1/spec/openapi.yaml @@ -138,7 +138,7 @@ info: "name": "Component01", "max_cpu": "0.1", "max_memory": "256Mi", - "datasource": { + "deploy_source": { "container_registry": { "image": "my-app.sakuracr.jp/my-app:latest" } @@ -191,7 +191,7 @@ info: "name": "Component01 updated", "max_cpu": "0.1", "max_memory": "256Mi", - "datasource": { + "deploy_source": { "container_registry": { "image": "my-app.sakuracr.jp/my-app-v2:latest" } @@ -300,7 +300,7 @@ paths: schema: $ref: "#/components/schemas/model.defaultError" "404": - description: さくらのAppRunにユーザーが存在しません + description: さくらのAppRunにユーザーが存在しません。 content: application/json: schema: @@ -1314,7 +1314,7 @@ components: - name - max_cpu - max_memory - - datasource + - deploy_source properties: name: description: コンポーネント名 @@ -1346,9 +1346,9 @@ components: - 512Mi - 1Gi - 2Gi - datasource: + deploy_source: description: コンポーネントを構成するソース - $ref: "#/components/schemas/postApplicationBodyComponentDataSource" + $ref: "#/components/schemas/postApplicationBodyComponentDeploySource" env: description: コンポーネントに渡す環境変数 type: array @@ -1358,13 +1358,13 @@ components: probe: description: コンポーネントのプローブ設定 $ref: "#/components/schemas/postApplicationBodyComponentProbe" - postApplicationBodyComponentDataSource: + postApplicationBodyComponentDeploySource: type: object properties: container_registry: description: コンテナレジストリ - $ref: "#/components/schemas/postApplicationBodyComponentDataSourceContainerRegistry" - postApplicationBodyComponentDataSourceContainerRegistry: + $ref: "#/components/schemas/postApplicationBodyComponentDeploySourceContainerRegistry" + postApplicationBodyComponentDeploySourceContainerRegistry: type: object required: - image @@ -1494,7 +1494,7 @@ components: - name - max_cpu - max_memory - - datasource + - deploy_source properties: name: description: コンポーネント名 @@ -1526,22 +1526,22 @@ components: - 512Mi - 1Gi - 2Gi - datasource: + deploy_source: description: コンポーネントを構成するソース - $ref: "#/components/schemas/patchApplicationBodyComponentDataSource" + $ref: "#/components/schemas/patchApplicationBodyComponentDeploySource" env: description: コンポーネントに渡す環境変数 $ref: "#/components/schemas/patchApplicationBodyComponentEnv" probe: description: コンポーネントのプローブ設定 $ref: "#/components/schemas/patchApplicationBodyComponentProbe" - patchApplicationBodyComponentDataSource: + patchApplicationBodyComponentDeploySource: type: object properties: container_registry: description: コンテナレジストリ - $ref: "#/components/schemas/patchApplicationBodyComponentDataSourceContainerRegistry" - patchApplicationBodyComponentDataSourceContainerRegistry: + $ref: "#/components/schemas/patchApplicationBodyComponentDeploySourceContainerRegistry" + patchApplicationBodyComponentDeploySourceContainerRegistry: type: object required: - image @@ -1692,7 +1692,7 @@ components: - name - max_cpu - max_memory - - datasource + - deploy_source properties: name: description: コンポーネント名 @@ -1706,9 +1706,9 @@ components: description: コンポーネントの最大メモリ type: string example: 256Mi - datasource: + deploy_source: description: コンポーネントを構成するソース - $ref: "#/components/schemas/handler.ApplicationComponentDataSource" + $ref: "#/components/schemas/handler.ApplicationComponentDeploySource" env: description: コンポーネントに渡す環境変数 type: array @@ -1717,13 +1717,13 @@ components: probe: description: コンポーネントのプローブ設定 $ref: "#/components/schemas/handler.ApplicationComponentProbe" - handler.ApplicationComponentDataSource: + handler.ApplicationComponentDeploySource: type: object properties: container_registry: description: コンテナレジストリ - $ref: "#/components/schemas/handler.ApplicationComponentDataSourceContainerRegistry" - handler.ApplicationComponentDataSourceContainerRegistry: + $ref: "#/components/schemas/handler.ApplicationComponentDeploySourceContainerRegistry" + handler.ApplicationComponentDeploySourceContainerRegistry: type: object required: - image diff --git a/apis/v1/spec/original-openapi.json b/apis/v1/spec/original-openapi.json index bfe744b..973bf5d 100644 --- a/apis/v1/spec/original-openapi.json +++ b/apis/v1/spec/original-openapi.json @@ -9,7 +9,7 @@ "license": { "name": "Copyright(C) SAKURA internet Inc. all rights reserved." }, - "description": "---\n「さくらのAppRun」が提供するAPIの利用方法とサンプルを公開しております。\n\n# 基本的な使い方\n\n## APIキーの発行\n\nAPIを利用するためには、認証のための「APIキー」が必要です。事前にキーを発行しておきます。 \nAPIキーは「ユーザーID」「パスワード」に相当する「トークン」と呼ばれる認証情報で構成されています。\n\n| 項目名 | APIキー発行時の項目名 | このドキュメント内での例 |\n|------------|------------------------------|--------------------------------------|\n| ユーザーID | アクセストークン(UUID) | 01234567-89ab-cdef-0123-456789abcdef |\n| パスワード | アクセストークンシークレット | SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM |\n\n
\n操作マニュアル
\n\n
\n\n## 入力パラメータ\n\nAPIの入力には送信先URLに対して、いくつかのヘッダーとAPIキーを送信します。\n\n* 認証方式はHTTP Basic認証です。APIキーのアクセストークンをユーザーID、アクセストークンシークレットをパスワードとして指定します。\n\n```\n# 入力サンプル\ncurl -u '01234567-89ab-cdef-0123-456789abcdef:SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM' \\\n 'https://secure.sakura.ad.jp/cloud/api/apprun/1.0/apprun/api/applications'\n```\n\n## 出力結果と応答コード(HTTPステータスコード)\n\nAPIからの結果は、「応答コード(HTTPステータスコード)」と、「JSON形式(UTF-8)の結果」として出力されます。\n\n応答コードは、リクエストが成功したのか、失敗したのか大まかな情報を判断することができるもので、例えば失敗したときには、なぜこのような結果になったのかなど、具体的な情報は応答コードと主に返された本文を見ることで把握することができます。\n\n| 結果 | 応答コード/status |\n|-------------------------------------|---------------------|\n| 成功(要求を受け付けた) | 2xx |\n| 失敗(要求が受け付けられなかった) | 4xx, 5xx |\n\n```\n# 出力結果サンプル(レスポンスヘッダー)\nHTTP/1.1 200 OK\nServer: nginx\nDate: Tue, 16 Nov 2021 12:39:48 GMT\nContent-Type: application/json; charset=UTF-8\nContent-Length: 443\nConnection: keep-alive\nStatus: 200 OK\nPragma: no-cache\nCache-Control: no-cache\nX-Sakura-Proxy-Microtime: 66245\nX-Sakura-Proxy-Decode-Microtime: 62\nX-Sakura-Content-Length: 443\nX-Sakura-Serial: 86ab6c743f72aa5ea6f17e254fd5f803\nX-Content-Type-Options: nosniff\nX-XSS-Protection: 1; mode=block\nX-Frame-Options: DENY\nX-Sakura-Encode-Microtime: 260\nVary: Accept-Encoding\n```\n\n```\n# 出力結果サンプル(レスポンスボディー)\n{\n \"error\": {\n \"code\": 401,\n \"message\": \"Login Required\",\n \"errors\": [\n {\n \"domain\": \"global\",\n \"reason\": \"required\",\n \"message\": \"Login Required\",\n \"location_type\": \"header\",\n \"location\": \"Authorization\"\n }\n ]\n }\n}\n```\n\n# 利用例\n\n## 1.ユーザーの作成\n\nAppRunの利用を開始するには**ユーザー**を作成します。\n\nユーザーとは、AppRunを利用するための独立したユーザーであり、ユーザー作成および削除による料金の発生はございません。 \nなお、すでにユーザーを作成済みの場合は、再度ユーザーの作成は不要です。\n\nユーザーを作成するには以下のような入力を行います。\n\n```\n# 入力サンプル\ncurl -u '01234567-89ab-cdef-0123-456789abcdef:SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM' \\\n -X POST \\\n https://secure.sakura.ad.jp/cloud/api/apprun/1.0/apprun/api/user\n```\n\nユーザーの作成が完了すると、\n\n* アプリケーションの作成、更新、削除\n* バージョンの確認、削除\n* トラフィック分散の確認、変更\n\nなどの操作が可能になります。\n\n## 2.アプリケーションの作成、取得、更新、削除\n\nユーザーを作成後、**アプリケーション**の作成、更新、削除が可能になります。\n\nアプリケーションを作成するには以下のような入力を行います。\n\n```\n# 入力サンプル\nvi request_body.json\ncat request_body.json\n{\n \"name\": \"Application\",\n \"timeout_seconds\": 60,\n \"port\": 8080,\n \"min_scale\": 0,\n \"max_scale\": 1,\n \"components\": [\n {\n \"name\": \"Component01\",\n \"max_cpu\": \"0.1\",\n \"max_memory\": \"256Mi\",\n \"datasource\": {\n \"container_registry\": {\n \"image\": \"my-app.sakuracr.jp/my-app:latest\"\n }\n },\n \"env\": [\n {\n \"key\": \"TARGET\",\n \"value\": \"World\"\n }\n ],\n \"probe\": {\n \"http_get\": {\n \"path\": \"/\",\n \"port\": 8080,\n \"headers\": [\n {\n \"name\": \"Custom-Header\",\n \"value\": \"Awesome\"\n }\n ]\n }\n }\n }\n ]\n}\ncurl -u '01234567-89ab-cdef-0123-456789abcdef:SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM' \\\n -X POST \\\n -d '@request_body.json' \\\n https://secure.sakura.ad.jp/cloud/api/apprun/1.0/apprun/api/applications\n```\n\n上記で作成したアプリケーションを取得するには以下のような入力を行います。\n\n```\n# 入力サンプル\ncurl -u '01234567-89ab-cdef-0123-456789abcdef:SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM' \\\n -X GET \\\n https://secure.sakura.ad.jp/cloud/api/apprun/1.0/apprun/api/applications/{id}\n```\n\n上記で作成したアプリケーションを更新するには以下のような入力を行います。\n\n```\n# 入力サンプル\nvi request_body.json\ncat request_body.json\n{\n \"components\": [\n {\n \"name\": \"Component01 updated\",\n \"max_cpu\": \"0.1\",\n \"max_memory\": \"256Mi\",\n \"datasource\": {\n \"container_registry\": {\n \"image\": \"my-app.sakuracr.jp/my-app-v2:latest\"\n }\n }\n }\n ],\n \"all_traffic_available\": true\n}\n\ncurl -u '01234567-89ab-cdef-0123-456789abcdef:SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM' \\\n -X PATCH \\\n -d '@request_body.json' \\\n https://secure.sakura.ad.jp/cloud/api/apprun/1.0/apprun/api/applications/{id}\n```\n\n上記で作成したアプリケーションを削除するには以下のような入力を行います。\n\n```\n# 入力サンプル\ncurl -u '01234567-89ab-cdef-0123-456789abcdef:SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM' \\\n -X DELETE \\\n https://secure.sakura.ad.jp/cloud/api/apprun/1.0/apprun/api/applications/{id}\n```\n\n## 3.バージョンの取得、削除\n\nアプリケーションを作成、更新した際、その設定情報をバージョンとして保存します。\n\nバージョンを取得するには以下のような入力を行います。\n\n```\n# 入力サンプル\ncurl -u '01234567-89ab-cdef-0123-456789abcdef:SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM' \\\n -X GET \\\n https://secure.sakura.ad.jp/cloud/api/apprun/1.0/apprun/api/applications/{id}/versions/{version_id}\n```\n\n上記で作成したバージョンを削除するには以下のような入力を行います。\n\n```\n# 入力サンプル\ncurl -u '01234567-89ab-cdef-0123-456789abcdef:SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM' \\\n -X DELETE \\\n https://secure.sakura.ad.jp/cloud/api/apprun/1.0/apprun/api/applications/{id}/versions/{version_id}\n```\n\n## 4.トラフィック分散の確認、変更\n\nアプリケーションは指定のバージョンへトラフィックを分散します。\n\nトラフィック分散を確認するには以下のような入力を行います。\n\n```\n# 入力サンプル\ncurl -u '01234567-89ab-cdef-0123-456789abcdef:SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM' \\\n -X GET \\\n https://secure.sakura.ad.jp/cloud/api/apprun/1.0/apprun/api/applications/{id}/traffics\n```\n\nトラフィック分散を変更するには以下のような入力を行います。\n\n```\n# 入力サンプル\nvi request_body.json\ncat request_body.json\n[\n {\n \"is_latest_version\": true,\n \"percent\": 50\n },\n {\n \"version_name\": \"Application-861850d6-8240-7c31-9b69-80ea4466918d-1726726814\",\n \"percent\": 50\n }\n]\ncurl -u '01234567-89ab-cdef-0123-456789abcdef:SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM' \\\n -X PUT \\\n https://secure.sakura.ad.jp/cloud/api/apprun/1.0/apprun/api/applications/{id}/traffics\n```\n----" + "description": "---\n「さくらのAppRun」が提供するAPIの利用方法とサンプルを公開しております。\n\n# 基本的な使い方\n\n## APIキーの発行\n\nAPIを利用するためには、認証のための「APIキー」が必要です。事前にキーを発行しておきます。 \nAPIキーは「ユーザーID」「パスワード」に相当する「トークン」と呼ばれる認証情報で構成されています。\n\n| 項目名 | APIキー発行時の項目名 | このドキュメント内での例 |\n|------------|------------------------------|--------------------------------------|\n| ユーザーID | アクセストークン(UUID) | 01234567-89ab-cdef-0123-456789abcdef |\n| パスワード | アクセストークンシークレット | SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM |\n\n
\n操作マニュアル
\n\n
\n\n## 入力パラメータ\n\nAPIの入力には送信先URLに対して、いくつかのヘッダーとAPIキーを送信します。\n\n* 認証方式はHTTP Basic認証です。APIキーのアクセストークンをユーザーID、アクセストークンシークレットをパスワードとして指定します。\n\n```\n# 入力サンプル\ncurl -u '01234567-89ab-cdef-0123-456789abcdef:SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM' \\\n 'https://secure.sakura.ad.jp/cloud/api/apprun/1.0/apprun/api/applications'\n```\n\n## 出力結果と応答コード(HTTPステータスコード)\n\nAPIからの結果は、「応答コード(HTTPステータスコード)」と、「JSON形式(UTF-8)の結果」として出力されます。\n\n応答コードは、リクエストが成功したのか、失敗したのか大まかな情報を判断することができるもので、例えば失敗したときには、なぜこのような結果になったのかなど、具体的な情報は応答コードと主に返された本文を見ることで把握することができます。\n\n| 結果 | 応答コード/status |\n|-------------------------------------|---------------------|\n| 成功(要求を受け付けた) | 2xx |\n| 失敗(要求が受け付けられなかった) | 4xx, 5xx |\n\n```\n# 出力結果サンプル(レスポンスヘッダー)\nHTTP/1.1 200 OK\nServer: nginx\nDate: Tue, 16 Nov 2021 12:39:48 GMT\nContent-Type: application/json; charset=UTF-8\nContent-Length: 443\nConnection: keep-alive\nStatus: 200 OK\nPragma: no-cache\nCache-Control: no-cache\nX-Sakura-Proxy-Microtime: 66245\nX-Sakura-Proxy-Decode-Microtime: 62\nX-Sakura-Content-Length: 443\nX-Sakura-Serial: 86ab6c743f72aa5ea6f17e254fd5f803\nX-Content-Type-Options: nosniff\nX-XSS-Protection: 1; mode=block\nX-Frame-Options: DENY\nX-Sakura-Encode-Microtime: 260\nVary: Accept-Encoding\n```\n\n```\n# 出力結果サンプル(レスポンスボディー)\n{\n \"error\": {\n \"code\": 401,\n \"message\": \"Login Required\",\n \"errors\": [\n {\n \"domain\": \"global\",\n \"reason\": \"required\",\n \"message\": \"Login Required\",\n \"location_type\": \"header\",\n \"location\": \"Authorization\"\n }\n ]\n }\n}\n```\n\n# 利用例\n\n## 1.ユーザーの作成\n\nAppRunの利用を開始するには**ユーザー**を作成します。\n\nユーザーとは、AppRunを利用するための独立したユーザーであり、ユーザー作成および削除による料金の発生はございません。 \nなお、すでにユーザーを作成済みの場合は、再度ユーザーの作成は不要です。\n\nユーザーを作成するには以下のような入力を行います。\n\n```\n# 入力サンプル\ncurl -u '01234567-89ab-cdef-0123-456789abcdef:SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM' \\\n -X POST \\\n https://secure.sakura.ad.jp/cloud/api/apprun/1.0/apprun/api/user\n```\n\nユーザーの作成が完了すると、\n\n* アプリケーションの作成、更新、削除\n* バージョンの確認、削除\n* トラフィック分散の確認、変更\n\nなどの操作が可能になります。\n\n## 2.アプリケーションの作成、取得、更新、削除\n\nユーザーを作成後、**アプリケーション**の作成、更新、削除が可能になります。\n\nアプリケーションを作成するには以下のような入力を行います。\n\n```\n# 入力サンプル\nvi request_body.json\ncat request_body.json\n{\n \"name\": \"Application\",\n \"timeout_seconds\": 60,\n \"port\": 8080,\n \"min_scale\": 0,\n \"max_scale\": 1,\n \"components\": [\n {\n \"name\": \"Component01\",\n \"max_cpu\": \"0.1\",\n \"max_memory\": \"256Mi\",\n \"deploy_source\": {\n \"container_registry\": {\n \"image\": \"my-app.sakuracr.jp/my-app:latest\"\n }\n },\n \"env\": [\n {\n \"key\": \"TARGET\",\n \"value\": \"World\"\n }\n ],\n \"probe\": {\n \"http_get\": {\n \"path\": \"/\",\n \"port\": 8080,\n \"headers\": [\n {\n \"name\": \"Custom-Header\",\n \"value\": \"Awesome\"\n }\n ]\n }\n }\n }\n ]\n}\ncurl -u '01234567-89ab-cdef-0123-456789abcdef:SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM' \\\n -X POST \\\n -d '@request_body.json' \\\n https://secure.sakura.ad.jp/cloud/api/apprun/1.0/apprun/api/applications\n```\n\n上記で作成したアプリケーションを取得するには以下のような入力を行います。\n\n```\n# 入力サンプル\ncurl -u '01234567-89ab-cdef-0123-456789abcdef:SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM' \\\n -X GET \\\n https://secure.sakura.ad.jp/cloud/api/apprun/1.0/apprun/api/applications/{id}\n```\n\n上記で作成したアプリケーションを更新するには以下のような入力を行います。\n\n```\n# 入力サンプル\nvi request_body.json\ncat request_body.json\n{\n \"components\": [\n {\n \"name\": \"Component01 updated\",\n \"max_cpu\": \"0.1\",\n \"max_memory\": \"256Mi\",\n \"deploy_source\": {\n \"container_registry\": {\n \"image\": \"my-app.sakuracr.jp/my-app-v2:latest\"\n }\n }\n }\n ],\n \"all_traffic_available\": true\n}\n\ncurl -u '01234567-89ab-cdef-0123-456789abcdef:SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM' \\\n -X PATCH \\\n -d '@request_body.json' \\\n https://secure.sakura.ad.jp/cloud/api/apprun/1.0/apprun/api/applications/{id}\n```\n\n上記で作成したアプリケーションを削除するには以下のような入力を行います。\n\n```\n# 入力サンプル\ncurl -u '01234567-89ab-cdef-0123-456789abcdef:SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM' \\\n -X DELETE \\\n https://secure.sakura.ad.jp/cloud/api/apprun/1.0/apprun/api/applications/{id}\n```\n\n## 3.バージョンの取得、削除\n\nアプリケーションを作成、更新した際、その設定情報をバージョンとして保存します。\n\nバージョンを取得するには以下のような入力を行います。\n\n```\n# 入力サンプル\ncurl -u '01234567-89ab-cdef-0123-456789abcdef:SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM' \\\n -X GET \\\n https://secure.sakura.ad.jp/cloud/api/apprun/1.0/apprun/api/applications/{id}/versions/{version_id}\n```\n\n上記で作成したバージョンを削除するには以下のような入力を行います。\n\n```\n# 入力サンプル\ncurl -u '01234567-89ab-cdef-0123-456789abcdef:SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM' \\\n -X DELETE \\\n https://secure.sakura.ad.jp/cloud/api/apprun/1.0/apprun/api/applications/{id}/versions/{version_id}\n```\n\n## 4.トラフィック分散の確認、変更\n\nアプリケーションは指定のバージョンへトラフィックを分散します。\n\nトラフィック分散を確認するには以下のような入力を行います。\n\n```\n# 入力サンプル\ncurl -u '01234567-89ab-cdef-0123-456789abcdef:SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM' \\\n -X GET \\\n https://secure.sakura.ad.jp/cloud/api/apprun/1.0/apprun/api/applications/{id}/traffics\n```\n\nトラフィック分散を変更するには以下のような入力を行います。\n\n```\n# 入力サンプル\nvi request_body.json\ncat request_body.json\n[\n {\n \"is_latest_version\": true,\n \"percent\": 50\n },\n {\n \"version_name\": \"Application-861850d6-8240-7c31-9b69-80ea4466918d-1726726814\",\n \"percent\": 50\n }\n]\ncurl -u '01234567-89ab-cdef-0123-456789abcdef:SAMPLETOKENSAMPLETOKENSAMPLETOKENSAM' \\\n -X PUT \\\n https://secure.sakura.ad.jp/cloud/api/apprun/1.0/apprun/api/applications/{id}/traffics\n```\n----" }, "servers": [ { @@ -49,7 +49,7 @@ } }, "404": { - "description": "さくらのAppRunにユーザーが存在しません", + "description": "さくらのAppRunにユーザーが存在しません。", "content": { "application/json": { "schema": { @@ -1262,7 +1262,7 @@ "name", "max_cpu", "max_memory", - "datasource" + "deploy_source" ], "properties": { "name": { @@ -1280,7 +1280,7 @@ "type": "string", "example": "256Mi" }, - "datasource": { + "deploy_source": { "description": "コンポーネントを構成するソース", "type": "object", "properties": { @@ -1455,7 +1455,7 @@ "name", "max_cpu", "max_memory", - "datasource" + "deploy_source" ], "properties": { "name": { @@ -1473,7 +1473,7 @@ "type": "string", "example": "256Mi" }, - "datasource": { + "deploy_source": { "description": "コンポーネントを構成するソース", "type": "object", "properties": { @@ -1645,7 +1645,7 @@ "name", "max_cpu", "max_memory", - "datasource" + "deploy_source" ], "properties": { "name": { @@ -1663,7 +1663,7 @@ "type": "string", "example": "256Mi" }, - "datasource": { + "deploy_source": { "description": "コンポーネントを構成するソース", "type": "object", "properties": { @@ -1935,7 +1935,7 @@ "name", "max_cpu", "max_memory", - "datasource" + "deploy_source" ], "properties": { "name": { @@ -1953,7 +1953,7 @@ "type": "string", "example": "256Mi" }, - "datasource": { + "deploy_source": { "description": "コンポーネントを構成するソース", "type": "object", "properties": { @@ -2182,7 +2182,7 @@ "name", "max_cpu", "max_memory", - "datasource" + "deploy_source" ], "properties": { "name": { @@ -2220,7 +2220,7 @@ "2Gi" ] }, - "datasource": { + "deploy_source": { "description": "コンポーネントを構成するソース", "type": "object", "properties": { @@ -2386,7 +2386,7 @@ "name", "max_cpu", "max_memory", - "datasource" + "deploy_source" ], "properties": { "name": { @@ -2424,7 +2424,7 @@ "2Gi" ] }, - "datasource": { + "deploy_source": { "description": "コンポーネントを構成するソース", "type": "object", "properties": { diff --git a/apis/v1/zz_types_gen.go b/apis/v1/zz_types_gen.go index 49ccb14..abf770e 100644 --- a/apis/v1/zz_types_gen.go +++ b/apis/v1/zz_types_gen.go @@ -207,7 +207,7 @@ type VersionStatus string // HandlerApplicationComponent defines model for handler.ApplicationComponent. type HandlerApplicationComponent struct { - Datasource HandlerApplicationComponentDataSource `json:"datasource"` + DeploySource HandlerApplicationComponentDeploySource `json:"deploy_source"` // Env コンポーネントに渡す環境変数 Env *[]HandlerApplicationComponentEnv `json:"env,omitempty"` @@ -223,13 +223,13 @@ type HandlerApplicationComponent struct { Probe *HandlerApplicationComponentProbe `json:"probe"` } -// HandlerApplicationComponentDataSource defines model for handler.ApplicationComponentDataSource. -type HandlerApplicationComponentDataSource struct { - ContainerRegistry *HandlerApplicationComponentDataSourceContainerRegistry `json:"container_registry,omitempty"` +// HandlerApplicationComponentDeploySource defines model for handler.ApplicationComponentDeploySource. +type HandlerApplicationComponentDeploySource struct { + ContainerRegistry *HandlerApplicationComponentDeploySourceContainerRegistry `json:"container_registry,omitempty"` } -// HandlerApplicationComponentDataSourceContainerRegistry defines model for handler.ApplicationComponentDataSourceContainerRegistry. -type HandlerApplicationComponentDataSourceContainerRegistry struct { +// HandlerApplicationComponentDeploySourceContainerRegistry defines model for handler.ApplicationComponentDeploySourceContainerRegistry. +type HandlerApplicationComponentDeploySourceContainerRegistry struct { // Image コンテナイメージ名 Image string `json:"image"` @@ -480,8 +480,8 @@ type PatchApplicationBody struct { // PatchApplicationBodyComponent defines model for patchApplicationBodyComponent. type PatchApplicationBodyComponent struct { - Datasource PatchApplicationBodyComponentDataSource `json:"datasource"` - Env *PatchApplicationBodyComponentEnv `json:"env"` + DeploySource PatchApplicationBodyComponentDeploySource `json:"deploy_source"` + Env *PatchApplicationBodyComponentEnv `json:"env"` // MaxCpu コンポーネントの最大CPU数 MaxCpu PatchApplicationBodyComponentMaxCpu `json:"max_cpu"` @@ -500,13 +500,13 @@ type PatchApplicationBodyComponentMaxCpu string // PatchApplicationBodyComponentMaxMemory コンポーネントの最大メモリ type PatchApplicationBodyComponentMaxMemory string -// PatchApplicationBodyComponentDataSource defines model for patchApplicationBodyComponentDataSource. -type PatchApplicationBodyComponentDataSource struct { - ContainerRegistry *PatchApplicationBodyComponentDataSourceContainerRegistry `json:"container_registry,omitempty"` +// PatchApplicationBodyComponentDeploySource defines model for patchApplicationBodyComponentDeploySource. +type PatchApplicationBodyComponentDeploySource struct { + ContainerRegistry *PatchApplicationBodyComponentDeploySourceContainerRegistry `json:"container_registry,omitempty"` } -// PatchApplicationBodyComponentDataSourceContainerRegistry defines model for patchApplicationBodyComponentDataSourceContainerRegistry. -type PatchApplicationBodyComponentDataSourceContainerRegistry struct { +// PatchApplicationBodyComponentDeploySourceContainerRegistry defines model for patchApplicationBodyComponentDeploySourceContainerRegistry. +type PatchApplicationBodyComponentDeploySourceContainerRegistry struct { // Image コンテナイメージ名 Image string `json:"image"` @@ -572,7 +572,7 @@ type PostApplicationBody struct { // PostApplicationBodyComponent defines model for postApplicationBodyComponent. type PostApplicationBodyComponent struct { - Datasource PostApplicationBodyComponentDataSource `json:"datasource"` + DeploySource PostApplicationBodyComponentDeploySource `json:"deploy_source"` // Env コンポーネントに渡す環境変数 Env *[]PostApplicationBodyComponentEnv `json:"env"` @@ -594,13 +594,13 @@ type PostApplicationBodyComponentMaxCpu string // PostApplicationBodyComponentMaxMemory コンポーネントの最大メモリ type PostApplicationBodyComponentMaxMemory string -// PostApplicationBodyComponentDataSource defines model for postApplicationBodyComponentDataSource. -type PostApplicationBodyComponentDataSource struct { - ContainerRegistry *PostApplicationBodyComponentDataSourceContainerRegistry `json:"container_registry,omitempty"` +// PostApplicationBodyComponentDeploySource defines model for postApplicationBodyComponentDeploySource. +type PostApplicationBodyComponentDeploySource struct { + ContainerRegistry *PostApplicationBodyComponentDeploySourceContainerRegistry `json:"container_registry,omitempty"` } -// PostApplicationBodyComponentDataSourceContainerRegistry defines model for postApplicationBodyComponentDataSourceContainerRegistry. -type PostApplicationBodyComponentDataSourceContainerRegistry struct { +// PostApplicationBodyComponentDeploySourceContainerRegistry defines model for postApplicationBodyComponentDeploySourceContainerRegistry. +type PostApplicationBodyComponentDeploySourceContainerRegistry struct { // Image コンテナイメージ名 Image string `json:"image"` diff --git a/example_test.go b/example_test.go index ed92123..6fe5a72 100644 --- a/example_test.go +++ b/example_test.go @@ -65,8 +65,8 @@ func Example_applicationAPI() { Name: "component1", MaxCpu: "0.1", MaxMemory: "256Mi", - Datasource: v1.PostApplicationBodyComponentDataSource{ - ContainerRegistry: &v1.PostApplicationBodyComponentDataSourceContainerRegistry{ + DeploySource: v1.PostApplicationBodyComponentDeploySource{ + ContainerRegistry: &v1.PostApplicationBodyComponentDeploySourceContainerRegistry{ Image: "apprun-test.sakuracr.jp/apprun/test1:latest", }, }, @@ -122,8 +122,8 @@ func Example_versionAPI() { Name: "component1", MaxCpu: "0.1", MaxMemory: "256Mi", - Datasource: v1.PostApplicationBodyComponentDataSource{ - ContainerRegistry: &v1.PostApplicationBodyComponentDataSourceContainerRegistry{ + DeploySource: v1.PostApplicationBodyComponentDeploySource{ + ContainerRegistry: &v1.PostApplicationBodyComponentDeploySourceContainerRegistry{ Image: "apprun-test.sakuracr.jp/apprun/test1:latest", }, }, @@ -204,8 +204,8 @@ func Example_trafficAPI() { Name: "component1", MaxCpu: "0.1", MaxMemory: "256Mi", - Datasource: v1.PostApplicationBodyComponentDataSource{ - ContainerRegistry: &v1.PostApplicationBodyComponentDataSourceContainerRegistry{ + DeploySource: v1.PostApplicationBodyComponentDeploySource{ + ContainerRegistry: &v1.PostApplicationBodyComponentDeploySourceContainerRegistry{ Image: "apprun-test.sakuracr.jp/apprun/test1:latest", }, }, diff --git a/fake/applications.go b/fake/applications.go index aca810f..73a95c0 100644 --- a/fake/applications.go +++ b/fake/applications.go @@ -102,11 +102,11 @@ func (engine *Engine) CreateApplication(reqBody *v1.PostApplicationBody) (*v1.Ap var components []v1.HandlerApplicationComponent for _, reqComponent := range reqBody.Components { - var cr v1.HandlerApplicationComponentDataSourceContainerRegistry - if reqComponent.Datasource.ContainerRegistry != nil { - cr.Image = reqComponent.Datasource.ContainerRegistry.Image - cr.Server = reqComponent.Datasource.ContainerRegistry.Server - cr.Username = reqComponent.Datasource.ContainerRegistry.Username + var cr v1.HandlerApplicationComponentDeploySourceContainerRegistry + if reqComponent.DeploySource.ContainerRegistry != nil { + cr.Image = reqComponent.DeploySource.ContainerRegistry.Image + cr.Server = reqComponent.DeploySource.ContainerRegistry.Server + cr.Username = reqComponent.DeploySource.ContainerRegistry.Username } var env []v1.HandlerApplicationComponentEnv @@ -138,7 +138,7 @@ func (engine *Engine) CreateApplication(reqBody *v1.PostApplicationBody) (*v1.Ap component.Name = reqComponent.Name component.MaxCpu = string(reqComponent.MaxCpu) component.MaxMemory = string(reqComponent.MaxMemory) - component.Datasource.ContainerRegistry = &cr + component.DeploySource.ContainerRegistry = &cr component.Env = &env component.Probe = &probe components = append(components, component) @@ -214,11 +214,11 @@ func (engine *Engine) UpdateApplication(id string, reqBody *v1.PatchApplicationB if reqBody.Components != nil && len(*reqBody.Components) > 0 { var components []v1.HandlerApplicationComponent for _, reqComponent := range *reqBody.Components { - var cr v1.HandlerApplicationComponentDataSourceContainerRegistry - if reqComponent.Datasource.ContainerRegistry != nil { - cr.Image = reqComponent.Datasource.ContainerRegistry.Image - cr.Server = reqComponent.Datasource.ContainerRegistry.Server - cr.Username = reqComponent.Datasource.ContainerRegistry.Username + var cr v1.HandlerApplicationComponentDeploySourceContainerRegistry + if reqComponent.DeploySource.ContainerRegistry != nil { + cr.Image = reqComponent.DeploySource.ContainerRegistry.Image + cr.Server = reqComponent.DeploySource.ContainerRegistry.Server + cr.Username = reqComponent.DeploySource.ContainerRegistry.Username } var env []v1.HandlerApplicationComponentEnv @@ -250,7 +250,7 @@ func (engine *Engine) UpdateApplication(id string, reqBody *v1.PatchApplicationB component.Name = reqComponent.Name component.MaxCpu = string(reqComponent.MaxCpu) component.MaxMemory = string(reqComponent.MaxMemory) - component.Datasource.ContainerRegistry = &cr + component.DeploySource.ContainerRegistry = &cr component.Env = &env component.Probe = &probe components = append(components, component) diff --git a/fake/applications_test.go b/fake/applications_test.go index 6eb8753..81ee560 100644 --- a/fake/applications_test.go +++ b/fake/applications_test.go @@ -102,7 +102,7 @@ func TestEngine_Application(t *testing.T) { "name": "component1", "max_cpu": "0.2", "max_memory": "512Mi", - "datasource": { + "deploy_source": { "container_registry": { "image": "apprun-example.sakuracr.jp/helloworld:latest", "server": "apprun-example.sakuracr.jp", @@ -161,7 +161,7 @@ func TestEngine_Application(t *testing.T) { "name": "component1", "max_cpu": "0.2", "max_memory": "512Mi", - "datasource": { + "deploy_source": { "container_registry": { "image": "apprun-example.sakuracr.jp/helloworld:latest", "server": "apprun-example.sakuracr.jp", @@ -253,8 +253,8 @@ func postApplicationBody() *v1.PostApplicationBody { Name: "component1", MaxCpu: "0.2", MaxMemory: "512Mi", - Datasource: v1.PostApplicationBodyComponentDataSource{ - ContainerRegistry: &v1.PostApplicationBodyComponentDataSourceContainerRegistry{ + DeploySource: v1.PostApplicationBodyComponentDeploySource{ + ContainerRegistry: &v1.PostApplicationBodyComponentDeploySourceContainerRegistry{ Image: "apprun-example.sakuracr.jp/helloworld:latest", Server: &server, Username: &userName, diff --git a/fake/versions_test.go b/fake/versions_test.go index 0bd9f67..70e67ae 100644 --- a/fake/versions_test.go +++ b/fake/versions_test.go @@ -115,7 +115,7 @@ func TestEngine_Version(t *testing.T) { "name": "component1", "max_cpu": "0.2", "max_memory": "512Mi", - "datasource": { + "deploy_source": { "container_registry": { "image": "apprun-example.sakuracr.jp/helloworld:latest", "server": "apprun-example.sakuracr.jp",