func newCloud()

in pkg/providers/v2/cloud.go [151:217]


func newCloud(cfg *awsconfigv1alpha1.AWSCloudConfig) (cloudprovider.Interface, error) {
	sess, err := session.NewSession(&aws.Config{})
	if err != nil {
		return nil, fmt.Errorf("unable to initialize AWS session: %v", err)
	}

	creds := credentials.NewChainCredentials(
		[]credentials.Provider{
			&credentials.EnvProvider{},
			&ec2rolecreds.EC2RoleProvider{
				Client: ec2metadata.New(sess),
			},
			&credentials.SharedCredentialsProvider{},
		})

	metadataClient := ec2metadata.New(sess)
	if err != nil {
		return nil, fmt.Errorf("error creating AWS metadata client: %q", err)
	}

	az, err := getAvailabilityZone(metadataClient)
	if err != nil {
		return nil, err
	}

	region, err := azToRegion(az)
	if err != nil {
		return nil, err
	}

	ec2Sess, err := session.NewSession(&aws.Config{
		Region:      aws.String(region),
		Credentials: creds,
	})
	if err != nil {
		return nil, fmt.Errorf("unable to initialize AWS session: %v", err)
	}

	ec2Service := ec2.New(ec2Sess)
	if err != nil {
		return nil, fmt.Errorf("error creating AWS ec2 client: %q", err)
	}

	var tags awsTagging
	if cfg.Config.ClusterName != "" {
		tags, err = newAWSTags(cfg.Config.ClusterName)
		if err != nil {
			return nil, err
		}
	} else {
		klog.Warning("misconfigured cluster: no clusterName")
	}

	instances, err := newInstances(az, creds, tags)
	if err != nil {
		return nil, err
	}

	return &cloud{
		creds:     creds,
		instances: instances,
		region:    region,
		metadata:  metadataClient,
		ec2:       ec2Service,
		tags:      tags,
	}, nil
}