From c90e8d2d81176f955e80b797c59d920c1ffbd6e9 Mon Sep 17 00:00:00 2001 From: Helio Machado <0x2b3bfa0+git@googlemail.com> Date: Tue, 23 Nov 2021 23:08:42 +0100 Subject: [PATCH 01/15] Test automatic stop mechanism Also: * Add sleep on test polling loops * Fix unsafe access to event time on Azure * Wait for data to be synchronized before exiting * Fix testing inconsistencies --- .github/workflows/smoke.yml | 106 +++++++++--------- .../resource_virtual_machine_scale_set.go | 7 +- task/task_test.go | 33 ++++-- 3 files changed, 77 insertions(+), 69 deletions(-) diff --git a/.github/workflows/smoke.yml b/.github/workflows/smoke.yml index 7cf63137..57d38358 100644 --- a/.github/workflows/smoke.yml +++ b/.github/workflows/smoke.yml @@ -10,58 +10,14 @@ jobs: runs-on: ubuntu-latest steps: - run: echo ✓ - start: - needs: authorize - runs-on: ubuntu-latest - timeout-minutes: 30 - outputs: - kubeconfig: ${{ steps.cluster.outputs.kubeconfig }} - steps: - - id: cluster - run: | - az login \ - --service-principal \ - --user="$AZURE_CLIENT_ID" \ - --password="$AZURE_CLIENT_SECRET" \ - --tenant="$AZURE_TENANT_ID" - az account set \ - --subscription="$AZURE_SUBSCRIPTION_ID" - az extension add \ - --name=aks-preview - az provider register \ - --namespace=Microsoft.ContainerService - az feature register \ - --namespace=Microsoft.ContainerService \ - --name=GPUDedicatedVHDPreview - az group create \ - --name="tpiSmokeTestCluster$GITHUB_RUN_ID" \ - --location=eastus - az aks create \ - --resource-group="tpiSmokeTestCluster$GITHUB_RUN_ID" \ - --name="tpiSmokeTestCluster$GITHUB_RUN_ID" \ - --node-vm-size=Standard_NC6 \ - --node-count=1 \ - --aks-custom-headers=UseGPUDedicatedVHD=true \ - --generate-ssh-keys - az aks get-credentials \ - --resource-group="tpiSmokeTestCluster$GITHUB_RUN_ID" \ - --name="tpiSmokeTestCluster$GITHUB_RUN_ID" \ - --file - | - perl -p -e 's/%/%25/g;' -e 's/\n/%0A/g;' -e 's/\r/%0D/g;' | - xargs -0 printf "::set-output name=kubeconfig::%s\n" - env: - AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} - AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} - AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} test: - needs: start + needs: authorize runs-on: ubuntu-latest timeout-minutes: 60 strategy: fail-fast: false matrix: - provider: [AWS, AZ, GCP, K8S] + provider: [AWS, AZ, GCP] env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} @@ -71,8 +27,6 @@ jobs: AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} GOOGLE_APPLICATION_CREDENTIALS_DATA: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS_DATA }} - KUBECONFIG_DATA: ${{ needs.start.outputs.kubeconfig }} - SMOKE_TEST_IDENTIFIER: smoke test ${{ github.run_id }} SMOKE_TEST_ENABLE_${{ matrix.provider }}: true steps: - uses: actions/checkout@v2 @@ -88,12 +42,21 @@ jobs: run: go test ./task -v -timeout=30m -count=1 env: SMOKE_TEST_SWEEP: true - stop: - if: always() - needs: test + test-k8s: + name: test (K8S) + needs: authorize runs-on: ubuntu-latest timeout-minutes: 30 + env: + AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} + AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} + AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} steps: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + with: + go-version: ^1.17 - run: | az login \ --service-principal \ @@ -102,11 +65,42 @@ jobs: --tenant="$AZURE_TENANT_ID" az account set \ --subscription="$AZURE_SUBSCRIPTION_ID" + - id: cluster + run: | + az extension add \ + --name=aks-preview + az provider register \ + --namespace=Microsoft.ContainerService + az feature register \ + --namespace=Microsoft.ContainerService \ + --name=GPUDedicatedVHDPreview + az group create \ + --name="tpiSmokeTestCluster$GITHUB_RUN_ID" \ + --location=eastus + az aks create \ + --resource-group="tpiSmokeTestCluster$GITHUB_RUN_ID" \ + --name="tpiSmokeTestCluster$GITHUB_RUN_ID" \ + --node-vm-size=Standard_NC6 \ + --node-count=1 \ + --aks-custom-headers=UseGPUDedicatedVHD=true \ + --generate-ssh-keys + az aks get-credentials \ + --resource-group="tpiSmokeTestCluster$GITHUB_RUN_ID" \ + --name="tpiSmokeTestCluster$GITHUB_RUN_ID" \ + --file - | + perl -0777p \ + -e 's/%/%25/g;' \ + -e 's/\n/%0A/g;' \ + -e 's/\r/%0D/g;' \ + -e 's/(.+)/::add-mask::\1\n::set-output name=kubeconfig::\1\n/g' + - run: go test ./task -v -timeout=30m -count=1 + env: + KUBECONFIG_DATA: ${{ steps.cluster.outputs.kubeconfig }} + SMOKE_TEST_ENABLE_K8S: true + - if: always() + run: | az group delete \ --name="tpiSmokeTestCluster$GITHUB_RUN_ID" \ --yes - env: - AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} - AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} - AZURE_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} - AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} +env: + SMOKE_TEST_IDENTIFIER: smoke test ${{ github.run_id }} diff --git a/task/az/resources/resource_virtual_machine_scale_set.go b/task/az/resources/resource_virtual_machine_scale_set.go index 8b6cdf90..a1dc0db6 100644 --- a/task/az/resources/resource_virtual_machine_scale_set.go +++ b/task/az/resources/resource_virtual_machine_scale_set.go @@ -7,6 +7,7 @@ import ( "fmt" "net" "regexp" + "time" "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2020-06-30/compute" @@ -240,8 +241,12 @@ func (v *VirtualMachineScaleSet) Read(ctx context.Context) error { } if scaleSetView.Statuses != nil { for _, status := range *scaleSetView.Statuses { + statusTime := time.Unix(0, 0) + if status.Time != nil { + statusTime = status.Time.Time + } v.Attributes.Events = append(v.Attributes.Events, common.Event{ - Time: status.Time.Time, + Time: statusTime, Code: to.String(status.Code), Description: []string{ string(status.Level), diff --git a/task/task_test.go b/task/task_test.go index dd1d9f1e..d22b1fa9 100644 --- a/task/task_test.go +++ b/task/task_test.go @@ -3,6 +3,7 @@ package task import ( "context" "os" + "strings" "testing" "time" @@ -48,8 +49,8 @@ func TestTask(t *testing.T) { } t.Run(string(provider), func(t *testing.T) { - oldData := gofakeit.Phrase() - newData := gofakeit.Phrase() + oldData := gofakeit.UUID() + newData := gofakeit.UUID() dataDirectory := t.TempDir() dataFile := filepath.Join(dataDirectory, "data") @@ -75,8 +76,10 @@ func TestTask(t *testing.T) { Environment: common.Environment{ Image: "ubuntu", Script: `#!/bin/bash - cat data - echo "$ENVIRONMENT_VARIABLE_DATA" | tee data + mv data data.old + echo "$ENVIRONMENT_VARIABLE_DATA" > data + sleep 60 + cat data data.old `, Variables: map[string]*string{ "ENVIRONMENT_VARIABLE_DATA": &newData, @@ -88,7 +91,6 @@ func TestTask(t *testing.T) { Ingress: common.FirewallRule{ Ports: &[]uint16{22}, }, - // Egress: everything open. }, Spot: common.SpotEnabled, Parallelism: 1, @@ -120,23 +122,22 @@ func TestTask(t *testing.T) { require.Nil(t, err) for _, log := range logs { - if assert.Contains(t, log, oldData) && - assert.Contains(t, log, newData) { + if strings.Contains(t, log, oldData) && + strings.Contains(t, log, newData) { break loop } } + + time.Sleep(10 * time.Second) } if provider == common.ProviderK8S { require.Equal(t, newTask.Start(ctx), common.NotImplementedError) require.Equal(t, newTask.Stop(ctx), common.NotImplementedError) } else { - require.Nil(t, newTask.Stop(ctx)) - require.Nil(t, newTask.Stop(ctx)) - for assert.Nil(t, newTask.Read(ctx)) && newTask.Status(ctx)[common.StatusCodeRunning] > 0 { - continue + time.Sleep(10 * time.Second) } require.Nil(t, newTask.Start(ctx)) @@ -144,7 +145,15 @@ func TestTask(t *testing.T) { for assert.Nil(t, newTask.Read(ctx)) && newTask.Status(ctx)[common.StatusCodeRunning] == 0 { - continue + time.Sleep(10 * time.Second) + } + + require.Nil(t, newTask.Stop(ctx)) + require.Nil(t, newTask.Stop(ctx)) + + for assert.Nil(t, newTask.Read(ctx)) && + newTask.Status(ctx)[common.StatusCodeRunning] > 0 { + time.Sleep(10 * time.Second) } } From 1e74e01752a6cf9840242139c49ea88c53122add Mon Sep 17 00:00:00 2001 From: Helio Machado <0x2b3bfa0+git@googlemail.com> Date: Wed, 24 Nov 2021 05:33:52 +0100 Subject: [PATCH 02/15] Update task/task_test.go --- task/task_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/task/task_test.go b/task/task_test.go index d22b1fa9..069039e6 100644 --- a/task/task_test.go +++ b/task/task_test.go @@ -76,10 +76,10 @@ func TestTask(t *testing.T) { Environment: common.Environment{ Image: "ubuntu", Script: `#!/bin/bash - mv data data.old - echo "$ENVIRONMENT_VARIABLE_DATA" > data + mv data /tmp/data + echo "$ENVIRONMENT_VARIABLE_DATA" | tee data sleep 60 - cat data data.old + cat /tmp/data `, Variables: map[string]*string{ "ENVIRONMENT_VARIABLE_DATA": &newData, From 96e27a51c36018b9ff7c8a0d5036efe58766e5cc Mon Sep 17 00:00:00 2001 From: Helio Machado <0x2b3bfa0+git@googlemail.com> Date: Wed, 24 Nov 2021 05:40:14 +0100 Subject: [PATCH 03/15] =?UTF-8?q?=F0=9F=99=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task/task_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/task/task_test.go b/task/task_test.go index 069039e6..36f71c3e 100644 --- a/task/task_test.go +++ b/task/task_test.go @@ -122,8 +122,8 @@ func TestTask(t *testing.T) { require.Nil(t, err) for _, log := range logs { - if strings.Contains(t, log, oldData) && - strings.Contains(t, log, newData) { + if strings.Contains(log, oldData) && + strings.Contains(log, newData) { break loop } } From 4f9b0f1ac172945a8be277ff84e28cda8dc2616e Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Sat, 19 Feb 2022 07:58:27 +0000 Subject: [PATCH 04/15] Restyled by gofmt --- task/task_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/task/task_test.go b/task/task_test.go index 0940f1f1..609c4e32 100644 --- a/task/task_test.go +++ b/task/task_test.go @@ -139,11 +139,11 @@ func TestTask(t *testing.T) { status, err := newTask.Status(ctx) require.Nil(t, err) if status[common.StatusCodeActive] == 0 && - status[common.StatusCodeSucceeded] > 0 { + status[common.StatusCodeSucceeded] > 0 { break - } else { - time.Sleep(10 * time.Second) - } + } else { + time.Sleep(10 * time.Second) + } } } From a06897729d86b0efec6d8eeaf9b3391d9febbaeb Mon Sep 17 00:00:00 2001 From: Helio Machado <0x2b3bfa0+git@googlemail.com> Date: Wed, 23 Feb 2022 20:44:37 +0100 Subject: [PATCH 05/15] Update smoke.yml --- .github/workflows/smoke.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/smoke.yml b/.github/workflows/smoke.yml index aeca891c..45ac5d3b 100644 --- a/.github/workflows/smoke.yml +++ b/.github/workflows/smoke.yml @@ -4,6 +4,7 @@ on: paths: 'task/**' schedule: - cron: '0 9 * * 1' + push: jobs: authorize: environment: ${{ github.event_name == 'schedule' && 'automatic' || 'manual' }} From f289cb97354f5070ee451ed0800d02523ab416be Mon Sep 17 00:00:00 2001 From: Helio Machado <0x2b3bfa0+git@googlemail.com> Date: Wed, 23 Feb 2022 20:49:35 +0100 Subject: [PATCH 06/15] Update smoke.yml --- .github/workflows/smoke.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/smoke.yml b/.github/workflows/smoke.yml index 45ac5d3b..06f09cea 100644 --- a/.github/workflows/smoke.yml +++ b/.github/workflows/smoke.yml @@ -13,6 +13,7 @@ jobs: - run: echo ✓ test: needs: authorize + environment: automatic runs-on: ubuntu-latest timeout-minutes: 60 strategy: @@ -48,6 +49,7 @@ jobs: test-k8s: name: test (K8S) needs: authorize + environment: automatic runs-on: ubuntu-latest timeout-minutes: 30 env: From a673a958bec07de8a5b3c16b38d0bc1fa4b0d2db Mon Sep 17 00:00:00 2001 From: Helio Machado <0x2b3bfa0+git@googlemail.com> Date: Wed, 23 Feb 2022 21:09:39 +0100 Subject: [PATCH 07/15] Update smoke.yml --- .github/workflows/smoke.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/smoke.yml b/.github/workflows/smoke.yml index aed9064e..70e9f754 100644 --- a/.github/workflows/smoke.yml +++ b/.github/workflows/smoke.yml @@ -6,7 +6,6 @@ on: paths: 'task/**' schedule: - cron: '0 9 * * 1' - push: jobs: authorize: environment: ${{ github.event_name == 'schedule' && 'automatic' || 'manual' }} From 100dc6e37c53d31b11dfa4ae2002277806b06cca Mon Sep 17 00:00:00 2001 From: Helio Machado <0x2b3bfa0+git@googlemail.com> Date: Mon, 28 Feb 2022 11:31:28 +0100 Subject: [PATCH 08/15] Update task_test.go --- task/task_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/task/task_test.go b/task/task_test.go index 609c4e32..6ab1593f 100644 --- a/task/task_test.go +++ b/task/task_test.go @@ -85,6 +85,7 @@ func TestTask(t *testing.T) { "ENVIRONMENT_VARIABLE_DATA": &newData, }, Directory: dataDirectory, + DirectoryOut: dataDirectory, Timeout: 10 * time.Minute, }, Firewall: common.Firewall{ From 15ab570856cf6bd51d470f957e54032c57cfe168 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Mon, 28 Feb 2022 10:31:32 +0000 Subject: [PATCH 09/15] Restyled by gofmt --- task/task_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/task/task_test.go b/task/task_test.go index 6ab1593f..6f097363 100644 --- a/task/task_test.go +++ b/task/task_test.go @@ -84,9 +84,9 @@ func TestTask(t *testing.T) { Variables: map[string]*string{ "ENVIRONMENT_VARIABLE_DATA": &newData, }, - Directory: dataDirectory, + Directory: dataDirectory, DirectoryOut: dataDirectory, - Timeout: 10 * time.Minute, + Timeout: 10 * time.Minute, }, Firewall: common.Firewall{ Ingress: common.FirewallRule{ From 1aa91f19ac8af408cc90fe24ff960c03a1d6c9b2 Mon Sep 17 00:00:00 2001 From: Helio Machado <0x2b3bfa0+git@googlemail.com> Date: Tue, 1 Mar 2022 11:00:30 +0100 Subject: [PATCH 10/15] Update data_source_credentials.go --- task/gcp/resources/data_source_credentials.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/task/gcp/resources/data_source_credentials.go b/task/gcp/resources/data_source_credentials.go index 357484d5..40b8681b 100644 --- a/task/gcp/resources/data_source_credentials.go +++ b/task/gcp/resources/data_source_credentials.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "strings" "terraform-provider-iterative/task/common" "terraform-provider-iterative/task/gcp/client" @@ -30,7 +31,7 @@ func (c *Credentials) Read(ctx context.Context) error { if len(c.Client.Credentials.JSON) == 0 { return errors.New("unable to find credentials JSON string") } - credentials := string(c.Client.Credentials.JSON) + credentials := strings.ReplaceAll(c.Client.Credentials.JSON, "\n", " ") connectionString := fmt.Sprintf( ":googlecloudstorage,service_account_credentials='%s':%s", From ce58f4907b14d88d8c5c5d412d338ae4b8cf4569 Mon Sep 17 00:00:00 2001 From: Helio Machado <0x2b3bfa0+git@googlemail.com> Date: Tue, 1 Mar 2022 11:13:21 +0100 Subject: [PATCH 11/15] Update data_source_credentials.go --- task/gcp/resources/data_source_credentials.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/task/gcp/resources/data_source_credentials.go b/task/gcp/resources/data_source_credentials.go index 40b8681b..88c5d143 100644 --- a/task/gcp/resources/data_source_credentials.go +++ b/task/gcp/resources/data_source_credentials.go @@ -31,7 +31,7 @@ func (c *Credentials) Read(ctx context.Context) error { if len(c.Client.Credentials.JSON) == 0 { return errors.New("unable to find credentials JSON string") } - credentials := strings.ReplaceAll(c.Client.Credentials.JSON, "\n", " ") + credentials := strings.ReplaceAll(string(c.Client.Credentials.JSON), "\n", " ") connectionString := fmt.Sprintf( ":googlecloudstorage,service_account_credentials='%s':%s", From 338f891a4c95b90d5314e29b6b448507b42f626f Mon Sep 17 00:00:00 2001 From: Helio Machado <0x2b3bfa0+git@googlemail.com> Date: Tue, 1 Mar 2022 23:18:22 +0100 Subject: [PATCH 12/15] Update task_test.go --- task/task_test.go | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/task/task_test.go b/task/task_test.go index 6f097363..623197f8 100644 --- a/task/task_test.go +++ b/task/task_test.go @@ -135,17 +135,18 @@ func TestTask(t *testing.T) { if provider == common.ProviderK8S { require.Equal(t, newTask.Start(ctx), common.NotImplementedError) require.Equal(t, newTask.Stop(ctx), common.NotImplementedError) - } else { - for assert.Nil(t, newTask.Read(ctx)) { - status, err := newTask.Status(ctx) - require.Nil(t, err) - if status[common.StatusCodeActive] == 0 && - status[common.StatusCodeSucceeded] > 0 { - break - } else { - time.Sleep(10 * time.Second) - } + } + + for assert.Nil(t, newTask.Read(ctx)) { + status, err := newTask.Status(ctx) + require.Nil(t, err) + + if status[common.StatusCodeActive] == 0 && + status[common.StatusCodeSucceeded] > 0 { + break } + + time.Sleep(10 * time.Second) } require.Nil(t, newTask.Delete(ctx)) From c5b01470716d0c34eac1f9bcfca7bd8e91234981 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Tue, 1 Mar 2022 22:18:26 +0000 Subject: [PATCH 13/15] Restyled by gofmt --- task/task_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/task/task_test.go b/task/task_test.go index 623197f8..f5f3bf07 100644 --- a/task/task_test.go +++ b/task/task_test.go @@ -136,16 +136,16 @@ func TestTask(t *testing.T) { require.Equal(t, newTask.Start(ctx), common.NotImplementedError) require.Equal(t, newTask.Stop(ctx), common.NotImplementedError) } - + for assert.Nil(t, newTask.Read(ctx)) { status, err := newTask.Status(ctx) require.Nil(t, err) - + if status[common.StatusCodeActive] == 0 && status[common.StatusCodeSucceeded] > 0 { break } - + time.Sleep(10 * time.Second) } From 69a71621c5a325fc027d5ebc0281a80e0c57e714 Mon Sep 17 00:00:00 2001 From: Helio Machado <0x2b3bfa0+git@googlemail.com> Date: Tue, 1 Mar 2022 23:21:46 +0100 Subject: [PATCH 14/15] Update task_test.go --- task/task_test.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/task/task_test.go b/task/task_test.go index f5f3bf07..14d7ce05 100644 --- a/task/task_test.go +++ b/task/task_test.go @@ -76,10 +76,9 @@ func TestTask(t *testing.T) { Environment: common.Environment{ Image: "ubuntu", Script: `#!/bin/bash - mv data /tmp/data - echo "$ENVIRONMENT_VARIABLE_DATA" | tee data + echo "$ENVIRONMENT_VARIABLE_DATA" | tee --append data sleep 60 - cat /tmp/data + cat data `, Variables: map[string]*string{ "ENVIRONMENT_VARIABLE_DATA": &newData, From cf0250d05df7d5bc786c0ffc551f2c756c405682 Mon Sep 17 00:00:00 2001 From: Helio Machado <0x2b3bfa0+git@googlemail.com> Date: Tue, 1 Mar 2022 22:57:53 +0000 Subject: [PATCH 15/15] Fix GCP --- task/common/machine/script.go | 2 +- task/gcp/resources/data_source_credentials.go | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/task/common/machine/script.go b/task/common/machine/script.go index 2a6efead..f13cf824 100644 --- a/task/common/machine/script.go +++ b/task/common/machine/script.go @@ -61,7 +61,7 @@ sudo tee /etc/systemd/system/tpi-task.service > /dev/null < "$TPI_LOG_DIRECTORY/status-$TPI_MACHINE_IDENTITY" && rclone copy "$TPI_LOG_DIRECTORY" "$RCLONE_REMOTE/reports"' + ExecStop=/bin/bash -c 'systemctl is-system-running | grep stopping || echo "{\\\\"result\\\\": \\\\"\$SERVICE_RESULT\\\\", \\\\"code\\\\": \\\\"\$EXIT_STATUS\\\\", \\\\"status\\\\": \\\\"\$EXIT_CODE\\\\"}" > "$TPI_LOG_DIRECTORY/status-$TPI_MACHINE_IDENTITY" && rclone copy "$TPI_LOG_DIRECTORY" "\$RCLONE_REMOTE/reports"' ExecStopPost=/usr/bin/tpi-task-shutdown Environment=HOME=/root EnvironmentFile=/tmp/tpi-environment diff --git a/task/gcp/resources/data_source_credentials.go b/task/gcp/resources/data_source_credentials.go index 88c5d143..357484d5 100644 --- a/task/gcp/resources/data_source_credentials.go +++ b/task/gcp/resources/data_source_credentials.go @@ -4,7 +4,6 @@ import ( "context" "errors" "fmt" - "strings" "terraform-provider-iterative/task/common" "terraform-provider-iterative/task/gcp/client" @@ -31,7 +30,7 @@ func (c *Credentials) Read(ctx context.Context) error { if len(c.Client.Credentials.JSON) == 0 { return errors.New("unable to find credentials JSON string") } - credentials := strings.ReplaceAll(string(c.Client.Credentials.JSON), "\n", " ") + credentials := string(c.Client.Credentials.JSON) connectionString := fmt.Sprintf( ":googlecloudstorage,service_account_credentials='%s':%s",