@@ -18,10 +18,10 @@ import (
1818// flatten API objects to the terraform schema
1919// ////////////
2020// see https://learn.hashicorp.com/tutorials/terraform/provider-create?in=terraform/providers#add-flattening-functions
21- func flattenTaskSpec (in swarm.TaskSpec , d * schema.ResourceData ) []interface {} {
21+ func flattenTaskSpec (in swarm.TaskSpec , d * schema.ResourceData , meta interface {} ) []interface {} {
2222 m := make (map [string ]interface {})
2323 if in .ContainerSpec != nil {
24- m ["container_spec" ] = flattenContainerSpec (in .ContainerSpec )
24+ m ["container_spec" ] = flattenContainerSpec (in .ContainerSpec , meta )
2525 }
2626 if in .Resources != nil {
2727 m ["resources" ] = flattenTaskResources (in .Resources )
@@ -111,7 +111,8 @@ func flattenServiceEndpointSpec(in *swarm.EndpointSpec) []interface{} {
111111}
112112
113113// /// start TaskSpec
114- func flattenContainerSpec (in * swarm.ContainerSpec ) []interface {} {
114+ func flattenContainerSpec (in * swarm.ContainerSpec , meta interface {}) []interface {} {
115+ client := meta .(* ProviderConfig ).DockerClient
115116 out := make ([]interface {}, 0 )
116117 m := make (map [string ]interface {})
117118 if len (in .Image ) > 0 {
@@ -183,8 +184,10 @@ func flattenContainerSpec(in *swarm.ContainerSpec) []interface{} {
183184 if len (in .CapabilityDrop ) > 0 {
184185 m ["cap_drop" ] = in .CapabilityDrop
185186 }
186- if in .Init != nil {
187- m ["init" ] = * in .Init
187+ if client .ClientVersion () >= "1.37" {
188+ if in .Init != nil {
189+ m ["init" ] = * in .Init
190+ }
188191 }
189192 out = append (out , m )
190193 return out
@@ -577,7 +580,7 @@ func flattenServicePorts(in []swarm.PortConfig) []interface{} {
577580// create API object from the terraform resource schema
578581// ////////////
579582// createServiceSpec creates the service spec: https://docs.docker.com/engine/api/v1.32/#operation/ServiceCreate
580- func createServiceSpec (d * schema.ResourceData ) (swarm.ServiceSpec , error ) {
583+ func createServiceSpec (d * schema.ResourceData , meta interface {} ) (swarm.ServiceSpec , error ) {
581584 serviceSpec := swarm.ServiceSpec {
582585 Annotations : swarm.Annotations {
583586 Name : d .Get ("name" ).(string ),
@@ -590,7 +593,7 @@ func createServiceSpec(d *schema.ResourceData) (swarm.ServiceSpec, error) {
590593 }
591594 serviceSpec .Labels = labels
592595
593- taskTemplate , err := createServiceTaskSpec (d )
596+ taskTemplate , err := createServiceTaskSpec (d , meta )
594597 if err != nil {
595598 return serviceSpec , err
596599 }
@@ -633,15 +636,15 @@ func createServiceLabels(d *schema.ResourceData) (map[string]string, error) {
633636
634637// == start taskSpec
635638// createServiceTaskSpec creates the task template for the service
636- func createServiceTaskSpec (d * schema.ResourceData ) (swarm.TaskSpec , error ) {
639+ func createServiceTaskSpec (d * schema.ResourceData , meta interface {} ) (swarm.TaskSpec , error ) {
637640 taskSpec := swarm.TaskSpec {}
638641 if v , ok := d .GetOk ("task_spec" ); ok {
639642 if len (v .([]interface {})) > 0 {
640643 for _ , rawTaskSpec := range v .([]interface {}) {
641644 rawTaskSpec := rawTaskSpec .(map [string ]interface {})
642645
643646 if rawContainerSpec , ok := rawTaskSpec ["container_spec" ]; ok {
644- containerSpec , err := createContainerSpec (rawContainerSpec )
647+ containerSpec , err := createContainerSpec (rawContainerSpec , meta )
645648 if err != nil {
646649 return taskSpec , err
647650 }
@@ -696,7 +699,8 @@ func createServiceTaskSpec(d *schema.ResourceData) (swarm.TaskSpec, error) {
696699}
697700
698701// createContainerSpec creates the container spec
699- func createContainerSpec (v interface {}) (* swarm.ContainerSpec , error ) {
702+ func createContainerSpec (v interface {}, meta interface {}) (* swarm.ContainerSpec , error ) {
703+ client := meta .(* ProviderConfig ).DockerClient
700704 containerSpec := swarm.ContainerSpec {}
701705 if len (v .([]interface {})) > 0 {
702706 for _ , rawContainerSpec := range v .([]interface {}) {
@@ -968,9 +972,11 @@ func createContainerSpec(v interface{}) (*swarm.ContainerSpec, error) {
968972 containerSpec .CapabilityDrop = append (containerSpec .CapabilityDrop , cap .(string ))
969973 }
970974 }
971- if value , ok := rawContainerSpec ["init" ]; ok {
972- v := value .(bool )
973- containerSpec .Init = & v
975+ if client .ClientVersion () >= "1.37" {
976+ if value , ok := rawContainerSpec ["init" ]; ok {
977+ v := value .(bool )
978+ containerSpec .Init = & v
979+ }
974980 }
975981
976982 }
0 commit comments