Skip to content

Commit

Permalink
Merge 084b24c into 286b6df
Browse files Browse the repository at this point in the history
  • Loading branch information
chrisayoub committed May 20, 2021
2 parents 286b6df + 084b24c commit cae4ee5
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 11 deletions.
25 changes: 16 additions & 9 deletions pkg/cloud/metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,15 +75,18 @@ func (m *Metadata) GetOutpostArn() arn.ARN {
func NewMetadata() (MetadataService, error) {
sess := session.Must(session.NewSession(&aws.Config{}))
svc := ec2metadata.New(sess)
// creates the in-cluster config
config, err := rest.InClusterConfig()
if err != nil && !svc.Available() {
return nil, err
}
// creates the clientset
clientset, err := kubernetes.NewForConfig(config)
if err != nil && !svc.Available() {
return nil, err
var clientset *kubernetes.Clientset
if !svc.Available() {
// creates the in-cluster config
config, err := rest.InClusterConfig()
if err != nil {
return nil, err
}
// creates the clientset
clientset, err = kubernetes.NewForConfig(config)
if err != nil {
return nil, err
}
}
metadataService, err := NewMetadataService(svc, clientset)
if err != nil {
Expand All @@ -95,6 +98,10 @@ func NewMetadata() (MetadataService, error) {
// NewMetadataService returns a new MetadataServiceImplementation.
func NewMetadataService(svc EC2Metadata, clientset kubernetes.Interface) (MetadataService, error) {
if !svc.Available() {
if clientset == nil {
return nil, fmt.Errorf("instance metadata is unavailable and kubernetes clientset is nil")
}

klog.Warningf("EC2 instance metadata is not available")
nodeName := os.Getenv("CSI_NODE_NAME")
if nodeName == "" {
Expand Down
19 changes: 17 additions & 2 deletions pkg/cloud/metadata_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ func TestNewMetadataService(t *testing.T) {
getNodeErr error
node v1.Node
nodeNameEnvVar string
isClientSetNil bool
clientSetNilErr error
}{
{
name: "success: normal",
Expand Down Expand Up @@ -325,11 +327,20 @@ func TestNewMetadataService(t *testing.T) {
getInstanceDocErr: nil,
getOutpostArnErr: fmt.Errorf("405"),
},
{
name: "fail: kube client is nil",
isAvailable: false,
isClientSetNil: true,
clientSetNilErr: fmt.Errorf("instance metadata is unavailable and kubernetes clientset is nil"),
},
}

for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
clientset := fake.NewSimpleClientset(&tc.node)
var clientset *fake.Clientset
if !tc.isClientSetNil {
clientset = fake.NewSimpleClientset(&tc.node)
}
if tc.name == "failure: metadata not available, k8s client error" {
clientset.PrependReactor("get", "*", func(action k8s_testing.Action) (handled bool, ret runtime.Object, err error) {
return true, nil, fmt.Errorf("client failure")
Expand Down Expand Up @@ -394,7 +405,11 @@ func TestNewMetadataService(t *testing.T) {
if err == nil {
t.Fatalf("NewMetadataService() failed: expected error but got nothing")
}
if err.Error() != tc.getNodeErr.Error() {
if tc.isClientSetNil {
if err.Error() != tc.clientSetNilErr.Error() {
t.Fatalf("NewMetadataService() returned an unexpected error. Expected %v, got %v", tc.clientSetNilErr, err)
}
} else if err.Error() != tc.getNodeErr.Error() {
t.Fatalf("NewMetadataService() returned an unexpected error. Expected %v, got %v", tc.getNodeErr, err)
}
}
Expand Down

0 comments on commit cae4ee5

Please sign in to comment.