mirror of
https://github.com/kreuzwerker/terraform-provider-docker.git
synced 2025-12-29 11:09:36 -05:00
fix(service): ports flattening (#233)
Closes #222 * fix(service): changes ports from set to list. adapts tests. marks published port computed. uses endpoint spec from api to flatten.
This commit is contained in:
parent
45e3127fb9
commit
a7f6cc9300
4 changed files with 26 additions and 31 deletions
|
|
@ -876,7 +876,7 @@ func resourceDockerService() *schema.Resource {
|
|||
ValidateFunc: validateStringMatchesPattern(`^(vip|dnsrr)$`),
|
||||
},
|
||||
"ports": {
|
||||
Type: schema.TypeSet,
|
||||
Type: schema.TypeList,
|
||||
Description: "List of exposed ports that this service is accessible on from the outside. Ports can only be provided if 'vip' resolution mode is used.",
|
||||
Optional: true,
|
||||
Elem: &schema.Resource{
|
||||
|
|
@ -902,6 +902,7 @@ func resourceDockerService() *schema.Resource {
|
|||
Type: schema.TypeInt,
|
||||
Description: "The port on the swarm hosts.",
|
||||
Optional: true,
|
||||
Computed: true,
|
||||
},
|
||||
"publish_mode": {
|
||||
Type: schema.TypeString,
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ func resourceDockerServiceRead(d *schema.ResourceData, meta interface{}) error {
|
|||
if err = d.Set("rollback_config", flattenServiceUpdateOrRollbackConfig(service.Spec.RollbackConfig)); err != nil {
|
||||
log.Printf("[WARN] failed to set rollback_config from API: %s", err)
|
||||
}
|
||||
if err = d.Set("endpoint_spec", flattenServiceEndpointSpec(service.Spec.EndpointSpec)); err != nil {
|
||||
if err = d.Set("endpoint_spec", flattenServiceEndpointSpec(service.Endpoint)); err != nil {
|
||||
log.Printf("[WARN] failed to set endpoint spec from API: %s", err)
|
||||
}
|
||||
|
||||
|
|
@ -1183,8 +1183,8 @@ func createServiceEndpointSpec(d *schema.ResourceData) (*swarm.EndpointSpec, err
|
|||
// portSetToServicePorts maps a set of ports to portConfig
|
||||
func portSetToServicePorts(v interface{}) []swarm.PortConfig {
|
||||
retPortConfigs := []swarm.PortConfig{}
|
||||
if len(v.(*schema.Set).List()) > 0 {
|
||||
for _, portInt := range v.(*schema.Set).List() {
|
||||
if len(v.([]interface{})) > 0 {
|
||||
for _, portInt := range v.([]interface{}) {
|
||||
portConfig := swarm.PortConfig{}
|
||||
rawPort := portInt.(map[string]interface{})
|
||||
if value, ok := rawPort["name"]; ok {
|
||||
|
|
|
|||
|
|
@ -473,11 +473,11 @@ func TestAccDockerService_fullSpec(t *testing.T) {
|
|||
resource.TestCheckResourceAttr("docker_service.foo", "rollback_config.0.max_failure_ratio", "0.9"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "rollback_config.0.order", "stop-first"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.mode", "vip"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.1714132424.name", "random"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.1714132424.protocol", "tcp"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.1714132424.target_port", "8080"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.1714132424.published_port", "8080"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.1714132424.publish_mode", "ingress"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.0.name", "random"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.0.protocol", "tcp"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.0.target_port", "8080"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.0.published_port", "8080"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.0.publish_mode", "ingress"),
|
||||
),
|
||||
},
|
||||
{
|
||||
|
|
@ -884,8 +884,8 @@ func TestAccDockerService_updateMultiplePropertiesConverge(t *testing.T) {
|
|||
resource.TestCheckResourceAttr("docker_service.foo", "update_config.0.max_failure_ratio", "0.5"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "update_config.0.order", "start-first"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.#", "1"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.3541714906.target_port", "8080"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.3541714906.published_port", "8081"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.0.target_port", "8080"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.0.published_port", "8081"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "task_spec.0.container_spec.0.configs.#", "1"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "task_spec.0.container_spec.0.secrets.#", "1"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "task_spec.0.container_spec.0.dir", ""),
|
||||
|
|
@ -930,10 +930,10 @@ func TestAccDockerService_updateMultiplePropertiesConverge(t *testing.T) {
|
|||
resource.TestCheckResourceAttr("docker_service.foo", "update_config.0.max_failure_ratio", "0.5"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "update_config.0.order", "start-first"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.#", "2"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.3541714906.target_port", "8080"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.3541714906.published_port", "8081"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.1884078451.target_port", "8080"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.1884078451.published_port", "8082"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.0.target_port", "8080"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.0.published_port", "8081"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.1.target_port", "8080"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.1.published_port", "8082"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "task_spec.0.container_spec.0.configs.#", "1"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "task_spec.0.container_spec.0.secrets.#", "1"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "task_spec.0.container_spec.0.dir", ""),
|
||||
|
|
@ -978,10 +978,10 @@ func TestAccDockerService_updateMultiplePropertiesConverge(t *testing.T) {
|
|||
resource.TestCheckResourceAttr("docker_service.foo", "update_config.0.max_failure_ratio", "0.5"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "update_config.0.order", "start-first"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.#", "2"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.3541714906.target_port", "8080"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.3541714906.published_port", "8081"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.1884078451.target_port", "8080"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.1884078451.published_port", "8082"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.0.target_port", "8080"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.0.published_port", "8081"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.1.target_port", "8080"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "endpoint_spec.0.ports.1.published_port", "8082"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "task_spec.0.container_spec.0.configs.#", "1"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "task_spec.0.container_spec.0.secrets.#", "1"),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "task_spec.0.container_spec.0.dir", ""),
|
||||
|
|
@ -1012,11 +1012,6 @@ func TestAccDockerService_updateMultiplePropertiesConverge(t *testing.T) {
|
|||
resource.TestCheckResourceAttr("docker_service.foo", "task_spec.0.log_driver.0.options.max-size", "15m"),
|
||||
),
|
||||
},
|
||||
{
|
||||
ResourceName: "docker_service.foo",
|
||||
ImportState: true,
|
||||
ImportStateVerify: true,
|
||||
},
|
||||
},
|
||||
CheckDestroy: checkAndRemoveImages,
|
||||
})
|
||||
|
|
@ -1146,6 +1141,8 @@ func TestAccDockerService_convergeAndStopGracefully(t *testing.T) {
|
|||
resource.TestCheckResourceAttr("docker_service.foo", "name", "tftest-service-basic-converge"),
|
||||
resource.TestMatchResourceAttr("docker_service.foo", "task_spec.0.container_spec.0.image", regexp.MustCompile(`127.0.0.1:15000/tftest-service:v1.*`)),
|
||||
resource.TestCheckResourceAttr("docker_service.foo", "mode.0.replicated.0.replicas", "2"),
|
||||
testValueHigherEqualThan("docker_service.foo", "endpoint_spec.0.ports.0.target_port", 8080),
|
||||
testValueHigherEqualThan("docker_service.foo", "endpoint_spec.0.ports.0.published_port", 30000),
|
||||
),
|
||||
},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -85,10 +85,10 @@ func flattenServiceUpdateOrRollbackConfig(in *swarm.UpdateConfig) []interface{}
|
|||
return out
|
||||
}
|
||||
|
||||
func flattenServiceEndpointSpec(in *swarm.EndpointSpec) []interface{} {
|
||||
func flattenServiceEndpointSpec(in swarm.Endpoint) []interface{} {
|
||||
var out = make([]interface{}, 0, 0)
|
||||
m := make(map[string]interface{})
|
||||
m["mode"] = string(in.Mode)
|
||||
m["mode"] = string(in.Spec.Mode)
|
||||
m["ports"] = flattenServicePorts(in.Ports)
|
||||
|
||||
out = append(out, m)
|
||||
|
|
@ -491,7 +491,7 @@ func flattenTaskLogDriver(in *swarm.Driver) []interface{} {
|
|||
|
||||
///// end TaskSpec
|
||||
///// start EndpointSpec
|
||||
func flattenServicePorts(in []swarm.PortConfig) *schema.Set {
|
||||
func flattenServicePorts(in []swarm.PortConfig) []interface{} {
|
||||
var out = make([]interface{}, len(in), len(in))
|
||||
for i, v := range in {
|
||||
m := make(map[string]interface{})
|
||||
|
|
@ -502,10 +502,7 @@ func flattenServicePorts(in []swarm.PortConfig) *schema.Set {
|
|||
m["publish_mode"] = string(v.PublishMode)
|
||||
out[i] = m
|
||||
}
|
||||
endpointSpecResource := resourceDockerService().Schema["endpoint_spec"].Elem.(*schema.Resource)
|
||||
portsResource := endpointSpecResource.Schema["ports"].Elem.(*schema.Resource)
|
||||
f := schema.HashResource(portsResource)
|
||||
return schema.NewSet(f, out)
|
||||
return out
|
||||
}
|
||||
|
||||
///// end EndpointSpec
|
||||
|
|
|
|||
Loading…
Reference in a new issue