Skip to content

Commit 488c591

Browse files
Merge branch 'add-node-conditions-to-kubernetes-nodes-data-source'
2 parents 3328d19 + 24776a3 commit 488c591

File tree

5 files changed

+71
-1
lines changed

5 files changed

+71
-1
lines changed

.changelog/2612.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
Added `conditions` attribute to `kubernetes_nodes` data source, which will provide detailed node health and status information
3+
```

docs/data-sources/nodes.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ Read-Only:
8282
- `allocatable` (Map of String)
8383
- `capacity` (Map of String)
8484
- `node_info` (List of Object) (see [below for nested schema](#nestedobjatt--nodes--status--node_info))
85-
85+
- `conditions` (List of Object) (see [below for nested schema](#nestedobjatt--nodes--status--conditions))
8686
<a id="nestedobjatt--nodes--status--addresses"></a>
8787
### Nested Schema for `nodes.status.addresses`
8888

@@ -108,7 +108,17 @@ Read-Only:
108108
- `os_image` (String)
109109
- `system_uuid` (String)
110110

111+
<a id="nestedobjatt--nodes--status--conditions"></a>
112+
### Nested Schema for `nodes.status.conditions`
113+
114+
Read-Only:
111115

116+
- `type` (String)
117+
- `status` (String)
118+
- `last_heartbeat_time` (String)
119+
- `last_transition_time` (String)
120+
- `reason` (String)
121+
- `message` (String)
112122

113123

114124

kubernetes/data_source_kubernetes_nodes_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,13 @@ func TestAccKubernetesDataSourceNodes_basic(t *testing.T) {
3333
resource.TestCheckResourceAttrWith(dataSourceName, "nodes.0.status.0.capacity.memory", checkParsableQuantity),
3434
resource.TestCheckResourceAttrSet(dataSourceName, "nodes.0.status.0.node_info.0.architecture"),
3535
resource.TestCheckResourceAttrSet(dataSourceName, "nodes.0.status.0.addresses.0.address"),
36+
resource.TestMatchResourceAttr(dataSourceName, "nodes.0.status.0.conditions.#", oneOrMore),
37+
resource.TestCheckResourceAttrSet(dataSourceName, "nodes.0.status.0.conditions.0.type"),
38+
resource.TestCheckResourceAttrSet(dataSourceName, "nodes.0.status.0.conditions.0.status"),
39+
resource.TestCheckResourceAttrSet(dataSourceName, "nodes.0.status.0.conditions.0.last_heartbeat_time"),
40+
resource.TestCheckResourceAttrSet(dataSourceName, "nodes.0.status.0.conditions.0.last_transition_time"),
41+
resource.TestCheckResourceAttrSet(dataSourceName, "nodes.0.status.0.conditions.0.reason"),
42+
resource.TestCheckResourceAttrSet(dataSourceName, "nodes.0.status.0.conditions.0.message"),
3643
)
3744
resource.ParallelTest(t, resource.TestCase{
3845
PreCheck: func() { testAccPreCheck(t) },

kubernetes/schema_node_spec.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,39 @@ func nodeStatusFields() map[string]*schema.Schema {
124124
},
125125
},
126126
},
127+
"conditions": {
128+
Type: schema.TypeList,
129+
Computed: true,
130+
Description: "List of conditions describing each node's health and operational status.",
131+
Elem: &schema.Resource{
132+
Schema: map[string]*schema.Schema{
133+
"type": {
134+
Type: schema.TypeString,
135+
Computed: true,
136+
},
137+
"status": {
138+
Type: schema.TypeString,
139+
Computed: true,
140+
},
141+
"last_heartbeat_time": {
142+
Type: schema.TypeString,
143+
Computed: true,
144+
},
145+
"last_transition_time": {
146+
Type: schema.TypeString,
147+
Computed: true,
148+
},
149+
"reason": {
150+
Type: schema.TypeString,
151+
Computed: true,
152+
},
153+
"message": {
154+
Type: schema.TypeString,
155+
Computed: true,
156+
},
157+
},
158+
},
159+
},
127160
}
128161
}
129162

kubernetes/structures_node.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,29 @@ func flattenNodeInfo(in v1.NodeSystemInfo) []interface{} {
7171
return []interface{}{att}
7272
}
7373

74+
func flattenNodeConditions(conditions []v1.NodeCondition) []interface{} {
75+
out := make([]interface{}, len(conditions))
76+
for i, condition := range conditions {
77+
m := make(map[string]interface{})
78+
m["type"] = condition.Type
79+
m["status"] = condition.Status
80+
m["last_heartbeat_time"] = condition.LastHeartbeatTime.String()
81+
m["last_transition_time"] = condition.LastTransitionTime.String()
82+
m["reason"] = condition.Reason
83+
m["message"] = condition.Message
84+
out[i] = m
85+
}
86+
return out
87+
}
88+
7489
func flattenNodeStatus(in v1.NodeStatus) []interface{} {
7590
att := make(map[string]interface{})
7691
att["addresses"] = flattenAddresses(in.Addresses...)
7792
att["allocatable"] = flattenResourceList(in.Allocatable)
7893
att["capacity"] = flattenResourceList(in.Capacity)
7994
att["node_info"] = flattenNodeInfo(in.NodeInfo)
95+
att["conditions"] = flattenNodeConditions(in.Conditions)
96+
8097
return []interface{}{att}
8198
}
8299

0 commit comments

Comments
 (0)