Skip to content

fix(policy): properly formatted pem in test fixtures #2409

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from

Conversation

strantalis
Copy link
Member

Proposed Changes

Checklist

  • I have added or updated unit tests
  • I have added or updated integration tests (if appropriate)
  • I have added or updated documentation

Testing Instructions

@strantalis strantalis requested a review from a team as a code owner June 6, 2025 20:31
@github-actions github-actions bot added the size/s label Jun 6, 2025
Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hello @strantalis, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

Summary of Changes

Hello! Gemini here, providing a summary of this pull request. This PR primarily focuses on refining the test fixtures and integration tests related to KAS (Key Access Server) keys and provider configurations. The main intent seems to be to correctly handle cases where a KAS key might not have an associated provider configuration ID and to update the fixture data with more realistic or properly formatted key contexts. Additionally, it includes some minor cleanup and improvements to the test environment setup.

Highlights

  • KAS Key Fixtures Update: The structure for KAS key fixtures (FixtureDataKasRegistryKey) has been updated to make the ProviderConfigID field a pointer (*string), allowing it to be nil. The fixture data itself (policy_fixtures.yaml) has been updated with new key IDs (rsa_key_1, ec_key_1), different algorithms (RSA and EC), and seemingly more complete base64 encoded private and public key contexts.
  • Integration Test Adjustments: Integration tests for the KAS registry key functionality (kas_registry_key_test.go) have been modified to correctly handle the nullable ProviderConfigID. Assertions comparing ProviderConfigID now dereference the pointer (*s.kasKeys[0].ProviderConfigID). The validateListKeysResponse helper function was updated to accept an expected number of keys and check for nil ProviderConfigID in the response. Some ListKeys test assertions were adjusted for expected counts and pagination offsets.
  • Test Environment Setup Improvement: The main test setup (main_test.go) for the Postgres test container has been improved by adding a random suffix to the container name using uuid to prevent naming conflicts during parallel test runs. The explicit host port binding has been removed, allowing testcontainers to assign a dynamic port. The SQL wait timeout has been increased from 5s to 60s, and the wait query simplified to SELECT 1.
  • Configuration File Tweaks: Minor configuration changes were made in opentdf-dev.yaml and opentdf-kas-mode.yaml, adding preview and root_key settings under the kas section and changing single quotes to double quotes for string values in opentdf-kas-mode.yaml.

Changelog

Click here to see the changelog
  • opentdf-dev.yaml
    • Added preview and root_key configuration under the kas service.
    • Adjusted spacing in commented-out sections.
  • opentdf-kas-mode.yaml
    • Added preview and root_key configuration under the kas service.
    • Changed single quotes to double quotes for audience and allowedorigins values.
  • service/integration/kas_registry_key_test.go
    • Updated assertions in Test_GetKasKeyById_Success, Test_GetKasKeyByKeyId_Success, Test_GetKasKey_WithKasName_Success, and Test_GetKasKey_WithKasUri_Success to dereference the ProviderConfigID pointer.
    • Adjusted expected key counts in Test_ListKeys_KasID_Success, Test_ListKeys_KasName_Success, Test_ListKeys_KasURI_Success, and Test_ListKeys_FilterAlgo_TwoKeys_Success.
    • Corrected the expected NextOffset in Test_ListKeys_KasID_Limit_Success.
    • Modified validateListKeysResponse function signature to accept expected number of keys and updated the assertion.
    • Added a check for nil ProviderConfigID in the validateListKeysResponse helper.
  • service/integration/main_test.go
    • Removed unused import github.com/docker/docker/api/types/container.
    • Added import github.com/google/uuid.
    • Added a random suffix to the Postgres test container name using uuid.
    • Removed explicit HostConfigModifier for port binding.
    • Increased the SQL wait timeout from 5s to 60s and simplified the wait query to SELECT 1.
  • service/internal/fixtures/fixtures.go
    • Changed the type of ProviderConfigID in FixtureDataKasRegistryKey struct from string to *string (pointer).
    • Updated the provisionKasRegistryKeys function to handle nil ProviderConfigID pointers by inserting 'NULL' into the SQL.
  • service/internal/fixtures/policy_fixtures.yaml
    • Removed some empty lines for cleaner formatting.
    • Updated the key_id for kas_key_1 to rsa_key_1.
    • Updated the key_algorithm for kas_key_2 to ALGORITHM_EC_P256 and its key_id to ec_key_1.
    • Updated the private_key_ctx and public_key_ctx values for both KAS keys with new base64 encoded data.
    • Implicitly made provider_config_id optional for KAS keys by changing the struct field to a pointer.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist is currently in preview and may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments to provide feedback.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.


Fixtures fine-tuned,
Keys now nullable, tests pass,
Code review awaits.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request correctly addresses the PEM formatting in test fixtures and introduces several related improvements, such as making ProviderConfigID optional and enhancing test container stability. The changes are generally positive. However, there are a few areas that need attention, particularly concerning a hardcoded root_key in development configurations and some test assertions that could be more robust or might indicate a misunderstanding of the underlying logic.

Summary of Findings

  • Hardcoded Root Key: The root_key is hardcoded in opentdf-dev.yaml and opentdf-kas-mode.yaml. This could be a security risk if these configurations are used in environments beyond isolated local development. It's recommended to clarify its purpose and consider using environment variables or secrets management.
  • Test Robustness for Optional Fields: In service/integration/kas_registry_key_test.go, ProviderConfigID (which is now a pointer) is dereferenced in several test assertions without a prior nil check. While current fixtures might prevent a panic, this is not robust. The pattern in validateListKeysResponse (checking for nil) should be applied more broadly.
  • Pagination Logic in Test: An assertion for next_offset in Test_ListKeys_KasID_Limit_Success in kas_registry_key_test.go appears to contradict typical pagination logic where more items are available. This needs clarification.
  • YAML Formatting: Minor stylistic changes were made to YAML files (spacing around comments, quote style). These improve consistency but were not commented on directly due to severity settings.
  • Testcontainer Setup Improvements: Changes in service/integration/main_test.go (randomized container names, dynamic port mapping for PostgreSQL, increased startup timeout) are good improvements for test stability and CI compatibility.
  • Fixture Data Handling: The change to make ProviderConfigID in FixtureDataKasRegistryKey a pointer and the corresponding update in provisionKasRegistryKeys to handle SQL NULL values are correctly implemented.

Merge Readiness

The pull request addresses the intended fix for PEM formatting in test fixtures and includes several beneficial updates. However, before merging, I recommend addressing the concerns raised, particularly:

  1. Clarifying the nature of the hardcoded root_key in YAML configurations.
  2. Improving the robustness of test assertions in kas_registry_key_test.go by adding nil checks before dereferencing optional fields.
  3. Reviewing the pagination logic or test assertion for next_offset in Test_ListKeys_KasID_Limit_Success.

Once these medium-severity issues are addressed, the PR should be in a much better state for merging. As an AI, I am not authorized to approve pull requests; please ensure further review and approval from team members.

preview:
ec_tdf_enabled: false
key_management: false
root_key: a8c4824daafcfa38ed0d13002e92b08720e6c4fcee67d52e954c1a6e045907d1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The root_key is hardcoded in this development configuration file. While this might be acceptable for local development or testing, could you clarify if this key is a placeholder or has any sensitivity? For production or shared environments, it's crucial to manage such keys via environment variables or a secrets management system to avoid committing sensitive information to the repository. Even for development, using a placeholder value that's clearly identifiable as such (e.g., placeholder-dev-root-key) or sourcing it from environment variables can be a good practice.

preview:
ec_tdf_enabled: false
key_management: false
root_key: a8c4824daafcfa38ed0d13002e92b08720e6c4fcee67d52e954c1a6e045907d1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Similar to opentdf-dev.yaml, this root_key is hardcoded. Could you confirm its nature? If it's sensitive or intended for more than just isolated local testing, please consider managing it through environment variables or a secrets manager. Using a consistent, clearly non-production placeholder or environment variable sourcing is recommended even for dev-focused configurations.

@@ -180,7 +180,7 @@ func (s *KasRegistryKeySuite) Test_GetKasKeyById_Success() {
s.NotNil(resp)
s.Equal(s.kasKeys[0].KeyAccessServerID, resp.GetKasId())
s.Equal(s.kasKeys[0].ID, resp.GetKey().GetId())
s.Equal(s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId())
s.Equal(*s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId())
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Here, s.kasKeys[0].ProviderConfigID is dereferenced directly. While the current fixture for kas_key_1 (which s.kasKeys[0] likely refers to) has a ProviderConfigID, this direct dereference could lead to a panic if the fixture were to change or if this pattern is used for keys where ProviderConfigID might be nil.

Consider adopting the safer pattern used in validateListKeysResponse (lines 1354-1358) to check for nil before dereferencing. For example:

if s.kasKeys[0].ProviderConfigID == nil {
    s.Nil(resp.GetKey().GetProviderConfig())
} else {
    s.Equal(*s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId())
}

This would make the test more robust to changes in fixture data.

if s.kasKeys[0].ProviderConfigID == nil {
    s.Nil(resp.GetKey().GetProviderConfig())
} else {
    s.Equal(*s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId())
}

@@ -232,7 +232,7 @@
s.Equal(s.kasKeys[0].KeyAccessServerID, resp.GetKasId())
s.Equal(s.kasKeys[0].ID, resp.GetKey().GetId())
validatePrivatePublicCtx(&s.Suite, []byte(s.kasKeys[0].PrivateKeyCtx), []byte(s.kasKeys[0].PublicKeyCtx), resp)
s.Equal(s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId())
s.Equal(*s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId())
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Similar to the comment on line 183, *s.kasKeys[0].ProviderConfigID is dereferenced. It's safer to check if s.kasKeys[0].ProviderConfigID is nil before dereferencing to prevent potential panics if the fixture data changes. The approach in validateListKeysResponse is a good example of robust handling.

if s.kasKeys[0].ProviderConfigID == nil {
		s.Nil(resp.GetKey().GetProviderConfig())
	} else {
		s.Equal(*s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId())
	}

@@ -255,7 +255,7 @@
s.Equal(s.kasKeys[0].KeyAccessServerID, resp.GetKasId())
s.Equal(s.kasKeys[0].ID, resp.GetKey().GetId())
validatePrivatePublicCtx(&s.Suite, []byte(s.kasKeys[0].PrivateKeyCtx), []byte(s.kasKeys[0].PublicKeyCtx), resp)
s.Equal(s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId())
s.Equal(*s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId())
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Again, *s.kasKeys[0].ProviderConfigID is dereferenced. Please consider adding a nil check for s.kasKeys[0].ProviderConfigID before dereferencing to improve test robustness, as done in validateListKeysResponse.

if s.kasKeys[0].ProviderConfigID == nil {
		s.Nil(resp.GetKey().GetProviderConfig())
	} else {
		s.Equal(*s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId())
	}

@@ -279,7 +279,7 @@
s.Equal(s.kasKeys[0].ID, resp.GetKey().GetId())
validatePrivatePublicCtx(&s.Suite, []byte(s.kasKeys[0].PrivateKeyCtx), []byte(s.kasKeys[0].PublicKeyCtx), resp)
s.Require().NoError(err)
s.Equal(s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId())
s.Equal(*s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId())
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This line also dereferences *s.kasKeys[0].ProviderConfigID. A nil check before dereferencing s.kasKeys[0].ProviderConfigID would make this assertion more robust against fixture changes.

if s.kasKeys[0].ProviderConfigID == nil {
		s.Nil(resp.GetKey().GetProviderConfig())
	} else {
		s.Equal(*s.kasKeys[0].ProviderConfigID, resp.GetKey().GetProviderConfig().GetId())
	}

@@ -387,7 +387,7 @@
s.NotNil(resp)
s.Len(resp.GetKasKeys(), 1)
s.GreaterOrEqual(int32(2), resp.GetPagination().GetTotal())
s.Equal(int32(1), resp.GetPagination().GetNextOffset())
s.Equal(int32(0), resp.GetPagination().GetNextOffset())
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The assertion for resp.GetPagination().GetNextOffset() has changed from int32(1) to int32(0).
Given:

  • limit = 1 (from req.Pagination)
  • currentOffset = 0 (asserted on line 391)
  • total >= 2 (asserted by s.GreaterOrEqual(int32(2), resp.GetPagination().GetTotal()) on line 389)

If total is, for example, 2, then currentOffset (0) + limit (1) < total (2) (i.e., 1 < 2) is true. In this scenario, the nextOffset is typically currentOffset + limit, which would be 1.

Could you clarify the expected pagination logic here or why nextOffset is expected to be 0 when total >= 2 and only the first item of the page is fetched?

@@ -13,6 +13,10 @@ logger:
output: stdout
services:
kas:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Was there a config value we added for kasUri?

provider_config_id: 4ab6b1c4-fa5c-4036-8921-53f8c267b728 # provider_config_1
private_key_ctx: eyAid3JhcHBlZEtleSI6ICJsY2JxNjgyR3NpaStqRWtRNjJzV0lYa1dXVkpqZ1dQdXZobUJ0OUtpWUZKL28zWENseVJkNGMwS0RGdHVvaGRCdzJqdlZHd2VGZnNwaTllV0dNSXpFbDZiY0VSYzUycTVIdmlINWtjVDlSY25KaFV2M2lONjM1UndIek52akdFVktLVU5CdjRwZkVOMzB3N29wSFBpZ3owS1ExVkJNSk5PM1lEOUZWQTdVb0h4MGVKY0Y3WlFKSkdYeHdwUVYwTXR3bHFtUnBxNFEyVTl2cFlyajY3ODdRSEdmOWhlZ0lYTkErcjByM1RDTHB3YzVZM0E5aEhreWp3N1FnWEU4dWVKSUx1TW04N0NlckpweVpPQ3NySDN2QWppWUFWdjcvZEVKcWpYMUFnYUI4NFQ3aHhERmVqOUpLaEl5OWVLWk5yTndNWW1Bc0hwYkEzamc1R0VIQjdFM2ZYRXFoaTFTTllhR1ZpZHRvSnVTLzNrVm5JTEtOWTZpZnRvNllMTEJBdWlQQVJjNTZVblVTS0hZQ1dtTko3QkM4Y0hhN2FIdDllUW1lVVRicVZmMGg3aDQ2M3FZQ2F6RDhYT0FMUTBuQ3lPQ3I5dUxkV1o1QThLbHFmMytqKzcyOGtaYUJFN2tKZ1I1UFh0dDFMTHlYcThmSEhPRXNOWXMzT3RSOGN3akV1ZGpvVVRJMTd1YkJOYjhYZU01emFaL1dmdWZDcWp2UGVjREt6cHJVbzdlanBrZjZKOEJ0RStZSFZRSjdNMWJWb1ZlQ0tFTWUvK3p5Y2Zpc3BzbmZsQ1ZtNkJNdFlMdmtVLzIzRWRiOWNNN1BRR3lFTEZOeDMyQXRwUXpMRUUrNWVaWWFhUU5Za3hEaWF0c3ZkMkQyNEVSTVhmWGp1YWg4MTBOSVpUZTE4cStGMitZMEtuTU9LZHpqV3AyUXdvNHVIb3JidndRRkwzOXZrVHJmZTIzelhVY2Q2N1pCTmpJUUNGc0prOW5sRk9ORjhrc25XVzQ5aHdxSjk1dXJtaG5zSGRSZlBrbVc2SHZ0UnVTclN3L2VmOGZ0MUZmMlZGMUNKUXArSnc2YnpKWmRQSzdsTmxmN1F3N2trREtqSGxnTTVnanZlZVJXZjE5Q3FqaTdHM1FhSS9Oa3FDdEplWllLZmZGU1RtbStIY3o0bXpMQkpzc3hNdGgvUkRaQzVTaVVJODJhZ0h0QkJ5VC9DK3A2NEE3cjZGeFNvdmRNTi9mTU5ZSUx3NGRQV3VxdDZwNmVnTUlyMFNVYXBpUHJpTjBiRjNaN2d5R1QxQXZyMHVnaU9qQUI3L3pybDJHaWFlajFUV01YS08zd2J4L0VzUVdpMDNWcmxWanBIdjl2Y2hlWjdGTzliREJUUkxKZHI0QkU4RWs0YkZCaytxRkZOQXZXcC9GZDFiNnFiKytEdU5Iajg1V2R3WE1PaW9nNUlSSzdjZUlNT0xQY214TnE3YXh5WnkrTm0yQ2VocjN5Qk9OQzFQRml4U2NMSGJZUEJlTU9EaGJHWXo5NEVaYkxHOWJpL1B5RkJiNERYSGlLemxrNEtTZ3BYZ1FLUHBSRWx6aUNiYVB3WlowZVljUEhoaktVNHQ3a2k3TlR2MlFYVU1nK3V2dVZWajJtcGpSMTJ5bmJiS2xJNDJoUEcxYW1FV0JlM1JjNmZ4cW5uQnVScnlMWjdEYW5wa252V0t5UXE3S1pHSHJGemlaMEE3Q1VSejFnT2R4d2xDQXEvRnAxZ2oxMGpNMFpJK3lod1RGcnhCUDJXdHF1S1dBREhGMHBGblNWdUpKUnlzUFR2aXNSYVM1N3d2aVZZQnRCcnRGYmZhTHBGcytwQ2ViYk81K0dRZ29wWlZaSDM5c0lnY0dIY3B4RU1zdDBCd3JuUGZIM0RRbGJqVmdrWlFmNkJiZUpDNWFBL2tEVTVSZFNiUTI1NjNCcGRMRUREQ3dvaVU5NW5LcE1tOE8zVTIxMEdRMHgveFdFYUMxdDJkOVM2RlVFbFRVSlJYWVZNZVB2Z3JaMnZGajl5YTZvNm5LVWt4RXAyaUlkS2d1ckR4MEVNSHZ2NU90TEZYTnVXWVdIU0o3czNET3JWNjZxUXRYaHF6VUlsRjRHWERVYUpmZ3NtUTk0MU03eUFqL3RibjBHUGFkMENsRXZWd25ucGpnNEpoZ2Y1dlpCaC9TcG5Na2hia1RIQis0ajhrT1dFTHdWc2ZDU3RTa0ZGdHAxY1VtRVI5RWhqSzhjSmJ3L2FKVTU5ZkZmZDJXR0N6VUxIZkEyMURLcld6SWwzODhray94cXdUN1E5aU92Y1NSN1pzdE10R1RRWG54Q1gvV3A4VG9qNjRIM2RsR2p6TGhGeDZ1Qk53WFQxMTRSeGw4ZWZLdW9VZzd0ZHcxcVdtOUplUC92TVF6VTlLd2Z5SExLNmdDQUlmWkpneVkrcnVyN0YrZVNPRUlEeWlkRnJLM1NWTFE3T1lHRmVXaFRNS01HdzdaV2VuTC9xWDdBUFErdkdoMmpQNTJVN2VsT0t4L1RsTkZ5UHJHL2FZUDN0MDRTdWVZUkd2RXAremZkVU0xbmYvN3YvRHhzc1VSS29zQUdHa1JwbzBLQ3NUU0I4UzhxdTlNKzA3YjBSREVXai9QdHVrZWdvRUR1KzZ4azN0WmRqclpWTTIxZURDaDhxME9HbS9KeDBITWVlUHFIY28zeEdTMUpYMW90QVp3UEhaaUkyaWNjWksrV21KTExaSXJYSzRsSG8vd1lpQitOeUlwZDJWd2dTdXZua3hhTlF5dmxtdWtSaTJCTzM1ZEdDNVFaY1V5d2lCZlRoSzdzRC9CMjJHNDZlUVNHeTdqeTlJSmJaMXhNKzVHcXVxOTdPOCtWOVIreEcydW1ZN0grWG90NlBaRjVPT0hERmI2cEVUSThsNDJDdDV2bElJMmRmWXFqZWR6WHAvb1drdXFub2FQejNnUU4wS2JGaDlsazZvVXVJMWlMaHBDMWxIR283em8xV3E0NDFlUW9nS3dhWFNDcGxQNDE0UW44dFE0elcvRTdjZ2hLbnpWMTg1K2lHdXBxTnNoWTBlS1VtSzB2Rkx3dkcrdnc9PSIsICJrZXlfaWQiOiAiY29uZmlnIiB9
public_key_ctx: eyAicGVtIjogIkxTMHRMUzFDUlVkSlRpQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENrMUpTVU12VkVORFFXVlhaMEYzU1VKQlowbFZSakE1UVdwSWFsbEpPRU5TZWtWR1NtcGpWRVJFWTJsa1pFZ3dkMFJSV1VwTGIxcEphSFpqVGtGUlJVd0tRbEZCZDBScVJVMU5RVzlIUVRGVlJVRjNkMFJoTWtaNlRVSTBXRVJVU1RCTlJGVjNUbXBGZVUxVVFYaE5iRzlZUkZSSk1VMUVWWGRPYWtWNVRWUkJlQXBOYkc5M1JHcEZUVTFCYjBkQk1WVkZRWGQzUkdFeVJucE5TVWxDU1dwQlRrSm5hM0ZvYTJsSE9YY3dRa0ZSUlVaQlFVOURRVkU0UVUxSlNVSkRaMHREQ2tGUlJVRnNWRUk1ZWtzM2R6RjFNRzFtT1dJNWJtZzRVM3AwSzB0NVpGZHZialV5VURWTlkyazRaMVlyZW1GUVdqbG1NMHBpY2xsSFZXWldXRzE2Um1FS2JWRXJUakJtVGpaUmFEaFZPV2x6YnpGUFozVkhXREIxZVRSd1YxazNlbTFYVFhGdFJqVnBTazlJTkVOQmRUVm5WMlZ1YzNJNVIyRlhNMWxtZUV0V1JncFdVbnBLY1V4MFUzcEJUM2x2UTBsaE5WRXJTVEpVZG1kTmVFWmpTRll3U0dONE9YVTVla2RZZERkS05VZGxWMXBUTTNJMk9VZzRNR1JHVWpkR2MwbFJDazFoVERaUlVIaG1VV05XT1ZKaWRXOXdlVUZ3T0U0M1RrdGlVM3A0T0VaVVpFSllVV0U0UW5WeFRYTnZObFp5SzBjclpDOW9lVnA2WWxwVmMxcEVVelFLWjNSdE5uSkNRbFVyYUU4ek1FTjZXbkJhWkhCRVRWTlBkamxqTkdOWlVYbHBkRWx3UmpCcmJWZFFjRTAyWWl0S1V6UnlOMmhHVVU1a1kxQldWWEJXZUFvdlZHb3dSVUZOYVdzcmNIcFpRVXh5YWxSTFpqbEhjbUprZDBsRVFWRkJRbTh4VFhkVlZFRmtRbWRPVmtoUk5FVkdaMUZWYTJSVE0wSnVXSE5uWlV0U0NuVk5MMGhDTlc5c00zbGFjVlJ2TUhkSWQxbEVWbEl3YWtKQ1ozZEdiMEZWYTJSVE0wSnVXSE5uWlV0U2RVMHZTRUkxYjJ3emVWcHhWRzh3ZDBSM1dVUUtWbEl3VkVGUlNDOUNRVlYzUVhkRlFpOTZRVTVDWjJ0eGFHdHBSemwzTUVKQlVYTkdRVUZQUTBGUlJVRlRaWG94UVZaaE5WaEhWWEJyTlVnNFRIcHlTUXA0VTBWelVuUkhVaXRTVjJOSmRHeE1aVlZMYzNOUFRUTnpZMDFtVUVaNlNuUXlUbGR3ZDBOd1NUUmlZMkZHUVZnemVGbExSMWx4Vm5aelZtcHhiVEZWQ25SS1ltaDZkekZoVVZCVVQyWnZORFpsT1hOR0sybHhaR0pwYkVwbFJVbFFabGxEYjB3MlZYUjBSbTk2VEM5TFoyazFlV0ZsU1hCU2NURmlhSEZ3VmpjS1RWUm1TbTFDYkhWSWNrWmhkV05GYUVGTVRESm9LMHRzUTFSNmFtSnNRbkJaTjFocFZGWkhjM0paYzBWMk1tRjNORWgyYjFwWlZrWlZWM0l4UTFKWFlncHBjREI0ZEZaMVNYRTVSRmhoYTBaSllXVlFXbFpuTUhSQ2N6VkJlakJ6VUdscE5VZFVWalV6VlhkbWNqWTRWamhCWVhGUlNFOXlWR1JRTDJaYWRrTjNDbVJYVFdkS1NubHRjMjFWVWlzMWNUSkNUbkp2WkhsVFdEZDRSelp4ZW5FME1tNUJWMVp3U2xOdmIwZzVaV2RTWVhadVowUTVVWFJyZVdVNUt6QnVSVzBLVkdjOVBRb3RMUzB0TFVWT1JDQkRSVkpVU1VaSlEwRlVSUzB0TFMwdENnPT0iIH0=
provider_config_id: 4ab6b1c4-fa5c-4036-8921-53f8c267b728
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this be nil since it's mode local

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants