Skip to content

Commit fc6c346

Browse files
committed
proxmox node name in machine spec
1 parent e0c7f0f commit fc6c346

11 files changed

+107
-11
lines changed

api/v1beta1/proxmoxcluster_types.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,12 @@ type ProxmoxClusterSpec struct {
3535
// +optional
3636
ControlPlaneEndpoint clusterv1.APIEndpoint `json:"controlPlaneEndpoint"`
3737

38-
// ServerRef is used for configuring Proxmox client (and node ssh client)
39-
// to do : client options like insecure tls verify, token login, etc.
38+
// ServerRef is used for configuring Proxmox client
4039
ServerRef ServerRef `json:"serverRef"`
4140

41+
// NodesRef contains reference of nodes used for ProxmoxCluster
42+
NodeRefs []NodeRef `json:"nodeRefs,omitempty"`
43+
4244
// storage is for proxmox storage used by vm instances
4345
Storage Storage `json:"storage"`
4446
}

api/v1beta1/proxmoxmachine_types.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ type ProxmoxMachineSpec struct {
3838
// ProviderID
3939
ProviderID *string `json:"providerID,omitempty"`
4040

41+
// Node is proxmox node hosting vm instance which used for ProxmoxMachine
42+
// +optional
43+
Node string `json:"node,omitempty"`
44+
4145
// Image is the image to be provisioned
4246
Image Image `json:"image"`
4347

api/v1beta1/type.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,19 @@ type ServerRef struct {
1515
// to do : login type should be an option
1616
// user&pass or token
1717

18-
// to do : insecure tls verify
18+
// to do : client options like insecure tls verify
1919

2020
// CredentialsRef is a reference for secret which contains proxmox login secrets
2121
// and ssh configs for proxmox nodes
2222
CredentialsRef *ObjectReference `json:"credentialsRef"`
2323
}
2424

25+
// NodeRef
26+
type NodeRef struct {
27+
Name string `json:"name"`
28+
CredentialsRef *ObjectReference `json:"credentialsRef"`
29+
}
30+
2531
// ObjectReference is a reference to another Kubernetes object instance.
2632
type ObjectReference struct {
2733
// Namespace of the referent.

api/v1beta1/zz_generated.deepcopy.go

Lines changed: 27 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cloud/interfaces.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ type MachineGetter interface {
5353
// Role() string
5454
// IsControlPlane() bool
5555
// ControlPlaneGroupName() string
56+
NodeName() string
5657
GetInstanceID() *string
5758
GetProviderID() string
5859
GetBootstrapData() (string, error)

cloud/scope/cluster.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ func NewClusterScope(ctx context.Context, params ClusterScopeParams) (*ClusterSc
5252
}
5353

5454
if params.ProxmoxServices.Remote == nil {
55-
remote, err := newRemoteClient(ctx, params.ProxmoxCluster.Spec.ServerRef.CredentialsRef, params.Client)
55+
// current CAPP is compatible with only single node proxmox cluster
56+
remote, err := newRemoteClient(ctx, params.ProxmoxCluster.Spec.NodeRefs[0].CredentialsRef, params.Client)
5657
if err != nil {
5758
return nil, errors.Errorf("failed to create remote client: %v", err)
5859
}

cloud/scope/machine.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,10 @@ func (m *MachineScope) Namespace() string {
9999
return m.ProxmoxMachine.Namespace
100100
}
101101

102+
func (m *MachineScope) NodeName() string {
103+
return m.ProxmoxMachine.Spec.Node
104+
}
105+
102106
// func (m *MachineScope) Client() Compute {
103107
// return m.ClusterGetter.Client()
104108
// }

cloud/services/compute/instance/reconcile.go

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,27 @@ func (s *Service) getInstanceFromInstanceID(instanceID string) (*vm.VirtualMachi
100100
func (s *Service) CreateInstance(ctx context.Context, bootstrap string) (*vm.VirtualMachine, error) {
101101
log := log.FromContext(ctx)
102102

103-
// temp solution
104-
node, err := s.GetRandomNode()
105-
if err != nil {
106-
log.Error(err, "failed to get random node")
107-
return nil, err
103+
var node *node.Node
104+
var err error
105+
nodeName := s.scope.NodeName()
106+
if nodeName != "" {
107+
node, err = s.GetNode(nodeName)
108+
if err != nil {
109+
log.Error(err, fmt.Sprintf("failed to get node %s", nodeName))
110+
return nil, err
111+
}
112+
} else {
113+
// temp solution
114+
node, err = s.GetRandomNode()
115+
if err != nil {
116+
log.Error(err, "failed to get random node")
117+
return nil, err
118+
}
108119
}
109120

121+
// (for multiple node proxmox cluster support)
122+
// to do : set ssh client for specific node
123+
110124
vmid, err := s.GetNextID()
111125
if err != nil {
112126
log.Error(err, "failed to get available vmid")
@@ -155,6 +169,10 @@ func (s *Service) GetNodes() ([]*node.Node, error) {
155169
return s.client.Nodes()
156170
}
157171

172+
func (s *Service) GetNode(name string) (*node.Node, error) {
173+
return s.client.Node(name)
174+
}
175+
158176
// GetRandomNode returns a node chosen randomly
159177
func (s *Service) GetRandomNode() (*node.Node, error) {
160178
nodes, err := s.GetNodes()

config/crd/bases/infrastructure.cluster.x-k8s.io_proxmoxclusters.yaml

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,34 @@ spec:
5757
- host
5858
- port
5959
type: object
60+
nodeRefs:
61+
description: NodesRef contains reference of nodes used for ProxmoxCluster
62+
items:
63+
description: NodeRef
64+
properties:
65+
credentialsRef:
66+
description: ObjectReference is a reference to another Kubernetes
67+
object instance.
68+
properties:
69+
name:
70+
description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
71+
type: string
72+
namespace:
73+
description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
74+
type: string
75+
required:
76+
- name
77+
- namespace
78+
type: object
79+
name:
80+
type: string
81+
required:
82+
- credentialsRef
83+
- name
84+
type: object
85+
type: array
6086
serverRef:
61-
description: 'ServerRef is used for configuring Proxmox client to
62-
do : client options like insecure tls verify, token login, etc.'
87+
description: ServerRef is used for configuring Proxmox client
6388
properties:
6489
credentialsRef:
6590
description: CredentialsRef is a reference for secret which contains

config/crd/bases/infrastructure.cluster.x-k8s.io_proxmoxmachines.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,10 @@ spec:
118118
description: search domain
119119
type: string
120120
type: object
121+
node:
122+
description: Node is proxmox node hosting vm instance which used for
123+
ProxmoxMachine
124+
type: string
121125
providerID:
122126
description: ProviderID
123127
type: string

0 commit comments

Comments
 (0)