diff --git a/.github/workflows/test-spec.yml b/.github/workflows/test-spec.yml index 23f0fffc6..a2d939161 100644 --- a/.github/workflows/test-spec.yml +++ b/.github/workflows/test-spec.yml @@ -42,6 +42,8 @@ jobs: tests: plugins/notifications - version: 2.17.0 tests: plugins/query_insights + - version: 2.17.0 + tests: plugins/wlm - version: 2.18.0 hub: opensearchstaging ref: '@sha256:57a1cd1142d68c203e2e4aa0666d9a691e1e409a5d14aa4a8f5044036f05cf06' diff --git a/spec/namespaces/wlm.yaml b/spec/namespaces/wlm.yaml new file mode 100644 index 000000000..300a59c28 --- /dev/null +++ b/spec/namespaces/wlm.yaml @@ -0,0 +1,127 @@ +openapi: 3.1.0 +info: + title: OpenSearch Workload Management API + description: OpenSearch Workload Management API + version: 1.0.0 +paths: + /_wlm/query_group: + get: + operationId: query_group.get.0 + x-operation-group: query_group.get + x-version-added: '2.17' + description: Gets the specified QueryGroup or get all if no name is provided. + responses: + '200': + $ref: '#/components/responses/query_group.get@200' + put: + operationId: query_group.create.0 + x-operation-group: query_group.create + x-version-added: '2.17' + description: Creates a specified query group. + requestBody: + $ref: '#/components/requestBodies/query_group.create' + responses: + '200': + $ref: '#/components/responses/query_group.create@200' + /_wlm/query_group/{name}: + get: + operationId: query_group.get.1 + x-operation-group: query_group.get + x-version-added: '2.17' + description: Gets the specified QueryGroup or get all if no name is provided. + parameters: + - $ref: '#/components/parameters/query_group.get::path.name' + responses: + '200': + $ref: '#/components/responses/query_group.get@200' + put: + operationId: query_group.update.0 + x-operation-group: query_group.update + x-version-added: '2.17' + description: Updates a specified query group. + parameters: + - $ref: '#/components/parameters/query_group.update::path.name' + requestBody: + $ref: '#/components/requestBodies/query_group.update' + responses: + '200': + $ref: '#/components/responses/query_group.update@200' + delete: + operationId: query_group.delete.1 + x-operation-group: query_group.delete + x-version-added: '2.17' + description: Deletes the specified QueryGroups or delete all if no name is provided. + parameters: + - $ref: '#/components/parameters/query_group.delete::path.name' + responses: + '200': + $ref: '#/components/responses/query_group.delete@200' +components: + requestBodies: + query_group.create: + content: + application/json: + schema: + $ref: '../schemas/wlm._common.yaml#/components/schemas/QueryGroupCreate' + required: true + query_group.update: + content: + application/json: + schema: + $ref: '../schemas/wlm._common.yaml#/components/schemas/QueryGroupUpdate' + required: true + responses: + query_group.create@200: + description: '' + content: + application/json: + schema: + $ref: '../schemas/wlm._common.yaml#/components/schemas/QueryGroupResponse' + query_group.update@200: + description: '' + content: + application/json: + schema: + $ref: '../schemas/wlm._common.yaml#/components/schemas/QueryGroupResponse' + query_group.delete@200: + description: '' + content: + application/json: + schema: + type: object + properties: + acknowledged: + type: boolean + query_group.get@200: + description: '' + content: + application/json: + schema: + type: object + properties: + query_groups: + type: array + items: + $ref: '../schemas/wlm._common.yaml#/components/schemas/QueryGroupResponse' + parameters: + query_group.update::path.name: + name: name + in: path + description: QueryGroup name. + schema: + type: string + required: true + query_group.delete::path.name: + name: name + in: path + description: QueryGroup name. + schema: + type: string + required: true + query_group.get::path.name: + name: name + in: path + description: QueryGroup name. + schema: + type: string + required: true diff --git a/spec/schemas/wlm._common.yaml b/spec/schemas/wlm._common.yaml new file mode 100644 index 000000000..7dff2eb59 --- /dev/null +++ b/spec/schemas/wlm._common.yaml @@ -0,0 +1,98 @@ +openapi: 3.1.0 +info: + title: Schemas of wlm._common category + description: Schemas of wlm._common category + version: 1.0.0 +paths: {} +components: + schemas: + QueryGroupResponse: + type: object + properties: + _id: + type: string + name: + type: string + resiliency_mode: + type: string + enum: [ "soft", "enforced", "monitor" ] + updated_at: + type: integer + format: int64 + resource_limits: + anyOf: + - type: object + properties: + memory: + type: number + format: double + cpu: + type: number + format: double + required: + - memory + - type: object + properties: + memory: + type: number + format: double + cpu: + type: number + format: double + required: + - cpu + required: + - _id + - name + - resiliency_mode + - updated_at + - resource_limits + QueryGroupCreate: + type: object + properties: + name: + type: string + resiliency_mode: + type: string + enum: [ "soft", "enforced", "monitor" ] + resource_limits: + anyOf: + - type: object + properties: + memory: + type: number + format: double + cpu: + type: number + format: double + required: + - memory + - type: object + properties: + memory: + type: number + format: double + cpu: + type: number + format: double + required: + - cpu + required: + - name + - resiliency_mode + - resource_limits + QueryGroupUpdate: + type: object + properties: + resiliency_mode: + type: string + enum: [ "soft", "enforced", "monitor" ] + resource_limits: + type: object + properties: + memory: + type: number + format: double + cpu: + type: number + format: double diff --git a/tests/plugins/wlm/Dockerfile b/tests/plugins/wlm/Dockerfile new file mode 100644 index 000000000..2d040ccb8 --- /dev/null +++ b/tests/plugins/wlm/Dockerfile @@ -0,0 +1,6 @@ +ARG OPENSEARCH_DOCKER_HUB_PROJECT +ARG OPENSEARCH_VERSION +ARG OPENSEARCH_DOCKER_REF + +FROM ${OPENSEARCH_DOCKER_HUB_PROJECT}/opensearch:${OPENSEARCH_VERSION}${OPENSEARCH_DOCKER_REF} +RUN ./bin/opensearch-plugin install -b workload-management diff --git a/tests/plugins/wlm/docker-compose.yml b/tests/plugins/wlm/docker-compose.yml new file mode 100644 index 000000000..c334c477f --- /dev/null +++ b/tests/plugins/wlm/docker-compose.yml @@ -0,0 +1,17 @@ +version: '3' + +services: + opensearch-cluster: + build: + context: . + args: + - OPENSEARCH_DOCKER_HUB_PROJECT=${OPENSEARCH_DOCKER_HUB_PROJECT:-opensearchproject} + - OPENSEARCH_DOCKER_REF=${OPENSEARCH_DOCKER_REF} + - OPENSEARCH_VERSION=2.17.0 + ports: + - 9200:9200 + - 9600:9600 + environment: + - OPENSEARCH_INITIAL_ADMIN_PASSWORD=${OPENSEARCH_PASSWORD:-myStrongPassword123!} + - OPENSEARCH_JAVA_OPTS=${OPENSEARCH_JAVA_OPTS} + - discovery.type=single-node diff --git a/tests/plugins/wlm/query_group/query_group.yaml b/tests/plugins/wlm/query_group/query_group.yaml new file mode 100644 index 000000000..dc69de13e --- /dev/null +++ b/tests/plugins/wlm/query_group/query_group.yaml @@ -0,0 +1,67 @@ +$schema: ../../../../json_schemas/test_story.schema.yaml + +description: This story tests all endpoints relevant to QueryGroups, from creation to deletion. + +prologues: + - path: /_wlm/query_group + version: '>= 2.17' + method: PUT + request: + payload: + name: analytics + resource_limits: + memory: 0.1 + resiliency_mode: monitor + status: [200] + - path: /_wlm/query_group + version: '>= 2.17' + method: PUT + request: + payload: + name: analytics2 + resource_limits: + memory: 0.15 + cpu: 0.05 + resiliency_mode: monitor + status: [200] + +chapters: + - synopsis: Update the QueryGroup named `analytics2`, with resiliency_mode to be enforced and memory to be 0.25 and cpu to be 0.25. + version: '>= 2.17' + path: /_wlm/query_group/{name} + method: PUT + parameters: + name: analytics2 + request: + payload: + resource_limits: + memory: 0.25 + cpu: 0.25 + resiliency_mode: enforced + response: + status: 200 + - synopsis: Get the QueryGroup named `analytics2`. + version: '>= 2.17' + path: /_wlm/query_group/{name} + method: GET + parameters: + name: analytics2 + response: + status: 200 + payload: + query_groups: + - name: analytics2 + resource_limits: + memory: 0.25 + cpu: 0.25 + resiliency_mode: enforced + +epilogues: + - path: /_wlm/query_group/analytics + version: '>= 2.17' + method: DELETE + status: [200] + - path: /_wlm/query_group/analytics2 + version: '>= 2.17' + method: DELETE + status: [200]