Skip to content

Commit 01f65eb

Browse files
owainlewisprydie
authored andcommitted
Unify configuration format for CCM and Volume Provisioner (#282)
1 parent 19a0ef8 commit 01f65eb

File tree

12 files changed

+130
-538
lines changed

12 files changed

+130
-538
lines changed

pkg/cloudprovider/providers/oci/ccm.go

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ import (
2525
providercfg "github.com/oracle/oci-cloud-controller-manager/pkg/cloudprovider/providers/oci/config"
2626
"github.com/oracle/oci-cloud-controller-manager/pkg/oci/client"
2727
"github.com/oracle/oci-cloud-controller-manager/pkg/oci/instance/metadata"
28-
"github.com/oracle/oci-go-sdk/common"
29-
"github.com/oracle/oci-go-sdk/common/auth"
3028
"github.com/pkg/errors"
3129
"go.uber.org/zap"
3230
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
@@ -84,7 +82,7 @@ func NewCloudProvider(config *providercfg.Config) (cloudprovider.Interface, erro
8482
// main.go so capture it here and then pass it into all components.
8583
logger := zap.L()
8684

87-
cp, err := buildConfigurationProvider(logger, config)
85+
cp, err := providercfg.NewConfigurationProvider(config)
8886
if err != nil {
8987
return nil, err
9088
}
@@ -127,7 +125,6 @@ func init() {
127125
if err != nil {
128126
return nil, err
129127
}
130-
cfg.Complete()
131128

132129
if err = cfg.Validate(); err != nil {
133130
return nil, err
@@ -218,27 +215,6 @@ func (cp *CloudProvider) HasClusterID() bool {
218215
return true
219216
}
220217

221-
func buildConfigurationProvider(logger *zap.Logger, config *providercfg.Config) (common.ConfigurationProvider, error) {
222-
if config.Auth.UseInstancePrincipals {
223-
logger.Info("Using instance principals configuration provider")
224-
cp, err := auth.InstancePrincipalConfigurationProvider()
225-
if err != nil {
226-
return nil, errors.Wrap(err, "InstancePrincipalConfigurationProvider")
227-
}
228-
return cp, nil
229-
}
230-
logger.Info("Using raw configuration provider")
231-
cp := common.NewRawConfigurationProvider(
232-
config.Auth.TenancyID,
233-
config.Auth.UserID,
234-
config.Auth.Region,
235-
config.Auth.Fingerprint,
236-
config.Auth.PrivateKey,
237-
&config.Auth.Passphrase,
238-
)
239-
return cp, nil
240-
}
241-
242218
// NewRateLimiter builds and returns a struct containing read and write
243219
// rate limiters. Defaults are used where no (0) value is provided.
244220
func NewRateLimiter(logger *zap.SugaredLogger, config *providercfg.RateLimiterConfig) client.RateLimiter {

pkg/cloudprovider/providers/oci/config/config.go

Lines changed: 75 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,12 @@ package config
1616

1717
import (
1818
"io"
19+
"os"
1920

21+
"github.com/oracle/oci-go-sdk/common"
22+
"github.com/oracle/oci-go-sdk/common/auth"
2023
"github.com/pkg/errors"
24+
2125
"go.uber.org/zap"
2226
"gopkg.in/yaml.v2"
2327
)
@@ -26,21 +30,26 @@ import (
2630
// API.
2731
type AuthConfig struct {
2832
Region string `yaml:"region"`
29-
RegionKey string `yaml:"regionKey"`
3033
TenancyID string `yaml:"tenancy"`
3134
UserID string `yaml:"user"`
3235
PrivateKey string `yaml:"key"`
3336
Fingerprint string `yaml:"fingerprint"`
3437
Passphrase string `yaml:"passphrase"`
3538

36-
// TODO(apryde): depreciate
37-
UseInstancePrincipals bool `yaml:"useInstancePrincipals"`
38-
VCNID string `yaml:"vcn"`
39+
// Used by the flex driver for OCID expansion. This should be moved to top level
40+
// as it doesn't strictly relate to OCI authentication.
41+
RegionKey string `yaml:"regionKey"`
42+
43+
// The fields below are deprecated and remain purely for backwards compatibility.
44+
// At some point these need to be removed.
3945

40-
// CompartmentID is DEPRECIATED and should be set on the top level Config
46+
// When set to true, clients will use an instance principal configuration provider
47+
// and ignore auth fields.
48+
UseInstancePrincipals bool `yaml:"useInstancePrincipals"`
49+
// CompartmentID is DEPRECATED and should be set on the top level Config
4150
// struct.
4251
CompartmentID string `yaml:"compartment"`
43-
// PrivateKeyPassphrase is DEPRECIATED in favour of Passphrase.
52+
// PrivateKeyPassphrase is DEPRECATED in favour of Passphrase.
4453
PrivateKeyPassphrase string `yaml:"key_passphrase"`
4554
}
4655

@@ -97,7 +106,7 @@ type Config struct {
97106
LoadBalancer LoadBalancerConfig `yaml:"loadBalancer"`
98107
RateLimiter *RateLimiterConfig `yaml:"rateLimiter"`
99108

100-
// TODO(apryde): use in CCM.
109+
// When set to true, clients will use an instance principal configuration provider and ignore auth fields.
101110
UseInstancePrincipals bool `yaml:"useInstancePrincipals"`
102111
// CompartmentID is the OCID of the Compartment within which the cluster
103112
// resides.
@@ -112,18 +121,26 @@ func (c *Config) Complete() {
112121
if !c.LoadBalancer.Disabled && c.LoadBalancer.SecurityListManagementMode == "" {
113122
c.LoadBalancer.SecurityListManagementMode = ManagementModeAll // default
114123
if c.LoadBalancer.DisableSecurityListManagement {
115-
zap.S().Warnf("cloud-provider config: \"loadBalancer.disableSecurityListManagement\" is DEPRECIATED and will be removed in a later release. Please set \"loadBalancer.SecurityListManagementMode: %s\".", ManagementModeNone)
124+
zap.S().Warnf("cloud-provider config: \"loadBalancer.disableSecurityListManagement\" is DEPRECATED and will be removed in a later release. Please set \"loadBalancer.SecurityListManagementMode: %s\".", ManagementModeNone)
116125
c.LoadBalancer.SecurityListManagementMode = ManagementModeNone
117126
}
118127
}
128+
129+
// Ensure backwards compatibility fields are set correctly.
119130
if c.CompartmentID == "" && c.Auth.CompartmentID != "" {
120-
zap.S().Warn("cloud-provider config: \"auth.compartment\" is DEPRECIATED and will be removed in a later release. Please set \"compartment\".")
131+
zap.S().Warn("cloud-provider config: \"auth.compartment\" is DEPRECATED and will be removed in a later release. Please set \"compartment\".")
121132
c.CompartmentID = c.Auth.CompartmentID
122133
}
134+
123135
if c.Auth.Passphrase == "" && c.Auth.PrivateKeyPassphrase != "" {
124-
zap.S().Warn("cloud-provider config: \"auth.key_passphrase\" is DEPRECIATED and will be removed in a later release. Please set \"auth.passphrase\".")
136+
zap.S().Warn("cloud-provider config: \"auth.key_passphrase\" is DEPRECATED and will be removed in a later release. Please set \"auth.passphrase\".")
125137
c.Auth.Passphrase = c.Auth.PrivateKeyPassphrase
126138
}
139+
140+
if c.Auth.UseInstancePrincipals == true {
141+
zap.S().Warn("cloud-provider config: \"auth.useInstancePrincipals\" is DEPRECATED and will be removed in a later release. Please set \"auth.useInstancePrincipals\".")
142+
c.UseInstancePrincipals = true
143+
}
127144
}
128145

129146
// Validate validates the OCI cloud-provider config.
@@ -143,5 +160,53 @@ func ReadConfig(r io.Reader) (*Config, error) {
143160
return nil, errors.Wrap(err, "unmarshalling cloud-provider config")
144161
}
145162

163+
// Ensure defaults are correctly set
164+
cfg.Complete()
165+
146166
return cfg, nil
147167
}
168+
169+
// FromFile will load a cloud provider configuration file from a given file path.
170+
func FromFile(path string) (*Config, error) {
171+
f, err := os.Open(path)
172+
defer f.Close()
173+
174+
if err != nil {
175+
return nil, err
176+
}
177+
178+
return ReadConfig(f)
179+
}
180+
181+
// NewConfigurationProvider takes a cloud provider config file and returns an OCI ConfigurationProvider
182+
// to be consumed by the OCI SDK.
183+
func NewConfigurationProvider(cfg *Config) (common.ConfigurationProvider, error) {
184+
var conf common.ConfigurationProvider
185+
if cfg != nil {
186+
err := cfg.Validate()
187+
if err != nil {
188+
return nil, errors.Wrap(err, "invalid client config")
189+
}
190+
191+
if cfg.UseInstancePrincipals {
192+
cp, err := auth.InstancePrincipalConfigurationProvider()
193+
if err != nil {
194+
return nil, errors.Wrap(err, "failed to instantiate InstancePrincipalConfigurationProvider")
195+
}
196+
return cp, nil
197+
}
198+
199+
conf = common.NewRawConfigurationProvider(
200+
cfg.Auth.TenancyID,
201+
cfg.Auth.UserID,
202+
cfg.Auth.Region,
203+
cfg.Auth.Fingerprint,
204+
cfg.Auth.PrivateKey,
205+
common.String(cfg.Auth.PrivateKeyPassphrase))
206+
207+
} else {
208+
conf = common.DefaultConfigProvider()
209+
}
210+
211+
return conf, nil
212+
}

pkg/cloudprovider/providers/oci/config/config_test.go

Lines changed: 33 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -33,73 +33,41 @@ auth:
3333
user: ocid1.user.oc1..aaaaaaaai77mql2xerv7cn6wu3nhxang3y4jk56vo5bn5l5lysl34avnui3q
3434
key: |
3535
-----BEGIN RSA PRIVATE KEY-----
36-
MIIEowIBAAKCAQEA4KpLGy/BLbph55HMjWLxCO657DLQTk4o+WWPi1+5oeAUVgyh
37-
kdvPR22jn9HiAL9jKv7PR3/OdHSp/6E3d05htksI7Tct4M/eWVMGRIzoMJvpJ99e
38-
ZP7MtQT9yknbJDSJoibSwLmPoInnPE/WbcgrTKSAfNURK0bKw1tnLd85qt7zdLI3
39-
g6O/14Bsmf+ovGiQHP6oiTuC4l3D8eTLlKdSrRVqZXhdvslpZU8MtNB8pPHMB4GZ
40-
R6HccBi7TJY7kkNg+5flRBTdYL8bvaji3zxSlvawvet+bJmEtApkUoLnovLCviVp
41-
NVTJZb5iQxMJLZlDJJT/ruq+HMJ3PiiYFOjFVwIDAQABAoIBAQDNkiT9MFoj/Hpf
42-
SOKRsKn60W3gObKvJAeMBKkvD50tCHuzLQWeEDJ/GkxxDbwtkPItwlBqDQEdQC7Z
43-
UGwPR/JSuh/l5uqc3beHpleC3CgNamwSZunZoegv7uxGcAQMAeK6M6n+XQyWCflD
44-
D46Wj2VHUPKcxt1Z6wHXdchYifwbYwUNA3hOlRJK3ODgk/X6UjTGb3+gpY3qU4kX
45-
Iz5L1ekCSgVIPBFVwdZQUyUC7+iIySaK+qcmEEx/UwOZ6uxhcmRzca31cjeaRS4H
46-
pUjrl/aqLIW57E2MQ/vSzfQn7kEGBOrS0RjHZgq9u4Qdq6EkjHj3fenKpwWB7S1z
47-
4t0PpinJAoGBAPRmxAcCd88EhWh5HhN+RWjmXdDCOmZ0yXbxxVBTQtK5pPnP8I9A
48-
3Jd2ughHk7dFBvgKbHkVsyWgAk8zRZdD2hkQBOXvoeJF2scmvgFUBs1otf6xiFsf
49-
IC0I8A/wXn3IHmyrG7xmPAtHWKvTTAFg7IjIIofcX7cuzMeLXEUMvLQdAoGBAOtT
50-
wJCtPTNs4c3vhO4gba98c30U3tHmbLVKJXGEeZkSv3/ez5eIiYBJTzwLB2+ppy8j
51-
2lYsdkLvsoyKF3LUwyt0gsX+AU9DJ2dmSJZ3E67UHsY6+qog5QlYfWWD8mKWeE9L
52-
2r0rhG6l0WHR15LdvVc9MJ8e3YVUvNJJJJhQ2v0DAoGAAosXOyNxb7wST1YDVBya
53-
SE8tZsC+rtZESnKVpRJYvayk5NyfGj6IjSL1KKTmCqAzRF2HZ3MsXBXgMEbOUJaq
54-
LFyYUHQ/8QTdE/l5PLZNI9IVIsNiMeCPCyjuppvPv+tXNbZKIZnGwi9J4u/d+J2z
55-
mHDMuzE15cgc5W6z1Rwe0pkCgYBzRwvF05dvYZ8bqoGLxQb2OBi65UZhvGb0R+Yf
56-
va1zduOoWBWJPbFdzoup9h0mbg0f4ohKPm2QTKtCfUMPVXpmByUoqE0r7tGWrVxR
57-
mPNjaTXKFYpFXOfVtCt5VzGdaeh1r8rvcCnnqgLv0EOyBj2CRs9So2QQtHnq6Tms
58-
A6/C0QKBgAw8IsCnkNoZujCEOR/6ZHbK3eeyAs2yuJumsjYYosIGZ/bzsXTpfzAw
59-
bs45GZxrW67zB/0HA7bVWS9ZkCVflHI2uBCFofm+y55IAzg9/c1xYU19PA3KRxHZ
60-
D/yEDdXVK/lIzNt7kIMFhtoYGrwv1JQGfK5Wh2bi+AwbBDZ45/17
6136
-----END RSA PRIVATE KEY-----
6237
fingerprint: 97:84:f7:26:a3:7b:74:d0:bd:4e:08:a7:79:c9:d0:1d
6338
39+
useInstancePrincipals: false
40+
vcn: ocid1.vcn.oc1..
6441
compartment: ocid1.compartment.oc1..aaaaaaaa3um2atybwhder4qttfhgon4j3hcxgmsvnyvx4flfjyewkkwfzwnq
6542
6643
loadBalancer:
6744
disableSecurityListManagement: false
6845
subnet1: ocid1.subnet.oc1.phx.aaaaaaaasa53hlkzk6nzksqfccegk2qnkxmphkblst3riclzs4rhwg7rg57q
6946
subnet2: ocid1.subnet.oc1.phx.aaaaaaaahuxrgvs65iwdz7ekwgg3l5gyah7ww5klkwjcso74u3e4i64hvtvq
7047
`
48+
49+
const validConfigLegacyFormat = `
50+
auth:
51+
region: us-phoenix-1
52+
tenancy: ocid1.tenancy.oc1..aaaaaaaatyn7scrtwtqedvgrxgr2xunzeo6uanvyhzxqblctwkrpisvke4kq
53+
user: ocid1.user.oc1..aaaaaaaai77mql2xerv7cn6wu3nhxang3y4jk56vo5bn5l5lysl34avnui3q
54+
key: |
55+
-----BEGIN RSA PRIVATE KEY-----
56+
-----END RSA PRIVATE KEY-----
57+
fingerprint: 97:84:f7:26:a3:7b:74:d0:bd:4e:08:a7:79:c9:d0:1d
58+
59+
key_passphrase: secretpassphrase
60+
useInstancePrincipals: true
61+
compartment: ocid1.compartment.oc1
62+
`
63+
7164
const validConfigNoRegion = `
7265
auth:
7366
tenancy: ocid1.tenancy.oc1..aaaaaaaatyn7scrtwtqedvgrxgr2xunzeo6uanvyhzxqblctwkrpisvke4kq
7467
compartment: ocid1.compartment.oc1..aaaaaaaa3um2atybwhder4qttfhgon4j3hcxgmsvnyvx4flfjyewkkwfzwnq
7568
user: ocid1.user.oc1..aaaaaaaai77mql2xerv7cn6wu3nhxang3y4jk56vo5bn5l5lysl34avnui3q
7669
key: |
7770
-----BEGIN RSA PRIVATE KEY-----
78-
MIIEowIBAAKCAQEA4KpLGy/BLbph55HMjWLxCO657DLQTk4o+WWPi1+5oeAUVgyh
79-
kdvPR22jn9HiAL9jKv7PR3/OdHSp/6E3d05htksI7Tct4M/eWVMGRIzoMJvpJ99e
80-
ZP7MtQT9yknbJDSJoibSwLmPoInnPE/WbcgrTKSAfNURK0bKw1tnLd85qt7zdLI3
81-
g6O/14Bsmf+ovGiQHP6oiTuC4l3D8eTLlKdSrRVqZXhdvslpZU8MtNB8pPHMB4GZ
82-
R6HccBi7TJY7kkNg+5flRBTdYL8bvaji3zxSlvawvet+bJmEtApkUoLnovLCviVp
83-
NVTJZb5iQxMJLZlDJJT/ruq+HMJ3PiiYFOjFVwIDAQABAoIBAQDNkiT9MFoj/Hpf
84-
SOKRsKn60W3gObKvJAeMBKkvD50tCHuzLQWeEDJ/GkxxDbwtkPItwlBqDQEdQC7Z
85-
UGwPR/JSuh/l5uqc3beHpleC3CgNamwSZunZoegv7uxGcAQMAeK6M6n+XQyWCflD
86-
D46Wj2VHUPKcxt1Z6wHXdchYifwbYwUNA3hOlRJK3ODgk/X6UjTGb3+gpY3qU4kX
87-
Iz5L1ekCSgVIPBFVwdZQUyUC7+iIySaK+qcmEEx/UwOZ6uxhcmRzca31cjeaRS4H
88-
pUjrl/aqLIW57E2MQ/vSzfQn7kEGBOrS0RjHZgq9u4Qdq6EkjHj3fenKpwWB7S1z
89-
4t0PpinJAoGBAPRmxAcCd88EhWh5HhN+RWjmXdDCOmZ0yXbxxVBTQtK5pPnP8I9A
90-
3Jd2ughHk7dFBvgKbHkVsyWgAk8zRZdD2hkQBOXvoeJF2scmvgFUBs1otf6xiFsf
91-
IC0I8A/wXn3IHmyrG7xmPAtHWKvTTAFg7IjIIofcX7cuzMeLXEUMvLQdAoGBAOtT
92-
wJCtPTNs4c3vhO4gba98c30U3tHmbLVKJXGEeZkSv3/ez5eIiYBJTzwLB2+ppy8j
93-
2lYsdkLvsoyKF3LUwyt0gsX+AU9DJ2dmSJZ3E67UHsY6+qog5QlYfWWD8mKWeE9L
94-
2r0rhG6l0WHR15LdvVc9MJ8e3YVUvNJJJJhQ2v0DAoGAAosXOyNxb7wST1YDVBya
95-
SE8tZsC+rtZESnKVpRJYvayk5NyfGj6IjSL1KKTmCqAzRF2HZ3MsXBXgMEbOUJaq
96-
LFyYUHQ/8QTdE/l5PLZNI9IVIsNiMeCPCyjuppvPv+tXNbZKIZnGwi9J4u/d+J2z
97-
mHDMuzE15cgc5W6z1Rwe0pkCgYBzRwvF05dvYZ8bqoGLxQb2OBi65UZhvGb0R+Yf
98-
va1zduOoWBWJPbFdzoup9h0mbg0f4ohKPm2QTKtCfUMPVXpmByUoqE0r7tGWrVxR
99-
mPNjaTXKFYpFXOfVtCt5VzGdaeh1r8rvcCnnqgLv0EOyBj2CRs9So2QQtHnq6Tms
100-
A6/C0QKBgAw8IsCnkNoZujCEOR/6ZHbK3eeyAs2yuJumsjYYosIGZ/bzsXTpfzAw
101-
bs45GZxrW67zB/0HA7bVWS9ZkCVflHI2uBCFofm+y55IAzg9/c1xYU19PA3KRxHZ
102-
D/yEDdXVK/lIzNt7kIMFhtoYGrwv1JQGfK5Wh2bi+AwbBDZ45/17
10371
-----END RSA PRIVATE KEY-----
10472
fingerprint: 97:84:f7:26:a3:7b:74:d0:bd:4e:08:a7:79:c9:d0:1d
10573
@@ -138,3 +106,18 @@ func TestReadConfigShouldSetCompartmentIDWhenProvidedValidConfig(t *testing.T) {
138106
cfg.CompartmentID, expected)
139107
}
140108
}
109+
110+
func TestBackwardsCompatibilityFieldsAreSetCorrectly(t *testing.T) {
111+
cfg, err := ReadConfig(strings.NewReader(validConfigLegacyFormat))
112+
if err != nil {
113+
t.Fatalf("expected no error but got '%v'", err)
114+
}
115+
116+
if cfg.CompartmentID != "ocid1.compartment.oc1" {
117+
t.Errorf("Compartment ID was not set correctly: cfg.CompartmentID = %v", cfg.CompartmentID)
118+
}
119+
120+
if cfg.Auth.Passphrase != "secretpassphrase" {
121+
t.Errorf("Passphrase was not set correctly: cfg.Auth.Passphrase = %v", cfg.Auth.Passphrase)
122+
}
123+
}

pkg/flexvolume/block/config_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,6 @@ func TestValidateConfig(t *testing.T) {
183183
in: &Config{
184184
Config: providercfg.Config{
185185
Auth: providercfg.AuthConfig{
186-
VCNID: "ocid1.user.oc1..aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
187186
RegionKey: "phx",
188187
},
189188
UseInstancePrincipals: true,

0 commit comments

Comments
 (0)