[node operator] Add Azure client

Signed-off-by: Malte Poll <mp@edgeless.systems>
This commit is contained in:
Malte Poll 2022-07-18 10:18:29 +02:00 committed by Malte Poll
parent a50cc2b64d
commit c74360bf62
17 changed files with 1341 additions and 2 deletions

View file

@ -0,0 +1,45 @@
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"
)
// Client is a client for the Azure Cloud.
type Client struct {
scaleSetsAPI
virtualMachineScaleSetVMsAPI
capacityPollerGenerator func(resourceGroup, scaleSet string, wantedCapacity int64) capacityPoller
pollerOptions *poller.PollUntilDoneOptions
}
// NewFromDefault creates a client with initialized clients.
func NewFromDefault(subscriptionID, tenantID string) (*Client, error) {
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
return nil, err
}
scaleSetAPI, err := armcomputev2.NewVirtualMachineScaleSetsClient(subscriptionID, cred, nil)
if err != nil {
return nil, err
}
virtualMachineScaleSetVMsAPI, err := armcomputev2.NewVirtualMachineScaleSetVMsClient(subscriptionID, cred, nil)
if err != nil {
return nil, err
}
return &Client{
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
}