|
189 | 189 | required
|
190 | 190 | width="100%"
|
191 | 191 | />
|
| 192 | + <KInput |
| 193 | + v-model.trim="configFields[VaultProviders.AWS].endpoint_url" |
| 194 | + autocomplete="off" |
| 195 | + data-testid="vault-form-config-aws-endpoint_url" |
| 196 | + :is-readonly="form.isReadonly" |
| 197 | + :label="t('form.config.aws.fields.endpoint_url.label')" |
| 198 | + :label-attributes="{ |
| 199 | + info: t('form.config.aws.fields.endpoint_url.tooltip'), |
| 200 | + tooltipAttributes: { maxWidth: '400px' }, |
| 201 | + }" |
| 202 | + type="text" |
| 203 | + /> |
| 204 | + <KInput |
| 205 | + v-model.trim="configFields[VaultProviders.AWS].assume_role_arn" |
| 206 | + autocomplete="off" |
| 207 | + data-testid="vault-form-config-aws-assume_role_arn" |
| 208 | + :is-readonly="form.isReadonly" |
| 209 | + :label="t('form.config.aws.fields.assume_role_arn.label')" |
| 210 | + :label-attributes="{ |
| 211 | + info: t('form.config.aws.fields.assume_role_arn.tooltip'), |
| 212 | + tooltipAttributes: { maxWidth: '400px' }, |
| 213 | + }" |
| 214 | + type="text" |
| 215 | + /> |
| 216 | + <KInput |
| 217 | + v-model.trim="configFields[VaultProviders.AWS].role_session_name" |
| 218 | + autocomplete="off" |
| 219 | + data-testid="vault-form-config-aws-role_session_name" |
| 220 | + :is-readonly="form.isReadonly" |
| 221 | + :label="t('form.config.aws.fields.role_session_name.label')" |
| 222 | + :label-attributes="{ |
| 223 | + info: t('form.config.aws.fields.role_session_name.tooltip'), |
| 224 | + tooltipAttributes: { maxWidth: '400px' }, |
| 225 | + }" |
| 226 | + required |
| 227 | + type="text" |
| 228 | + /> |
192 | 229 | </div>
|
193 | 230 |
|
194 | 231 | <!-- GCP fields -->
|
|
293 | 330 | required
|
294 | 331 | width="100%"
|
295 | 332 | />
|
296 |
| - <div v-if="configFields[VaultProviders.HCV].auth_method === VaultAuthMethods.TOKEN"> |
| 333 | + <div |
| 334 | + v-if="configFields[VaultProviders.HCV].auth_method === VaultAuthMethods.TOKEN" |
| 335 | + class="vault-form-config-auth-method-container" |
| 336 | + > |
297 | 337 | <KInput
|
298 | 338 | v-model.trim="configFields[VaultProviders.HCV].token"
|
299 | 339 | autocomplete="off"
|
|
304 | 344 | type="text"
|
305 | 345 | />
|
306 | 346 | </div>
|
307 |
| - <div v-else-if="configFields[VaultProviders.HCV].auth_method === VaultAuthMethods.K8S"> |
| 347 | + <div |
| 348 | + v-else-if="configFields[VaultProviders.HCV].auth_method === VaultAuthMethods.K8S" |
| 349 | + class="vault-form-config-auth-method-container" |
| 350 | + > |
308 | 351 | <KInput
|
309 | 352 | v-model.trim="configFields[VaultProviders.HCV].kube_role"
|
310 | 353 | autocomplete="off"
|
|
332 | 375 | type="text"
|
333 | 376 | />
|
334 | 377 | </div>
|
335 |
| - <div v-else-if="configFields[VaultProviders.HCV].auth_method === VaultAuthMethods.APP_ROLE"> |
| 378 | + <div |
| 379 | + v-else-if="configFields[VaultProviders.HCV].auth_method === VaultAuthMethods.APP_ROLE" |
| 380 | + class="vault-form-config-auth-method-container" |
| 381 | + > |
336 | 382 | <KInput
|
337 | 383 | v-model.trim="configFields[VaultProviders.HCV].approle_auth_path"
|
338 | 384 | autocomplete="off"
|
@@ -587,6 +633,9 @@ const configFields = reactive<ConfigFields>({
|
587 | 633 | } as KongVaultConfig,
|
588 | 634 | [VaultProviders.AWS]: {
|
589 | 635 | region: '',
|
| 636 | + endpoint_url: '', |
| 637 | + assume_role_arn: '', |
| 638 | + role_session_name: 'KongVault', |
590 | 639 | } as AWSVaultConfig,
|
591 | 640 | [VaultProviders.GCP]: {
|
592 | 641 | project_id: '',
|
@@ -625,6 +674,9 @@ const originalConfigFields = reactive<ConfigFields>({
|
625 | 674 | } as KongVaultConfig,
|
626 | 675 | [VaultProviders.AWS]: {
|
627 | 676 | region: '',
|
| 677 | + endpoint_url: '', |
| 678 | + assume_role_arn: '', |
| 679 | + role_session_name: 'KongVault', |
628 | 680 | } as AWSVaultConfig,
|
629 | 681 | [VaultProviders.GCP]: {
|
630 | 682 | project_id: '',
|
@@ -794,12 +846,23 @@ const isVaultConfigValid = computed((): boolean => {
|
794 | 846 | }).length
|
795 | 847 | }
|
796 | 848 |
|
| 849 | + // AWS Vault fields logic |
| 850 | + if (vaultProvider.value === VaultProviders.AWS) { |
| 851 | + return !Object.keys(configFields[VaultProviders.AWS]).filter(key => { |
| 852 | + // endpoint_url, assume_role_arn and ttl fields are optional |
| 853 | + if (['endpoint_url', 'assume_role_arn', 'ttl', 'neg_ttl', 'resurrect_ttl'].includes(key)) { |
| 854 | + return false |
| 855 | + } |
| 856 | + return !(configFields[vaultProvider.value] as AWSVaultConfig)[key as keyof AWSVaultConfig] |
| 857 | + }).length |
| 858 | + } |
| 859 | +
|
797 | 860 | return !Object.keys(configFields[vaultProvider.value]).filter(key => {
|
798 | 861 | // ttl fields are optional
|
799 | 862 | if (['ttl', 'neg_ttl', 'resurrect_ttl'].includes(key)) {
|
800 | 863 | return false
|
801 | 864 | }
|
802 |
| - return !(configFields[vaultProvider.value] as KongVaultConfig | AWSVaultConfig | GCPVaultConfig)[key as keyof (KongVaultConfig | AWSVaultConfig | GCPVaultConfig)] |
| 865 | + return !(configFields[vaultProvider.value] as KongVaultConfig | GCPVaultConfig)[key as keyof (KongVaultConfig | GCPVaultConfig)] |
803 | 866 | }).length
|
804 | 867 | })
|
805 | 868 | const isFormValid = computed((): boolean => !!form.fields.prefix && isVaultConfigValid.value)
|
@@ -860,11 +923,19 @@ const getPayload = computed((): Record<string, any> => {
|
860 | 923 | tenant_id: (configFields[vaultProvider.value] as AzureVaultConfig).tenant_id || null,
|
861 | 924 | }
|
862 | 925 |
|
| 926 | + const awsConfig = { |
| 927 | + ...configFields[vaultProvider.value], |
| 928 | + endpoint_url: (configFields[vaultProvider.value] as AWSVaultConfig).endpoint_url || null, |
| 929 | + assume_role_arn: (configFields[vaultProvider.value] as AWSVaultConfig).assume_role_arn || null, |
| 930 | + } |
| 931 | +
|
863 | 932 | let config: VaultPayload['config'] = configFields[vaultProvider.value]
|
864 | 933 | if (vaultProvider.value === VaultProviders.HCV) {
|
865 | 934 | config = hcvConfig
|
866 | 935 | } else if (vaultProvider.value === VaultProviders.AZURE) {
|
867 | 936 | config = azureConfig
|
| 937 | + } else if (vaultProvider.value === VaultProviders.AWS) { |
| 938 | + config = awsConfig |
868 | 939 | }
|
869 | 940 |
|
870 | 941 | let ttlFields = {}
|
@@ -981,7 +1052,7 @@ const saveFormData = async (): Promise<void> => {
|
981 | 1052 | }
|
982 | 1053 |
|
983 | 1054 | &-config-fields-container {
|
984 |
| - > *, div > * { |
| 1055 | + > *, .vault-form-config-auth-method-container > * { |
985 | 1056 | &:not(:first-child) {
|
986 | 1057 | margin-top: $kui-space-80;
|
987 | 1058 | }
|
|
0 commit comments