Skip to content

Commit eaead10

Browse files
Maxrovrjotruon
authored andcommitted
Added - Support for Resource Principle Auth
1 parent 9044a7f commit eaead10

File tree

3 files changed

+43
-4
lines changed

3 files changed

+43
-4
lines changed

internal/acctest/provider_test.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,3 +648,36 @@ func TestUnitSecurityToken_basic(t *testing.T) {
648648
_, err = client.ListRegions(context.Background())
649649
assert.NoError(t, err)
650650
}
651+
652+
// issue-routing-tag: terraform/default
653+
func TestUnitResourcePrincipal_basic(t *testing.T) {
654+
t.Skip("Run manually with a valid Resource Principle Session Token.")
655+
httpreplay.SetScenario("TestUnitResourcePrincipal_basic")
656+
defer httpreplay.SaveScenario()
657+
658+
r := &schema.Resource{
659+
Schema: provider.SchemaMap(),
660+
}
661+
d := r.Data(nil)
662+
d.Set("auth", globalvar.ResourcePrincipal)
663+
664+
// Run CLI command "oci session authenticate" to get token and profile
665+
clients := &tf_client.OracleClients{
666+
SdkClientMap: make(map[string]interface{}, len(tf_client.OracleClientRegistrationsVar.RegisteredClients)),
667+
Configuration: make(map[string]string),
668+
}
669+
sdkConfigProvider, err := provider.GetSdkConfigProvider(d, clients)
670+
671+
// Assert creation of IdentityClient With ConfigurationProvider
672+
client, err := oci_identity.NewIdentityClientWithConfigurationProvider(sdkConfigProvider)
673+
assert.NoError(t, err)
674+
assert.NotEmpty(t, client.Host)
675+
676+
// Assert that Authorization header KeyId contains ST$
677+
keyId, _ := sdkConfigProvider.KeyID()
678+
assert.True(t, strings.HasPrefix(keyId, "ST$"))
679+
680+
// Assert that this auth type can successfully authenticate and authorize list regions
681+
_, err = client.ListRegions(context.Background())
682+
assert.NoError(t, err)
683+
}

internal/globalvar/constants.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const (
77
AuthInstancePrincipalSetting = "InstancePrincipal"
88
AuthInstancePrincipalWithCertsSetting = "InstancePrincipalWithCerts"
99
AuthSecurityToken = "SecurityToken"
10+
ResourcePrincipal = "ResourcePrincipal"
1011
RequestHeaderOpcOboToken = "opc-obo-token"
1112
RequestHeaderOpcHostSerial = "opc-host-serial"
1213
DefaultRequestTimeout = 0

internal/provider/provider.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ func ociVarName(attrName string) string {
9393

9494
func init() {
9595
descriptions = map[string]string{
96-
globalvar.AuthAttrName: fmt.Sprintf("(Optional) The type of auth to use. Options are '%s', '%s' and '%s'. By default, '%s' will be used.", globalvar.AuthAPIKeySetting, globalvar.AuthSecurityToken, globalvar.AuthInstancePrincipalSetting, globalvar.AuthAPIKeySetting),
96+
globalvar.AuthAttrName: fmt.Sprintf("(Optional) The type of auth to use. Options are '%s', '%s' and '%s' and '%s'. By default, '%s' will be used.", globalvar.AuthAPIKeySetting, globalvar.AuthSecurityToken, globalvar.AuthInstancePrincipalSetting, globalvar.ResourcePrincipal, globalvar.AuthAPIKeySetting),
9797
globalvar.TenancyOcidAttrName: fmt.Sprintf("(Optional) The tenancy OCID for a user. The tenancy OCID can be found at the bottom of user settings in the Oracle Cloud Infrastructure console. Required if auth is set to '%s', ignored otherwise.", globalvar.AuthAPIKeySetting),
9898
globalvar.UserOcidAttrName: fmt.Sprintf("(Optional) The user OCID. This can be found in user settings in the Oracle Cloud Infrastructure console. Required if auth is set to '%s', ignored otherwise.", globalvar.AuthAPIKeySetting),
9999
globalvar.FingerprintAttrName: fmt.Sprintf("(Optional) The fingerprint for the user's RSA key. This can be found in user settings in the Oracle Cloud Infrastructure console. Required if auth is set to '%s', ignored otherwise.", globalvar.AuthAPIKeySetting),
@@ -129,7 +129,7 @@ func SchemaMap() map[string]*schema.Schema {
129129
Optional: true,
130130
Description: descriptions[globalvar.AuthAttrName],
131131
DefaultFunc: schema.MultiEnvDefaultFunc([]string{tfVarName(globalvar.AuthAttrName), ociVarName(globalvar.AuthAttrName)}, globalvar.AuthAPIKeySetting),
132-
ValidateFunc: validation.StringInSlice([]string{globalvar.AuthAPIKeySetting, globalvar.AuthInstancePrincipalSetting, globalvar.AuthInstancePrincipalWithCertsSetting, globalvar.AuthSecurityToken}, true),
132+
ValidateFunc: validation.StringInSlice([]string{globalvar.AuthAPIKeySetting, globalvar.AuthInstancePrincipalSetting, globalvar.AuthInstancePrincipalWithCertsSetting, globalvar.AuthSecurityToken, globalvar.ResourcePrincipal}, true),
133133
},
134134
globalvar.TenancyOcidAttrName: {
135135
Type: schema.TypeString,
@@ -412,7 +412,6 @@ func getConfigProviders(d *schema.ResourceData, auth string) ([]oci_common.Confi
412412
log.Printf("[DEBUG] Configuration provided by: %s", cfg)
413413

414414
configProviders = append(configProviders, cfg)
415-
416415
case strings.ToLower(globalvar.AuthSecurityToken):
417416
_, ok := utils.CheckIncompatibleAttrsForApiKeyAuth(d, ApiKeyConfigAttributes)
418417
if !ok {
@@ -443,8 +442,14 @@ func getConfigProviders(d *schema.ResourceData, auth string) ([]oci_common.Confi
443442
return nil, fmt.Errorf("Security token is invalid ")
444443
}
445444
configProviders = append(configProviders, securityTokenBasedAuthConfigProvider)
445+
case strings.ToLower(globalvar.ResourcePrincipal):
446+
resourcePrincipalAuthConfigProvider, err := oci_common_auth.ResourcePrincipalConfigurationProvider()
447+
if err != nil {
448+
return nil, err
449+
}
450+
configProviders = append(configProviders, resourcePrincipalAuthConfigProvider)
446451
default:
447-
return nil, fmt.Errorf("auth must be one of '%s' or '%s' or '%s' or '%s'", globalvar.AuthAPIKeySetting, globalvar.AuthInstancePrincipalSetting, globalvar.AuthInstancePrincipalWithCertsSetting, globalvar.AuthSecurityToken)
452+
return nil, fmt.Errorf("auth must be one of '%s' or '%s' or '%s' or '%s' or '%s'", globalvar.AuthAPIKeySetting, globalvar.AuthInstancePrincipalSetting, globalvar.AuthInstancePrincipalWithCertsSetting, globalvar.AuthSecurityToken, globalvar.ResourcePrincipal)
448453
}
449454

450455
return configProviders, nil

0 commit comments

Comments
 (0)