Skip to content

Commit 557d2f3

Browse files
flexbot v1.11.1
1 parent da018b7 commit 557d2f3

File tree

5 files changed

+56
-45
lines changed

5 files changed

+56
-45
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## 1.11.1 (November 5, 2024)
2+
3+
ENHANCEMENTS:
4+
* Enhancements to improve resiliency in rke2 API provider calls
5+
6+
17
## 1.11.0 (October 10, 2024)
28

39
ENHANCEMENTS:

GNUmakefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
DISTFILE=terraform-provider-flexbot
2-
VERSION=1.11.0
2+
VERSION=1.11.1
33
OSFLAG=$(shell go env GOHOSTOS)
44

55
default: build

pkg/rancher/rk-api-client.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,12 @@ func (client *RkApiClient) IsTransientError(err error) (bool) {
306306
if strings.Contains(err.Error(), "i/o timeout") {
307307
return true
308308
}
309+
if strings.Contains(err.Error(), "handshake timeout") {
310+
return true
311+
}
312+
if strings.Contains(err.Error(), "connection reset by peer") {
313+
return true
314+
}
309315
if strings.Contains(err.Error(), "context deadline exceeded") {
310316
return true
311317
}

pkg/rancher/rke2-client.go

Lines changed: 41 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ func (client *Rke2Client) IsTransientError(err error) (bool) {
4242
if strings.Contains(err.Error(), "i/o timeout") {
4343
return true
4444
}
45+
if strings.Contains(err.Error(), "handshake timeout") {
46+
return true
47+
}
48+
if strings.Contains(err.Error(), "connection reset by peer") {
49+
return true
50+
}
4551
if strings.Contains(err.Error(), "context deadline exceeded") {
4652
return true
4753
}
@@ -57,23 +63,23 @@ func (client *Rke2Client) IsNotFoundError(err error) (bool) {
5763
return false
5864
}
5965

60-
// GetNode gets RKE2 node by node IP address
61-
func (client *Rke2Client) GetNode(nodeIpAddr string) (nodeName string, err error) {
66+
// GetNode gets RKE2 node name by node IP address
67+
func (client *Rke2Client) GetNodeName(nodeIpAddr string) (nodeName string, err error) {
6268
var nodes *v1.NodeList
6369
for retry := 0; retry < client.RancherConfig.Retries; retry++ {
6470
if nodes, err = client.Management.CoreV1().Nodes().List(context.TODO(), metav1.ListOptions{}); err == nil {
6571
for _, item := range nodes.Items {
6672
var hostIpAddr net.IP
6773
if hostIpAddr, err = node.GetNodeHostIP(&item); err != nil {
68-
err = fmt.Errorf("rke2-client.GetNode().node.GetNodeHostIP() error: %s", err)
74+
err = fmt.Errorf("rke2-client.GetNodeName().node.GetNodeHostIP() error: %s", err)
6975
return
7076
}
7177
if hostIpAddr.String() == nodeIpAddr {
7278
nodeName = item.Name
7379
return
7480
}
7581
}
76-
err = fmt.Errorf("rke2-client.GetNode().node.GetNodeHostIP() error: node with IP address %s not found", nodeIpAddr)
82+
err = fmt.Errorf("rke2-client.GetNodeName().node.GetNodeHostIP() error: node with IP address %s not found", nodeIpAddr)
7783
return
7884
}
7985
if !client.IsTransientError(err) {
@@ -82,25 +88,15 @@ func (client *Rke2Client) GetNode(nodeIpAddr string) (nodeName string, err error
8288
time.Sleep(rke2RetriesWait * time.Second)
8389
}
8490
if err != nil {
85-
err = fmt.Errorf("rke2-client.GetNode() error: %s", err)
91+
err = fmt.Errorf("rke2-client.GetNodeName() error: %s", err)
8692
}
8793
return
8894
}
8995

90-
// GetNodeRole gets RKE2 node role
91-
func (client *Rke2Client) GetNodeRole(nodeName string) (controlplane bool, etcd bool, worker bool, err error) {
92-
var node *v1.Node
96+
// GetNodeByName gets RKE2 node by node name
97+
func (client *Rke2Client) GetNodeByName(nodeName string) (node *v1.Node, err error) {
9398
for retry := 0; retry < client.RancherConfig.Retries; retry++ {
9499
if node, err = client.Management.CoreV1().Nodes().Get(context.TODO(), nodeName, metav1.GetOptions{}); err == nil {
95-
if strings.ToLower(node.Labels[Rke2NodeRoleLabelWorker]) == "true" {
96-
worker = true
97-
}
98-
if strings.ToLower(node.Labels[Rke2NodeRoleLabelControlplane]) == "true" {
99-
controlplane = true
100-
}
101-
if strings.ToLower(node.Labels[Rke2NodeRoleLabelEtcd]) == "true" {
102-
etcd = true
103-
}
104100
return
105101
}
106102
if !client.IsTransientError(err) {
@@ -109,6 +105,25 @@ func (client *Rke2Client) GetNodeRole(nodeName string) (controlplane bool, etcd
109105
time.Sleep(rke2RetriesWait * time.Second)
110106
}
111107
if err != nil {
108+
err = fmt.Errorf("rke2-client.GetNodeByName(%s) error: %s", nodeName, err)
109+
}
110+
return
111+
}
112+
113+
// GetNodeRole gets RKE2 node role
114+
func (client *Rke2Client) GetNodeRole(nodeName string) (controlplane bool, etcd bool, worker bool, err error) {
115+
var node *v1.Node
116+
if node, err = client.GetNodeByName(nodeName); err == nil {
117+
if strings.ToLower(node.Labels[Rke2NodeRoleLabelWorker]) == "true" {
118+
worker = true
119+
}
120+
if strings.ToLower(node.Labels[Rke2NodeRoleLabelControlplane]) == "true" {
121+
controlplane = true
122+
}
123+
if strings.ToLower(node.Labels[Rke2NodeRoleLabelEtcd]) == "true" {
124+
etcd = true
125+
}
126+
} else {
112127
err = fmt.Errorf("rke2-client.GetNodeRole(%s) error: %s", nodeName, err)
113128
}
114129
return
@@ -117,17 +132,9 @@ func (client *Rke2Client) GetNodeRole(nodeName string) (controlplane bool, etcd
117132
// IsNodeReady returns true if node ready
118133
func (client *Rke2Client) IsNodeReady(nodeName string) (ready bool, err error) {
119134
var nodeObj *v1.Node
120-
for retry := 0; retry < client.RancherConfig.Retries; retry++ {
121-
if nodeObj, err = client.Management.CoreV1().Nodes().Get(context.TODO(), nodeName, metav1.GetOptions{}); err == nil {
122-
ready = node.IsNodeReady(nodeObj)
123-
return
124-
}
125-
if !client.IsTransientError(err) {
126-
break
127-
}
128-
time.Sleep(rke2RetriesWait * time.Second)
129-
}
130-
if err != nil {
135+
if nodeObj, err = client.GetNodeByName(nodeName); err == nil {
136+
ready = node.IsNodeReady(nodeObj)
137+
} else {
131138
err = fmt.Errorf("rke2-client.IsNodeReady(%s) error: %s", nodeName, err)
132139
}
133140
return
@@ -277,10 +284,10 @@ func (client *Rke2Client) NodeSetAnnotationsLabelsTaints(nodeName string, annota
277284
// NodeGetLabels get RKE2 node labels
278285
func (client *Rke2Client) NodeGetLabels(nodeName string) (nodeLabels map[string]string, err error) {
279286
var node *v1.Node
280-
if node, err = client.Management.CoreV1().Nodes().Get(context.TODO(), nodeName, metav1.GetOptions{}); err != nil {
281-
err = fmt.Errorf("rke2-client.NodeGetLabels() error: %s", err)
282-
} else {
287+
if node, err = client.GetNodeByName(nodeName); err == nil {
283288
nodeLabels = node.Labels
289+
} else {
290+
err = fmt.Errorf("rke2-client.NodeGetLabels() error: %s", err)
284291
}
285292
return
286293
}
@@ -319,17 +326,9 @@ func (client *Rke2Client) NodeUpdateLabels(nodeName string, oldLabels map[string
319326
// NodeGetTaints get RKE2 node taints
320327
func (client *Rke2Client) NodeGetTaints(nodeName string) (nodeTaints []v1.Taint, err error) {
321328
var node *v1.Node
322-
for retry := 0; retry < client.RancherConfig.Retries; retry++ {
323-
if node, err = client.Management.CoreV1().Nodes().Get(context.TODO(), nodeName, metav1.GetOptions{}); err == nil {
324-
nodeTaints = node.Spec.Taints
325-
return
326-
}
327-
if !client.IsTransientError(err) {
328-
break
329-
}
330-
time.Sleep(rke2RetriesWait * time.Second)
331-
}
332-
if err != nil {
329+
if node, err = client.GetNodeByName(nodeName); err == nil {
330+
nodeTaints = node.Spec.Taints
331+
} else {
333332
err = fmt.Errorf("rke2-client.NodeGetTaints() error: %s", err)
334333
}
335334
return

pkg/rancher/rke2.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ func Rke2APIInitialize(d *schema.ResourceData, meta interface{}, nodeConfig *con
5959
return
6060
}
6161
node.RancherClient = rke2Client
62-
if node.NodeID, err = node.RancherClient.GetNode(network["node"].([]interface{})[0].(map[string]interface{})["ip"].(string)); err == nil {
62+
if node.NodeID, err = node.RancherClient.GetNodeName(network["node"].([]interface{})[0].(map[string]interface{})["ip"].(string)); err == nil {
6363
if len(node.NodeID) > 0 {
6464
node.NodeControlPlane, node.NodeEtcd, node.NodeWorker, err = node.RancherClient.GetNodeRole(node.NodeID)
6565
}
@@ -80,7 +80,7 @@ func (node *Rke2Node) RancherAPINodeGetID(d *schema.ResourceData, meta interface
8080
meta.(*config.FlexbotConfig).Sync.Lock()
8181
network := d.Get("network").([]interface{})[0].(map[string]interface{})
8282
meta.(*config.FlexbotConfig).Sync.Unlock()
83-
if node.NodeID, err = node.RancherClient.GetNode(network["node"].([]interface{})[0].(map[string]interface{})["ip"].(string)); err != nil {
83+
if node.NodeID, err = node.RancherClient.GetNodeName(network["node"].([]interface{})[0].(map[string]interface{})["ip"].(string)); err != nil {
8484
err = fmt.Errorf("rancherAPINodeGetID(): node %s not found", node.NodeConfig.Compute.HostName)
8585
}
8686
}

0 commit comments

Comments
 (0)