constellation/operators/constellation-node-operator/internal/azure/client/client.go
Malte Poll 51cf638361 [node operator] self-initialize resources
Signed-off-by: Malte Poll <mp@edgeless.systems>
2022-08-09 10:29:04 +02:00

54 lines
1.6 KiB
Go

package client
import (
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
armcomputev2 "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v2"
"github.com/edgelesssys/constellation/operators/constellation-node-operator/internal/poller"
"github.com/spf13/afero"
)
// Client is a client for the Azure Cloud.
type Client struct {
config cloudConfig
scaleSetsAPI
virtualMachineScaleSetVMsAPI
capacityPollerGenerator func(resourceGroup, scaleSet string, wantedCapacity int64) capacityPoller
pollerOptions *poller.PollUntilDoneOptions
}
// NewFromDefault creates a client with initialized clients.
func NewFromDefault(configPath string) (*Client, error) {
config, err := loadConfig(afero.NewOsFs(), configPath)
if err != nil {
return nil, err
}
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
return nil, err
}
scaleSetAPI, err := armcomputev2.NewVirtualMachineScaleSetsClient(config.SubscriptionID, cred, nil)
if err != nil {
return nil, err
}
virtualMachineScaleSetVMsAPI, err := armcomputev2.NewVirtualMachineScaleSetVMsClient(config.SubscriptionID, cred, nil)
if err != nil {
return nil, err
}
return &Client{
config: *config,
scaleSetsAPI: scaleSetAPI,
virtualMachineScaleSetVMsAPI: virtualMachineScaleSetVMsAPI,
capacityPollerGenerator: func(resourceGroup, scaleSet string, wantedCapacity int64) capacityPoller {
return poller.New[int64](&capacityPollingHandler{
resourceGroup: resourceGroup,
scaleSet: scaleSet,
wantedCapacity: wantedCapacity,
scaleSetsAPI: scaleSetAPI,
})
},
}, nil
}