Skip to content

Commit ef47f0c

Browse files
committed
fix: service endpoint spec flattening
1 parent d8b0c13 commit ef47f0c

File tree

2 files changed

+25
-5
lines changed

2 files changed

+25
-5
lines changed

docker/resource_docker_service_funcs.go

+14-4
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ func resourceDockerServiceCreate(d *schema.ResourceData, meta interface{}) error
9494
}
9595
}
9696

97+
d.SetId(service.ID)
9798
return resourceDockerServiceRead(d, meta)
9899
}
99100

@@ -141,8 +142,8 @@ func resourceDockerServiceReadRefreshFunc(
141142
jsonObj, _ := json.MarshalIndent(service, "", "\t")
142143
log.Printf("[DEBUG] Docker service inspect: %s", jsonObj)
143144

144-
if service.Endpoint.Spec.Mode != service.Spec.EndpointSpec.Mode {
145-
log.Printf("[DEBUG] endpoint.Spec of Service %s does not match Spec.EndpointSpec yet", serviceID)
145+
if string(service.Endpoint.Spec.Mode) == "" && string(service.Spec.EndpointSpec.Mode) == "" {
146+
log.Printf("[DEBUG] Service %s does not expose endpoint spec yet", apiService.ID)
146147
return serviceID, "pending", nil
147148
}
148149

@@ -162,8 +163,17 @@ func resourceDockerServiceReadRefreshFunc(
162163
if err = d.Set("rollback_config", flattenServiceUpdateOrRollbackConfig(service.Spec.RollbackConfig)); err != nil {
163164
log.Printf("[WARN] failed to set rollback_config from API: %s", err)
164165
}
165-
if err = d.Set("endpoint_spec", flattenServiceEndpointSpec(service.Endpoint)); err != nil {
166-
log.Printf("[WARN] failed to set endpoint spec from API: %s", err)
166+
167+
if service.Endpoint.Spec.Mode != "" {
168+
if err = d.Set("endpoint_spec", flattenServiceEndpoint(service.Endpoint)); err != nil {
169+
log.Printf("[WARN] failed to set endpoint spec from API: %s", err)
170+
}
171+
} else if service.Spec.EndpointSpec.Mode != "" {
172+
if err = d.Set("endpoint_spec", flattenServiceEndpointSpec(service.Spec.EndpointSpec)); err != nil {
173+
log.Printf("[WARN] failed to set endpoint spec from API: %s", err)
174+
}
175+
} else {
176+
return serviceID, "", fmt.Errorf("Error no endpoint spec for service %s", apiService.ID)
167177
}
168178

169179
return serviceID, "all_fields", nil

docker/structures_service.go

+11-1
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ func flattenServiceUpdateOrRollbackConfig(in *swarm.UpdateConfig) []interface{}
8585
return out
8686
}
8787

88-
func flattenServiceEndpointSpec(in swarm.Endpoint) []interface{} {
88+
func flattenServiceEndpoint(in swarm.Endpoint) []interface{} {
8989
var out = make([]interface{}, 0, 0)
9090
m := make(map[string]interface{})
9191
m["mode"] = string(in.Spec.Mode)
@@ -95,6 +95,16 @@ func flattenServiceEndpointSpec(in swarm.Endpoint) []interface{} {
9595
return out
9696
}
9797

98+
func flattenServiceEndpointSpec(in *swarm.EndpointSpec) []interface{} {
99+
var out = make([]interface{}, 0, 0)
100+
m := make(map[string]interface{})
101+
m["mode"] = string(in.Mode)
102+
m["ports"] = flattenServicePorts(in.Ports)
103+
104+
out = append(out, m)
105+
return out
106+
}
107+
98108
///// start TaskSpec
99109
func flattenContainerSpec(in *swarm.ContainerSpec) []interface{} {
100110
var out = make([]interface{}, 0, 0)

0 commit comments

Comments
 (0)