@@ -42,7 +42,7 @@ func resourceEnvironment() *schema.Resource {
42
42
},
43
43
"order" : {
44
44
Type : schema .TypeInt ,
45
- Required : true ,
45
+ Optional : true ,
46
46
Description : "The environment sorting order." ,
47
47
ValidateFunc : validation .IntAtLeast (0 ),
48
48
},
@@ -67,10 +67,14 @@ func resourceEnvironment() *schema.Resource {
67
67
68
68
func resourceEnvironmentUpsert (ctx context.Context , d * schema.ResourceData , m interface {}) diag.Diagnostics {
69
69
c := m .(api.Client )
70
+ existedName := d .Id ()
70
71
71
- newOrder := d .Get ("order" ).(int )
72
72
environmentID := d .Get ("resource_id" ).(string )
73
73
environmentName := fmt .Sprintf ("%s%s" , internal .EnvironmentNamePrefix , environmentID )
74
+
75
+ if existedName != "" && existedName != environmentName {
76
+ return diag .Errorf ("cannot change the resource id" )
77
+ }
74
78
v1Env := & v1pb.EnvironmentSetting_Environment {
75
79
Id : environmentID ,
76
80
Title : d .Get ("title" ).(string ),
@@ -83,7 +87,7 @@ func resourceEnvironmentUpsert(ctx context.Context, d *schema.ResourceData, m in
83
87
v1Env .Tags ["protected" ] = "unprotected"
84
88
}
85
89
86
- existedEnv , order , enironmentList , err := findEnvironment (ctx , c , environmentName )
90
+ existedEnv , oldOrder , enironmentList , err := findEnvironment (ctx , c , environmentName )
87
91
if err != nil {
88
92
if ! strings .HasPrefix (err .Error (), "cannot found the environment" ) {
89
93
return diag .FromErr (err )
@@ -93,8 +97,16 @@ func resourceEnvironmentUpsert(ctx context.Context, d *schema.ResourceData, m in
93
97
return diag .Errorf ("cannot found environment setting" )
94
98
}
95
99
96
- if newOrder >= len (enironmentList ) {
97
- return diag .Errorf ("the new order %v out of range %v" , newOrder , len (enironmentList )- 1 )
100
+ var newOrder int
101
+ order , ok := d .GetOk ("order" )
102
+ if ! ok {
103
+ if existedEnv != nil {
104
+ newOrder = oldOrder
105
+ } else {
106
+ newOrder = len (enironmentList )
107
+ }
108
+ } else {
109
+ newOrder = order .(int )
98
110
}
99
111
100
112
var diags diag.Diagnostics
@@ -105,10 +117,14 @@ func resourceEnvironmentUpsert(ctx context.Context, d *schema.ResourceData, m in
105
117
Detail : fmt .Sprintf ("Environment %s already exists, try to exec the update operation" , environmentID ),
106
118
})
107
119
108
- if order == newOrder {
109
- enironmentList [order ] = v1Env
120
+ if newOrder >= len (enironmentList ) {
121
+ return diag .Errorf ("the new order %v out of range %v" , newOrder , len (enironmentList )- 1 )
122
+ }
123
+
124
+ if oldOrder == newOrder {
125
+ enironmentList [oldOrder ] = v1Env
110
126
} else {
111
- enironmentList = slices .Delete (enironmentList , order , order + 1 )
127
+ enironmentList = slices .Delete (enironmentList , oldOrder , oldOrder + 1 )
112
128
enironmentList = slices .Insert (enironmentList , newOrder , v1Env )
113
129
}
114
130
} else {
0 commit comments