Files
vm/service/azure.go
zooqueenandHanzo Dev a121f8d0d0 refactor: rebrand from casvisor to hanzoai/visor, remove hardcoded credentials
- Rename Go module from github.com/casvisor/casvisor to github.com/hanzoai/visor
- Update all copyright headers from casbin to Hanzo Industries Inc
- Remove all hardcoded passwords and credentials from config files
- All credentials now sourced from environment variables / Hanzo KMS
- Switch default database from MySQL to PostgreSQL (matching production)
- Rename binary output from server/casvisor to visor
- Update Dockerfile, build.sh, docker-compose.yml, docker-entrypoint.sh
- Replace casdoor* config key references with iam* equivalents
- Update CI to use PostgreSQL service and mark CI-only test password
- Add visor and casvisor binaries to .gitignore
- Add envFrom secretRef for visor-env in K8s deployment
- Add ExternalSecret template for Hanzo KMS credential provisioning

Co-authored-by: Hanzo Dev <[email protected]>
2026-02-21 00:04:31 -08:00

111 lines
3.1 KiB
Go

// Copyright 2024 Hanzo Industries Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package service
import (
"context"
"fmt"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute"
)
type MachineAzureClient struct {
Client *armcompute.VirtualMachinesClient
resourceGroup string
}
func newMachineAzureClient(accessKeyId string, accessKeySecret string) (MachineAzureClient, error) {
cred, err := azidentity.NewClientSecretCredential("", accessKeyId, accessKeySecret, nil)
if err != nil {
return MachineAzureClient{}, err
}
client, err := armcompute.NewVirtualMachinesClient("", cred, nil)
if err != nil {
return MachineAzureClient{}, err
}
return MachineAzureClient{Client: client, resourceGroup: "us-machine_group"}, nil
}
func getMachineFromAzureInstance(vm armcompute.VirtualMachine) *Machine {
machine := &Machine{
Name: *vm.Name,
Id: *vm.ID,
Region: *vm.Location,
DisplayName: *vm.Name,
}
if vm.Properties != nil {
if vm.Properties.HardwareProfile != nil {
machine.Size = string(*vm.Properties.HardwareProfile.VMSize)
}
if vm.Properties.StorageProfile != nil && vm.Properties.StorageProfile.ImageReference != nil {
machine.Image = *vm.Properties.StorageProfile.ImageReference.ID
}
if vm.Properties.OSProfile != nil {
machine.Os = *vm.Properties.OSProfile.ComputerName
}
if vm.Properties.ProvisioningState != nil {
machine.State = *vm.Properties.ProvisioningState
}
}
if vm.Tags != nil {
for key, value := range vm.Tags {
machine.Tag += fmt.Sprintf("%s=%s,", key, *value)
}
}
return machine
}
func (client MachineAzureClient) GetMachines() ([]*Machine, error) {
pager := client.Client.NewListPager(client.resourceGroup, nil)
machines := []*Machine{}
for pager.More() {
page, err := pager.NextPage(context.Background())
if err != nil {
return nil, err
}
for _, vm := range page.Value {
machine := getMachineFromAzureInstance(*vm)
machines = append(machines, machine)
}
}
return machines, nil
}
func (client MachineAzureClient) GetMachine(name string) (*Machine, error) {
vm, err := client.Client.Get(context.Background(), client.resourceGroup, name, nil)
if err != nil {
return nil, err
}
return getMachineFromAzureInstance(vm.VirtualMachine), nil
}
func (client MachineAzureClient) UpdateMachineState(name string, state string) (bool, string, error) {
return false, "", fmt.Errorf("Not implemented")
}
func (client MachineAzureClient) CreateMachine(spec *CreateMachineSpec) (*Machine, error) {
return nil, fmt.Errorf("CreateMachine not yet implemented for Azure")
}