Skip to content

Commit 637dbb9

Browse files
jakefhydematttrach
andauthored
fix: add support for data directories (#1665)
Co-authored-by: Matt Trachier <[email protected]>
1 parent bbbd78f commit 637dbb9

7 files changed

+161
-0
lines changed

docs/resources/cluster_v2.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -991,6 +991,7 @@ see more information on [Resource Management for Pods and Containers](https://ku
991991
#### Arguments
992992

993993
* `additional_manifest` - (Optional, string, must be in YAML format) The value of the additional manifest is delivered to the path `/var/lib/rancher/rke2/server/manifests/rancher/addons.yaml` or `/var/lib/rancher/k3s/server/manifests/rancher/addons.yaml` on the control plane nodes.
994+
* `data_directories` - (Optional, list, max length: 1) Data directory configuration for the kubernetes distro, system-agent, and provisioning resources.
994995
* `local_auth_endpoint` - (Deprecated) Use rancher2_cluster_v2.local_auth_endpoint instead.
995996
* `upgrade_strategy` - (Optional, list, max length: 1) Cluster upgrade strategy.
996997
* `chart_values` - (Optional, string, must be in YAML format) The value for the system charts installed by the distribution. For more information about how RKE2 or K3s manage packaged components, please refer to [RKE2 documentation](https://docs.rke2.io/helm) or [K3s documentation](https://docs.k3s.io/installation/packaged-components).
@@ -1004,6 +1005,14 @@ see more information on [Resource Management for Pods and Containers](https://ku
10041005
* `etcd_snapshot_create` (Optional, list, max length: 1) Cluster V2 etcd snapshot create.
10051006
* `etcd_snapshot_restore` (Optional, list, max length: 1) Cluster V2 etcd snapshot restore.
10061007

1008+
#### `data_directories`
1009+
1010+
##### Arguments
1011+
1012+
* `system_agent` - (Optional, string) System agent data directory path, used for all system agent data on provisioning v2 downstream cluster nodes. If unspecified, the `rancher-system-agent` will use the default: `/var/lib/rancher/agent`.
1013+
* `provisioning` - (Optional, string) Provisioning data directory path, used for all provisioning data on provisioning v2 downstream cluster nodes. If unspecified, Rancher will use the default: `/var/lib/rancher/provisioning`.
1014+
* `k8s_distro` - (Optional, string) Kubernetes distro data directory path, rendered as the `data-dir` argument for provisioning v2 RKE2/K3s clusters. If unspecified, the distro will use the default: `/var/lib/rancher/rke2` for RKE2, and `/var/lib/rancher/k3s` for K3s.
1015+
10071016
#### `local_auth_endpoint`
10081017

10091018
##### Arguments

rancher2/schema_cluster_v2_rke_config.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,14 @@ func clusterV2RKEConfigFields() map[string]*schema.Schema {
179179
Optional: true,
180180
Description: "Cluster V2 additional manifest",
181181
},
182+
"data_directories": {
183+
Type: schema.TypeList,
184+
Optional: true,
185+
Description: "Cluster V2 data directories",
186+
Elem: &schema.Resource{
187+
Schema: clusterV2RKEConfigDataDirectoriesFields(),
188+
},
189+
},
182190
"local_auth_endpoint": {
183191
Type: schema.TypeList,
184192
MaxItems: 1,
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package rancher2
2+
3+
import (
4+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
5+
)
6+
7+
//Types
8+
9+
func clusterV2RKEConfigDataDirectoriesFields() map[string]*schema.Schema {
10+
s := map[string]*schema.Schema{
11+
"system_agent": {
12+
Type: schema.TypeString,
13+
Optional: true,
14+
Description: "Desired System Agent data directory.",
15+
},
16+
"provisioning": {
17+
Type: schema.TypeString,
18+
Optional: true,
19+
Description: "Desired provisioning data directory.",
20+
},
21+
"k8s_distro": {
22+
Type: schema.TypeString,
23+
Optional: true,
24+
Description: "Desired k8s distro data directory.",
25+
},
26+
}
27+
28+
return s
29+
}

rancher2/structure_cluster_v2_rke_config.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ func flattenClusterV2RKEConfig(in *provisionv1.RKEConfig) []interface{} {
1717
obj["additional_manifest"] = in.AdditionalManifest
1818
}
1919

20+
obj["data_directories"] = flattenClusterV2RKEConfigDataDirectories(in.DataDirectories)
2021
obj["upgrade_strategy"] = flattenClusterV2RKEConfigUpgradeStrategy(in.UpgradeStrategy)
2122

2223
if in.ChartValues.Data != nil && len(in.ChartValues.Data) > 0 {
@@ -73,6 +74,10 @@ func expandClusterV2RKEConfig(p []interface{}) *provisionv1.RKEConfig {
7374
obj.AdditionalManifest = v
7475
}
7576

77+
if v, ok := in["data_directories"].([]interface{}); ok && len(v) > 0 {
78+
obj.DataDirectories = expandClusterV2RKEConfigDataDirectories(v)
79+
}
80+
7681
if v, ok := in["upgrade_strategy"].([]interface{}); ok && len(v) > 0 {
7782
obj.UpgradeStrategy = expandClusterV2RKEConfigUpgradeStrategy(v)
7883
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package rancher2
2+
3+
import rkev1 "github.com/rancher/rancher/pkg/apis/rke.cattle.io/v1"
4+
5+
func flattenClusterV2RKEConfigDataDirectories(in rkev1.DataDirectories) []any {
6+
obj := make(map[string]any)
7+
8+
if in.SystemAgent != "" {
9+
obj["system_agent"] = in.SystemAgent
10+
}
11+
12+
if in.Provisioning != "" {
13+
obj["provisioning"] = in.Provisioning
14+
}
15+
16+
if in.K8sDistro != "" {
17+
obj["k8s_distro"] = in.K8sDistro
18+
}
19+
20+
return []any{obj}
21+
}
22+
23+
func expandClusterV2RKEConfigDataDirectories(p []any) rkev1.DataDirectories {
24+
obj := rkev1.DataDirectories{}
25+
26+
if p == nil || len(p) == 0 || p[0] == nil {
27+
return obj
28+
}
29+
30+
in := p[0].(map[string]interface{})
31+
32+
if v, ok := in["system_agent"].(string); ok && v != "" {
33+
obj.SystemAgent = v
34+
}
35+
36+
if v, ok := in["provisioning"].(string); ok && v != "" {
37+
obj.Provisioning = v
38+
}
39+
40+
if v, ok := in["k8s_distro"].(string); ok && v != "" {
41+
obj.K8sDistro = v
42+
}
43+
44+
return obj
45+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package rancher2
2+
3+
import (
4+
"testing"
5+
6+
rkev1 "github.com/rancher/rancher/pkg/apis/rke.cattle.io/v1"
7+
"github.com/stretchr/testify/assert"
8+
)
9+
10+
var (
11+
testClusterV2RKEConfigDataDirectoriesConf rkev1.DataDirectories
12+
testClusterV2RKEConfigDataDirectoriesInterface []interface{}
13+
)
14+
15+
func init() {
16+
testClusterV2RKEConfigDataDirectoriesConf = rkev1.DataDirectories{
17+
SystemAgent: "/tmp/test/agent",
18+
Provisioning: "/tmp/test/provisioning",
19+
K8sDistro: "/tmp/test/distro",
20+
}
21+
22+
testClusterV2RKEConfigDataDirectoriesInterface = []any{
23+
map[string]any{
24+
"system_agent": "/tmp/test/agent",
25+
"provisioning": "/tmp/test/provisioning",
26+
"k8s_distro": "/tmp/test/distro",
27+
},
28+
}
29+
}
30+
31+
func Test_flattenClusterV2RKEConfigDataDirectories(t *testing.T) {
32+
cases := []struct {
33+
Input rkev1.DataDirectories
34+
ExpectedOutput []interface{}
35+
}{
36+
{
37+
testClusterV2RKEConfigDataDirectoriesConf,
38+
testClusterV2RKEConfigDataDirectoriesInterface,
39+
},
40+
}
41+
42+
for _, tc := range cases {
43+
output := flattenClusterV2RKEConfigDataDirectories(tc.Input)
44+
assert.Equal(t, tc.ExpectedOutput, output, "Unexpected output from flattener.")
45+
}
46+
}
47+
48+
func TestExpandClusterV2RKEConfigDataDirectories(t *testing.T) {
49+
cases := []struct {
50+
Input []interface{}
51+
ExpectedOutput rkev1.DataDirectories
52+
}{
53+
{
54+
testClusterV2RKEConfigDataDirectoriesInterface,
55+
testClusterV2RKEConfigDataDirectoriesConf,
56+
},
57+
}
58+
59+
for _, tc := range cases {
60+
output := expandClusterV2RKEConfigDataDirectories(tc.Input)
61+
assert.Equal(t, tc.ExpectedOutput, output, "Unexpected output from expander.")
62+
}
63+
}

rancher2/structure_cluster_v2_rke_config_z_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ func init() {
1818
MachinePools: testClusterV2RKEConfigMachinePoolsConf,
1919
}
2020
testClusterV2RKEConfigConf.AdditionalManifest = "additional_manifest"
21+
testClusterV2RKEConfigConf.DataDirectories = testClusterV2RKEConfigDataDirectoriesConf
2122
testClusterV2RKEConfigConf.UpgradeStrategy = testClusterV2RKEConfigUpgradeStrategyConf
2223
testClusterV2RKEConfigConf.ChartValues = rkev1.GenericMap{
2324
Data: map[string]interface{}{
@@ -43,6 +44,7 @@ func init() {
4344
testClusterV2RKEConfigInterface = []interface{}{
4445
map[string]interface{}{
4546
"additional_manifest": "additional_manifest",
47+
"data_directories": testClusterV2RKEConfigDataDirectoriesInterface,
4648
"upgrade_strategy": testClusterV2RKEConfigUpgradeStrategyInterface,
4749
"chart_values": "chart_one: one\nchart_two: two\n",
4850
"machine_global_config": "config_one: one\nconfig_two: two\n",

0 commit comments

Comments
 (0)