From 190a4600d41b16cc37244e046ac261365aeeac3b Mon Sep 17 00:00:00 2001 From: Derek Ho Date: Fri, 19 Apr 2024 11:39:00 -0400 Subject: [PATCH] Update action and usage in docs Signed-off-by: Derek Ho --- .github/actions/start-opensearch/action.yml | 98 +++++++++---------- DEVELOPER_GUIDE.md | 25 +++++ .../1_create_datasource.spec.js | 8 +- 3 files changed, 78 insertions(+), 53 deletions(-) diff --git a/.github/actions/start-opensearch/action.yml b/.github/actions/start-opensearch/action.yml index b700f4a3a..7aada20ce 100644 --- a/.github/actions/start-opensearch/action.yml +++ b/.github/actions/start-opensearch/action.yml @@ -1,5 +1,5 @@ -name: 'Launch OpenSearch with or without plugins' -description: 'Downloads latest build of OpenSearch, optionally installs plugins, and then starts OpenSearch on localhost:9200' +name: 'Launch OpenSearch' +description: 'Downloads OpenSearch and runs it' inputs: opensearch-version: @@ -25,6 +25,7 @@ inputs: port: description: 'Port to run OpenSearch. Leave empty to use the default config (9200)' required: false + default: '9200' runs: using: "composite" @@ -46,68 +47,50 @@ runs: uses: peternied/download-file@v2 if: ${{ runner.os == 'Windows' }} with: - url: https://artifacts.opensearch.org/snapshots/core/opensearch/${{ inputs.opensearch-version }}-SNAPSHOT/opensearch-min-${{ inputs.opensearch-version }}-SNAPSHOT-windows-x64-latest.zip + url: https://ci.opensearch.org/ci/dbc/distribution-build-opensearch/${{ inputs.opensearch-version }}/latest/windows/x64/zip/dist/opensearch/opensearch-${{ inputs.opensearch-version }}-windows-x64.zip - name: Download OpenSearch for Linux uses: peternied/download-file@v2 if: ${{ runner.os == 'Linux' }} with: - url: https://artifacts.opensearch.org/snapshots/core/opensearch/${{ inputs.opensearch-version }}-SNAPSHOT/opensearch-min-${{ inputs.opensearch-version }}-SNAPSHOT-linux-x64-latest.tar.gz + url: https://ci.opensearch.org/ci/dbc/distribution-build-opensearch/${{ inputs.opensearch-version }}/latest/linux/x64/tar/dist/opensearch/opensearch-${{ inputs.opensearch-version }}-linux-x64.tar.gz # Extract downloaded zip - name: Extract downloaded tar if: ${{ runner.os == 'Linux' }} run: | - tar -xzf opensearch-*.tar.gz + tar -xzf opensearch-*.tar.gz && mv opensearch-${{ inputs.opensearch-version }} opensearch-${{inputs.opensearch-version}}-SNAPSHOT${{ inputs.port }} rm -f opensearch-*.tar.gz shell: bash - name: Extract downloaded zip if: ${{ runner.os == 'Windows' }} run: | - tar -xzf opensearch-min-${{ inputs.opensearch-version }}-SNAPSHOT-windows-x64-latest.zip - del opensearch-min-${{ inputs.opensearch-version }}-SNAPSHOT-windows-x64-latest.zip + Expand-Archive -Path "opensearch-${{ inputs.opensearch-version }}-windows-x64-latest.zip" -DestinationPath "temp" + Move-Item -Path "temp/*" -Destination "opensearch-${{ inputs.opensearch-version }}-SNAPSHOT${{ inputs.port }}" + Remove-Item -Path "temp" -Recurse + Remove-Item -Path "opensearch-${{ inputs.opensearch-version }}-windows-x64-latest.zip" shell: pwsh - - name: Install plugin(s) into OpenSearch for Linux - if: ${{ runner.os == 'Linux'}} - run: | - chmod +x ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT/bin/opensearch-plugin - plugins="${{ inputs.plugins }}" - if [ -n "$plugins" ]; then - echo "$plugins" | tr ',' '\n' | while read -r plugin; do - /bin/bash -c "yes | ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT/bin/opensearch-plugin install ${plugin}" - done - fi - shell: bash - - - name: Install plugin(s) into OpenSearch for Windows - if: ${{ runner.os == 'Windows' && inputs.plugins != '' }} - run: | - $pluginNames = "${{ inputs.plugins }}" -split ',' - if ($pluginNames.Length -gt 0) { - foreach ($plugin in $pluginNames) { - 'y' | .\opensearch-${{ inputs.opensearch-version }}-SNAPSHOT\bin\opensearch-plugin.bat install ${plugin} - } - } - shell: pwsh - - - name: Replace security configuration file if applicable - if: ${{ inputs.security_config_file != '' }} - run: | - mv ${{ inputs.security_config_file }} ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT/config/opensearch-security/config.yml - shell: bash - # Setup security if it's enabled - name: Setup security demo configuration if: ${{ runner.os == 'Linux' && inputs.security-enabled == 'true' }} run: | echo "running linux security demo configuration setup" export OPENSEARCH_INITIAL_ADMIN_PASSWORD=${{ inputs.admin-password }} - chmod +x ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT/plugins/opensearch-security/tools/install_demo_configuration.sh - /bin/bash -c "yes | ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT/plugins/opensearch-security/tools/install_demo_configuration.sh -t" - echo "plugins.security.unsupported.restapi.allow_securityconfig_modification: true" >> ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT/config/opensearch.yml + chmod +x ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT${{ inputs.port }}/plugins/opensearch-security/tools/install_demo_configuration.sh + opensearch_version="${{ inputs.opensearch-version }}" + opensearch_major_version=$(echo "$opensearch_version" | awk -F'.' '{print $1}') + opensearch_minor_version=$(echo "$opensearch_version" | awk -F'.' '{print $2}') + if [ "$opensearch_major_version" -lt 2 ] || ([ "$opensearch_major_version" -eq 2 ] && [ "$opensearch_minor_version" -lt 12 ]); then + echo "Running the command without -t option (OpenSearch version is $opensearch_version)" + /bin/bash -c "yes | ./opensearch-${opensearch_version}-SNAPSHOT${{ inputs.port }}/plugins/opensearch-security/tools/install_demo_configuration.sh" + else + echo "Running the command with -t option (OpenSearch version is $opensearch_version)" + /bin/bash -c "yes | ./opensearch-${opensearch_version}-SNAPSHOT${{ inputs.port }}/plugins/opensearch-security/tools/install_demo_configuration.sh -t" + fi + echo "plugins.security.unsupported.restapi.allow_securityconfig_modification: true" >> ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT${{ inputs.port }}/config/opensearch.yml shell: bash - name: Setup security demo configuration for Windows @@ -115,32 +98,49 @@ runs: run: | echo "running windows security demo configuration setup" export OPENSEARCH_INITIAL_ADMIN_PASSWORD=${{ inputs.admin-password }} - chmod +x ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT/plugins/opensearch-security/tools/install_demo_configuration.bat - /bin/bash -c "yes | ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT/plugins/opensearch-security/tools/install_demo_configuration.bat -t" - echo "plugins.security.unsupported.restapi.allow_securityconfig_modification: true" >> ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT/config/opensearch.yml + chmod +x ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT${{ inputs.port }}/plugins/opensearch-security/tools/install_demo_configuration.bat + opensearch_version="${{ inputs.opensearch-version }}" + opensearch_major_version=$(echo "$opensearch_version" | cut -d'.' -f1) + opensearch_minor_version=$(echo "$opensearch_version" | cut -d'.' -f2) + if [ "$opensearch_major_version" -lt 2 ] || ([ "$opensearch_major_version" -eq 2 ] && [ "$opensearch_minor_version" -lt 12 ]); then + echo "Running the command without -t option (OpenSearch version is $opensearch_version)" + /bin/bash -c "yes | ./opensearch-${opensearch_version}-SNAPSHOT${{ inputs.port }}/plugins/opensearch-security/tools/install_demo_configuration.bat -y -i -s" + else + echo "Running the command with -t option (OpenSearch version is $opensearch_version)" + /bin/bash -c "yes | ./opensearch-${opensearch_version}-SNAPSHOT${{ inputs.port }}/plugins/opensearch-security/tools/install_demo_configuration.bat -t -y -i -s" + fi + echo "plugins.security.unsupported.restapi.allow_securityconfig_modification: true" >> ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT${{ inputs.port }}/config/opensearch.yml + shell: bash + + # Disable security if it's disabled + - name: Disable security + if: ${{ inputs.security-enbaled == 'false' }} + run: | + echo "Remove OpenSearch Security" + [ -d "plugins/opensearch-security" ] && echo "plugins.security.disabled: true" >> config/opensearch.yml shell: bash - name: Use more space run: | - echo '' >> ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT/config/opensearch.yml - echo "cluster.routing.allocation.disk.threshold_enabled: false" >> ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT/config/opensearch.yml + echo '' >> ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT${{ inputs.port }}/config/opensearch.yml + echo "cluster.routing.allocation.disk.threshold_enabled: false" >> ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT${{ inputs.port }}/config/opensearch.yml shell: bash - - name: Replace opensearch.yml file if applicable + - name: Use port if applicable if: ${{ inputs.port != '' }} run: | - echo -e "\nhttp.port: ${{ inputs.port }}" >> ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT/config/opensearch.yml + echo -e "\nhttp.port: ${{ inputs.port }}" >> ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT${{ inputs.port }}/config/opensearch.yml shell: bash # Run OpenSearch - name: Run OpenSearch with plugin on Linux if: ${{ runner.os == 'Linux'}} - run: /bin/bash -c "./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT/bin/opensearch &" + run: /bin/bash -c "./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT${{ inputs.port }}/bin/opensearch &" shell: bash - name: Run OpenSearch with plugin on Windows if: ${{ runner.os == 'Windows'}} - run: start .\opensearch-${{ inputs.opensearch-version }}-SNAPSHOT\bin\opensearch.bat + run: start .\opensearch-${{ inputs.opensearch-version }}-SNAPSHOT${{ inputs.port }}\bin\opensearch.bat shell: pwsh # Give the OpenSearch process some time to boot up before sending any requires, might need to increase the default time! @@ -177,5 +177,5 @@ runs: shell: pwsh - if: always() - run: cat ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT/logs/opensearch.log + run: cat ./opensearch-${{ inputs.opensearch-version }}-SNAPSHOT${{ inputs.port }}/logs/opensearch.log shell: bash \ No newline at end of file diff --git a/DEVELOPER_GUIDE.md b/DEVELOPER_GUIDE.md index 61b451ef7..49041f00a 100644 --- a/DEVELOPER_GUIDE.md +++ b/DEVELOPER_GUIDE.md @@ -125,6 +125,31 @@ Tests for plugins that are not a part of the [OpenSearch Dashboards](https://git / ``` +### Tests for Multiple Datasources + +Tests surrounding the multiple datasources feature can use the start-opensearch action that lives in this repo. + +Example usage: +``` +- uses: ./.github/actions/start-opensearch + with: + opensearch-version: 3.0.0 + security-enabled: false + port: 9201 +``` +This will spin up an OpenSearch backend with version 3.0.0 on port 9201 within the same github runner. This OpenSearch can then be added as an datasource. + +The DataSourceManagement Plugin exposes a helper function to create a helper function on this port: +``` +import {CreateDataSourceNoAuth} from 'datasource-management-plugin' + +CreateDataSourceNoAuth('9201').then((resp) => { + console.log(resp.body.id); + }); + +# Add tests that make calls to resp.body.id +``` + ### Experimental Features When writing tests for experimental features, please follow these steps. diff --git a/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/datasource-management-plugin/1_create_datasource.spec.js b/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/datasource-management-plugin/1_create_datasource.spec.js index 9d4bf9bdb..e123dd2f9 100644 --- a/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/datasource-management-plugin/1_create_datasource.spec.js +++ b/cypress/integration/core-opensearch-dashboards/opensearch-dashboards/datasource-management-plugin/1_create_datasource.spec.js @@ -17,7 +17,7 @@ const REGION = 'us-east-1'; const ACCESS_KEY = 'accessKey'; const SECRET_KEY = 'secretKey'; -export const CreateDataSourceNoAuth = () => { +export const CreateDataSourceNoAuth = (port) => { return cy.request({ method: 'POST', url: `${Cypress.config('baseUrl')}/api/saved_objects/data-source`, @@ -27,7 +27,7 @@ export const CreateDataSourceNoAuth = () => { body: { attributes: { title: `9201`, - endpoint: `http://localhost:9201`, + endpoint: `http://localhost:${port}`, auth: { type: 'no_auth', }, @@ -447,8 +447,8 @@ if (Cypress.env('DATASOURCE_MANAGEMENT_ENABLED')) { }); it('creates a datasources to a real opensearch instance', () => { - CreateDataSourceNoAuth().then((resp) => { - return resp.body.id; + CreateDataSourceNoAuth('9201').then((resp) => { + console.log(resp.body.id); }); }); });