chore: introduces golangci-lint (#32)

* refactor: fix code with golangci-lint
* ci: configure golangci-lint
* Closes #13
This commit is contained in:
Shunsuke Suzuki 2020-12-20 19:04:51 +09:00 committed by GitHub
parent f10da47da8
commit 554797dfd9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 123 additions and 75 deletions

17
.github/workflows/golangci-lint.yaml vendored Normal file
View file

@ -0,0 +1,17 @@
---
name: golangci-lint
on:
push:
branches:
- master
pull_request:
jobs:
golangci:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: golangci-lint
uses: golangci/golangci-lint-action@v2
with:
version: v1.33

7
.golangci.yml Normal file
View file

@ -0,0 +1,7 @@
linters-settings:
errcheck:
# https://github.com/hashicorp/terraform-provider-aws/blob/9c9a116a857fb838a0e7d1cfbf420c2524f0abe1/.golangci.yml#L37-L39
ignore: github.com/hashicorp/terraform-plugin-sdk/helper/schema:ForceNew|Set,fmt:.*,io:Close
run:
timeout: 10m

View file

@ -38,7 +38,7 @@ func buildHTTPClientFromBytes(caPEMCert, certPEMBlock, keyPEMBlock []byte) (*htt
tlsConfig.Certificates = []tls.Certificate{tlsCert} tlsConfig.Certificates = []tls.Certificate{tlsCert}
} }
if caPEMCert == nil || len(caPEMCert) == 0 { if len(caPEMCert) == 0 {
tlsConfig.InsecureSkipVerify = true tlsConfig.InsecureSkipVerify = true
} else { } else {
caPool := x509.NewCertPool() caPool := x509.NewCertPool()

View file

@ -110,7 +110,7 @@ func dataSourceDockerNetworkRead(d *schema.ResourceData, meta interface{}) error
"ip_range": config.IPRange, "ip_range": config.IPRange,
} }
} }
err = d.Set("ipam_config", ipam) d.Set("ipam_config", ipam)
return nil return nil
} }

View file

@ -559,7 +559,9 @@ func resourceDockerContainerRead(d *schema.ResourceData, meta interface{}) error
if finishTime.After(creationTime) { if finishTime.After(creationTime) {
// It exited immediately, so error out so dependent containers // It exited immediately, so error out so dependent containers
// aren't started // aren't started
resourceDockerContainerDelete(d, meta) if err := resourceDockerContainerDelete(d, meta); err != nil {
log.Printf("[ERROR] Container %s failed to be deleted: %v", apiContainer.ID, err)
}
return fmt.Errorf("Container %s exited after creation, error was: %s", apiContainer.ID, container.State.Error) return fmt.Errorf("Container %s exited after creation, error was: %s", apiContainer.ID, container.State.Error)
} }
@ -568,7 +570,9 @@ func resourceDockerContainerRead(d *schema.ResourceData, meta interface{}) error
// Handle the case of the for loop above running its course // Handle the case of the for loop above running its course
if !container.State.Running && d.Get("must_run").(bool) { if !container.State.Running && d.Get("must_run").(bool) {
resourceDockerContainerDelete(d, meta) if err := resourceDockerContainerDelete(d, meta); err != nil {
log.Printf("[ERROR] Container %s failed to be deleted: %v", apiContainer.ID, err)
}
return fmt.Errorf("Container %s failed to be in running state", apiContainer.ID) return fmt.Errorf("Container %s failed to be in running state", apiContainer.ID)
} }

View file

@ -97,7 +97,7 @@ func updateV0ToV1PortsOrder(is *terraform.InstanceState, meta interface{}) error
// map the sorted ports to an output structure tf can write // map the sorted ports to an output structure tf can write
outputPorts := make([]interface{}, 0) outputPorts := make([]interface{}, 0)
for _, mappedPort := range portsMapped { for _, mappedPort := range portsMapped {
outputPort := make(map[string]interface{}, 0) outputPort := make(map[string]interface{})
outputPort["internal"] = mappedPort.internal outputPort["internal"] = mappedPort.internal
outputPort["external"] = mappedPort.external outputPort["external"] = mappedPort.external
outputPort["ip"] = mappedPort.ip outputPort["ip"] = mappedPort.ip

View file

@ -667,7 +667,9 @@ func TestAccDockerContainer_upload(t *testing.T) {
} }
fbuf := new(bytes.Buffer) fbuf := new(bytes.Buffer)
fbuf.ReadFrom(tr) if _, err := fbuf.ReadFrom(tr); err != nil {
return err
}
content := fbuf.String() content := fbuf.String()
if content != "foo" { if content != "foo" {
@ -729,7 +731,9 @@ func TestAccDockerContainer_uploadSource(t *testing.T) {
} }
fbuf := new(bytes.Buffer) fbuf := new(bytes.Buffer)
fbuf.ReadFrom(tr) if _, err := fbuf.ReadFrom(tr); err != nil {
return err
}
content := fbuf.String() content := fbuf.String()
if content != string(testFileContent) { if content != string(testFileContent) {
return fmt.Errorf("file content is invalid") return fmt.Errorf("file content is invalid")
@ -831,7 +835,9 @@ func TestAccDockerContainer_uploadAsBase64(t *testing.T) {
} }
fbuf := new(bytes.Buffer) fbuf := new(bytes.Buffer)
fbuf.ReadFrom(tr) if _, err := fbuf.ReadFrom(tr); err != nil {
return err
}
gotContent := fbuf.String() gotContent := fbuf.String()
if wantedContent != gotContent { if wantedContent != gotContent {
@ -982,7 +988,9 @@ func TestAccDockerContainer_device(t *testing.T) {
} }
fbuf := new(bytes.Buffer) fbuf := new(bytes.Buffer)
fbuf.ReadFrom(tr) if _, err := fbuf.ReadFrom(tr); err != nil {
return err
}
content := fbuf.Bytes() content := fbuf.Bytes()
if len(content) != 10 { if len(content) != 10 {

View file

@ -39,7 +39,9 @@ func decodeBuildMessages(response types.ImageBuildResponse) (string, error) {
return buf.String(), fmt.Errorf("Problem decoding message from docker daemon: %s", err) return buf.String(), fmt.Errorf("Problem decoding message from docker daemon: %s", err)
} }
m.Display(buf, false) if err := m.Display(buf, false); err != nil {
return "", err
}
if m.Error != nil { if m.Error != nil {
buildErr = fmt.Errorf("Unable to build image") buildErr = fmt.Errorf("Unable to build image")
@ -126,7 +128,6 @@ func searchLocalImages(data Data, imageName string) *types.ImageSummary {
} }
if apiImage, ok := data.DockerImages[imageName+":latest"]; ok { if apiImage, ok := data.DockerImages[imageName+":latest"]; ok {
log.Printf("[DEBUG] found local image via imageName + latest: %v", imageName) log.Printf("[DEBUG] found local image via imageName + latest: %v", imageName)
imageName = imageName + ":latest"
return apiImage return apiImage
} }
return nil return nil
@ -218,7 +219,9 @@ func pullImage(data *Data, client *client.Client, authConfig *AuthConfigs, image
defer out.Close() defer out.Close()
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
buf.ReadFrom(out) if _, err := buf.ReadFrom(out); err != nil {
return err
}
s := buf.String() s := buf.String()
log.Printf("[DEBUG] pulled image %v: %v", image, s) log.Printf("[DEBUG] pulled image %v: %v", image, s)

View file

@ -206,7 +206,9 @@ func testAccDockerImageDestroy(s *terraform.State) error {
func TestAccDockerImage_build(t *testing.T) { func TestAccDockerImage_build(t *testing.T) {
wd, _ := os.Getwd() wd, _ := os.Getwd()
dfPath := path.Join(wd, "Dockerfile") dfPath := path.Join(wd, "Dockerfile")
ioutil.WriteFile(dfPath, []byte(testDockerFileExample), 0o644) if err := ioutil.WriteFile(dfPath, []byte(testDockerFileExample), 0o644); err != nil {
t.Fatalf("failed to create a Dockerfile %s for test: %+v", dfPath, err)
}
defer os.Remove(dfPath) defer os.Remove(dfPath)
resource.Test(t, resource.TestCase{ resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) }, PreCheck: func() { testAccPreCheck(t) },

View file

@ -249,7 +249,7 @@ func resourceDockerNetworkV0() *schema.Resource {
} }
} }
func suppressIfIPAMConfigWithIpv6Changes() schema.SchemaDiffSuppressFunc { func suppressIfIPAMConfigWithIpv6Changes() schema.SchemaDiffSuppressFunc { //nolint:deadcode,unused
return func(k, old, new string, d *schema.ResourceData) bool { return func(k, old, new string, d *schema.ResourceData) bool {
// the initial case when the resource is created // the initial case when the resource is created
if old == "" && new != "" { if old == "" && new != "" {

View file

@ -206,7 +206,7 @@ func resourceDockerNetworkRemoveRefreshFunc(
// TODO mavogel: separate structure file // TODO mavogel: separate structure file
// TODO 2: seems like we can replace the set hash generation with plain lists -> #219 // TODO 2: seems like we can replace the set hash generation with plain lists -> #219
func flattenIpamConfigSpec(in []network.IPAMConfig) *schema.Set { // []interface{} { func flattenIpamConfigSpec(in []network.IPAMConfig) *schema.Set { // []interface{} {
out := make([]interface{}, len(in), len(in)) out := make([]interface{}, len(in))
for i, v := range in { for i, v := range in {
log.Printf("[DEBUG] flatten ipam %d: %#v", i, v) log.Printf("[DEBUG] flatten ipam %d: %#v", i, v)
m := make(map[string]interface{}) m := make(map[string]interface{})

View file

@ -259,7 +259,7 @@ func TestAccDockerNetwork_ipv6(t *testing.T) {
}) })
} }
func testAccNetworkIPv6(network *types.NetworkResource, internal bool) resource.TestCheckFunc { func testAccNetworkIPv6(network *types.NetworkResource, internal bool) resource.TestCheckFunc { //nolint:unused
return func(s *terraform.State) error { return func(s *terraform.State) error {
if !network.EnableIPv6 { if !network.EnableIPv6 {
return fmt.Errorf("Bad value for attribute 'ipv6': %t", network.EnableIPv6) return fmt.Errorf("Bad value for attribute 'ipv6': %t", network.EnableIPv6)
@ -317,7 +317,7 @@ func TestAccDockerNetwork_labels(t *testing.T) {
}) })
} }
func testAccNetworkLabel(network *types.NetworkResource, name string, value string) resource.TestCheckFunc { func testAccNetworkLabel(network *types.NetworkResource, name string, value string) resource.TestCheckFunc { //nolint:deadcode,unused
return func(s *terraform.State) error { return func(s *terraform.State) error {
if network.Labels[name] != value { if network.Labels[name] != value {
return fmt.Errorf("Bad value for label '%s': %s", name, network.Labels[name]) return fmt.Errorf("Bad value for label '%s': %s", name, network.Labels[name])

View file

@ -178,6 +178,9 @@ func buildDockerRegistryImage(client *client.Client, buildOptions map[string]int
} }
defer os.Remove(dockerContextTarPath) defer os.Remove(dockerContextTarPath)
dockerBuildContext, err := os.Open(dockerContextTarPath) dockerBuildContext, err := os.Open(dockerContextTarPath)
if err != nil {
return err
}
defer dockerBuildContext.Close() defer dockerBuildContext.Close()
buildResponse, err := client.ImageBuild(context.Background(), dockerBuildContext, imageBuildOptions) buildResponse, err := client.ImageBuild(context.Background(), dockerBuildContext, imageBuildOptions)
@ -210,7 +213,7 @@ func buildDockerImageContextTar(buildContext string) (string, error) {
tw := tar.NewWriter(tmpFile) tw := tar.NewWriter(tmpFile)
defer tw.Close() defer tw.Close()
err = filepath.Walk(buildContext, func(file string, info os.FileInfo, err error) error { if err := filepath.Walk(buildContext, func(file string, info os.FileInfo, err error) error {
// return on any error // return on any error
if err != nil { if err != nil {
return err return err
@ -251,7 +254,9 @@ func buildDockerImageContextTar(buildContext string) (string, error) {
f.Close() f.Close()
return nil return nil
}) }); err != nil {
return "", err
}
return tmpFile.Name(), nil return tmpFile.Name(), nil
} }
@ -262,7 +267,9 @@ func getDockerImageContextTarHash(dockerContextTarPath string) (string, error) {
if err != nil { if err != nil {
return "", err return "", err
} }
hasher.Write(s) if _, err := hasher.Write(s); err != nil {
return "", err
}
contextHash := hex.EncodeToString(hasher.Sum(nil)) contextHash := hex.EncodeToString(hasher.Sum(nil))
return contextHash, nil return contextHash, nil
} }
@ -295,7 +302,9 @@ func pushDockerRegistryImage(client *client.Client, pushOpts internalPushImageOp
if err == io.EOF { if err == io.EOF {
break break
} }
json.Unmarshal(streamBytes, &errorMessage) if err := json.Unmarshal(streamBytes, &errorMessage); err != nil {
return err
}
if errorMessage.Error != "" { if errorMessage.Error != "" {
return fmt.Errorf("Error pushing image: %s", errorMessage.Error) return fmt.Errorf("Error pushing image: %s", errorMessage.Error)
} }
@ -401,6 +410,9 @@ func deleteDockerRegistryImage(pushOpts internalPushImageOptions, sha256Digest,
req.Header.Set("Authorization", "Bearer "+token.Token) req.Header.Set("Authorization", "Bearer "+token.Token)
oauthResp, err := client.Do(req) oauthResp, err := client.Do(req)
if err != nil {
return err
}
switch oauthResp.StatusCode { switch oauthResp.StatusCode {
case http.StatusOK, http.StatusAccepted, http.StatusNotFound: case http.StatusOK, http.StatusAccepted, http.StatusNotFound:
return nil return nil

View file

@ -1135,7 +1135,8 @@ func createLogDriver(v interface{}) (*swarm.Driver, error) {
if rawOptions, ok := rawLogging["options"]; ok { if rawOptions, ok := rawLogging["options"]; ok {
logDriver.Options = mapTypeMapValsToString(rawOptions.(map[string]interface{})) logDriver.Options = mapTypeMapValsToString(rawOptions.(map[string]interface{}))
} }
return &logDriver, nil // TODO SA4004: the surrounding loop is unconditionally terminated (staticcheck)
return &logDriver, nil //nolint:staticcheck
} }
} }
return nil, nil return nil, nil
@ -1329,7 +1330,7 @@ func fromRegistryAuth(image string, authConfigs map[string]types.AuthConfig) typ
// retrieveAndMarshalAuth retrieves and marshals the service registry auth // retrieveAndMarshalAuth retrieves and marshals the service registry auth
func retrieveAndMarshalAuth(d *schema.ResourceData, meta interface{}, stageType string) []byte { func retrieveAndMarshalAuth(d *schema.ResourceData, meta interface{}, stageType string) []byte {
auth := types.AuthConfig{} var auth types.AuthConfig
if v, ok := d.GetOk("auth"); ok { if v, ok := d.GetOk("auth"); ok {
auth = authToServiceAuth(v.(map[string]interface{})) auth = authToServiceAuth(v.(map[string]interface{}))
} else { } else {
@ -1407,8 +1408,6 @@ var (
swarm.TaskStateFailed: 12, swarm.TaskStateFailed: 12,
swarm.TaskStateRejected: 13, swarm.TaskStateRejected: 13,
} }
longestState int
) )
// serviceCreatePendingStates are the pending states for the creation of a service // serviceCreatePendingStates are the pending states for the creation of a service

View file

@ -63,12 +63,10 @@ func TestDockerSecretFromRegistryAuth_multiple(t *testing.T) {
checkAttribute(t, "ServerAddress", foundAuthConfig.ServerAddress, "") checkAttribute(t, "ServerAddress", foundAuthConfig.ServerAddress, "")
} }
func checkAttribute(t *testing.T, name, actual, expected string) error { func checkAttribute(t *testing.T, name, actual, expected string) {
if actual != expected { if actual != expected {
t.Fatalf("bad authconfig attribute for '%q'\nExpected: %s\n Got: %s", name, expected, actual) t.Fatalf("bad authconfig attribute for '%q'\nExpected: %s\n Got: %s", name, expected, actual)
} }
return nil
} }
func TestDockerImageNameSuppress(t *testing.T) { func TestDockerImageNameSuppress(t *testing.T) {

View file

@ -92,7 +92,7 @@ func TestAccDockerVolume_labels(t *testing.T) {
}) })
} }
func testAccVolumeLabel(volume *types.Volume, name string, value string) resource.TestCheckFunc { func testAccVolumeLabel(volume *types.Volume, name string, value string) resource.TestCheckFunc { //nolint:deadcode,unused
return func(s *terraform.State) error { return func(s *terraform.State) error {
if volume.Labels[name] != value { if volume.Labels[name] != value {
return fmt.Errorf("Bad value for label '%s': %s", name, volume.Labels[name]) return fmt.Errorf("Bad value for label '%s': %s", name, volume.Labels[name])

View file

@ -25,9 +25,7 @@ func flattenTaskSpec(in swarm.TaskSpec) []interface{} {
if in.Placement != nil { if in.Placement != nil {
m["placement"] = flattenTaskPlacement(in.Placement) m["placement"] = flattenTaskPlacement(in.Placement)
} }
if in.ForceUpdate >= 0 { m["force_update"] = in.ForceUpdate
m["force_update"] = in.ForceUpdate
}
if len(in.Runtime) > 0 { if len(in.Runtime) > 0 {
m["runtime"] = in.Runtime m["runtime"] = in.Runtime
} }
@ -56,7 +54,7 @@ func flattenServiceMode(in swarm.ServiceMode) []interface{} {
} }
func flattenReplicated(in *swarm.ReplicatedService) []interface{} { func flattenReplicated(in *swarm.ReplicatedService) []interface{} {
out := make([]interface{}, 0, 0) out := make([]interface{}, 0)
m := make(map[string]interface{}) m := make(map[string]interface{})
if in != nil { if in != nil {
if in.Replicas != nil { if in.Replicas != nil {
@ -69,7 +67,7 @@ func flattenReplicated(in *swarm.ReplicatedService) []interface{} {
} }
func flattenServiceUpdateOrRollbackConfig(in *swarm.UpdateConfig) []interface{} { func flattenServiceUpdateOrRollbackConfig(in *swarm.UpdateConfig) []interface{} {
out := make([]interface{}, 0, 0) out := make([]interface{}, 0)
if in == nil { if in == nil {
return out return out
} }
@ -86,7 +84,7 @@ func flattenServiceUpdateOrRollbackConfig(in *swarm.UpdateConfig) []interface{}
} }
func flattenServiceEndpoint(in swarm.Endpoint) []interface{} { func flattenServiceEndpoint(in swarm.Endpoint) []interface{} {
out := make([]interface{}, 0, 0) out := make([]interface{}, 0)
m := make(map[string]interface{}) m := make(map[string]interface{})
m["mode"] = string(in.Spec.Mode) m["mode"] = string(in.Spec.Mode)
m["ports"] = flattenServicePorts(in.Ports) m["ports"] = flattenServicePorts(in.Ports)
@ -96,7 +94,7 @@ func flattenServiceEndpoint(in swarm.Endpoint) []interface{} {
} }
func flattenServiceEndpointSpec(in *swarm.EndpointSpec) []interface{} { func flattenServiceEndpointSpec(in *swarm.EndpointSpec) []interface{} {
out := make([]interface{}, 0, 0) out := make([]interface{}, 0)
m := make(map[string]interface{}) m := make(map[string]interface{})
m["mode"] = string(in.Mode) m["mode"] = string(in.Mode)
m["ports"] = flattenServicePorts(in.Ports) m["ports"] = flattenServicePorts(in.Ports)
@ -107,7 +105,7 @@ func flattenServiceEndpointSpec(in *swarm.EndpointSpec) []interface{} {
///// start TaskSpec ///// start TaskSpec
func flattenContainerSpec(in *swarm.ContainerSpec) []interface{} { func flattenContainerSpec(in *swarm.ContainerSpec) []interface{} {
out := make([]interface{}, 0, 0) out := make([]interface{}, 0)
m := make(map[string]interface{}) m := make(map[string]interface{})
if len(in.Image) > 0 { if len(in.Image) > 0 {
m["image"] = in.Image m["image"] = in.Image
@ -175,14 +173,14 @@ func flattenContainerSpec(in *swarm.ContainerSpec) []interface{} {
func flattenPrivileges(in *swarm.Privileges) []interface{} { func flattenPrivileges(in *swarm.Privileges) []interface{} {
if in == nil { if in == nil {
return make([]interface{}, 0, 0) return make([]interface{}, 0)
} }
out := make([]interface{}, 1, 1) out := make([]interface{}, 1)
m := make(map[string]interface{}) m := make(map[string]interface{})
if in.CredentialSpec != nil { if in.CredentialSpec != nil {
credSpec := make([]interface{}, 1, 1) credSpec := make([]interface{}, 1)
internal := make(map[string]interface{}) internal := make(map[string]interface{})
internal["file"] = in.CredentialSpec.File internal["file"] = in.CredentialSpec.File
internal["registry"] = in.CredentialSpec.Registry internal["registry"] = in.CredentialSpec.Registry
@ -190,7 +188,7 @@ func flattenPrivileges(in *swarm.Privileges) []interface{} {
m["credential_spec"] = credSpec m["credential_spec"] = credSpec
} }
if in.SELinuxContext != nil { if in.SELinuxContext != nil {
seLinuxContext := make([]interface{}, 1, 1) seLinuxContext := make([]interface{}, 1)
internal := make(map[string]interface{}) internal := make(map[string]interface{})
internal["disable"] = in.SELinuxContext.Disable internal["disable"] = in.SELinuxContext.Disable
internal["user"] = in.SELinuxContext.User internal["user"] = in.SELinuxContext.User
@ -205,7 +203,7 @@ func flattenPrivileges(in *swarm.Privileges) []interface{} {
} }
func flattenServiceMounts(in []mount.Mount) *schema.Set { func flattenServiceMounts(in []mount.Mount) *schema.Set {
out := make([]interface{}, len(in), len(in)) out := make([]interface{}, len(in))
for i, v := range in { for i, v := range in {
m := make(map[string]interface{}) m := make(map[string]interface{})
m["target"] = v.Target m["target"] = v.Target
@ -213,8 +211,8 @@ func flattenServiceMounts(in []mount.Mount) *schema.Set {
m["type"] = string(v.Type) m["type"] = string(v.Type)
m["read_only"] = v.ReadOnly m["read_only"] = v.ReadOnly
if v.BindOptions != nil { if v.BindOptions != nil {
bindOptions := make([]interface{}, 0, 0) bindOptions := make([]interface{}, 0)
bindOptionsItem := make(map[string]interface{}, 0) bindOptionsItem := make(map[string]interface{})
if len(v.BindOptions.Propagation) > 0 { if len(v.BindOptions.Propagation) > 0 {
bindOptionsItem["propagation"] = string(v.BindOptions.Propagation) bindOptionsItem["propagation"] = string(v.BindOptions.Propagation)
@ -225,8 +223,8 @@ func flattenServiceMounts(in []mount.Mount) *schema.Set {
} }
if v.VolumeOptions != nil { if v.VolumeOptions != nil {
volumeOptions := make([]interface{}, 0, 0) volumeOptions := make([]interface{}, 0)
volumeOptionsItem := make(map[string]interface{}, 0) volumeOptionsItem := make(map[string]interface{})
volumeOptionsItem["no_copy"] = v.VolumeOptions.NoCopy volumeOptionsItem["no_copy"] = v.VolumeOptions.NoCopy
volumeOptionsItem["labels"] = mapToLabelSet(v.VolumeOptions.Labels) volumeOptionsItem["labels"] = mapToLabelSet(v.VolumeOptions.Labels)
@ -242,8 +240,8 @@ func flattenServiceMounts(in []mount.Mount) *schema.Set {
} }
if v.TmpfsOptions != nil { if v.TmpfsOptions != nil {
tmpfsOptions := make([]interface{}, 0, 0) tmpfsOptions := make([]interface{}, 0)
tmpfsOptionsItem := make(map[string]interface{}, 0) tmpfsOptionsItem := make(map[string]interface{})
tmpfsOptionsItem["size_bytes"] = int(v.TmpfsOptions.SizeBytes) tmpfsOptionsItem["size_bytes"] = int(v.TmpfsOptions.SizeBytes)
tmpfsOptionsItem["mode"] = v.TmpfsOptions.Mode.Perm tmpfsOptionsItem["mode"] = v.TmpfsOptions.Mode.Perm
@ -263,10 +261,10 @@ func flattenServiceMounts(in []mount.Mount) *schema.Set {
func flattenServiceHealthcheck(in *container.HealthConfig) []interface{} { func flattenServiceHealthcheck(in *container.HealthConfig) []interface{} {
if in == nil { if in == nil {
return make([]interface{}, 0, 0) return make([]interface{}, 0)
} }
out := make([]interface{}, 1, 1) out := make([]interface{}, 1)
m := make(map[string]interface{}) m := make(map[string]interface{})
if len(in.Test) > 0 { if len(in.Test) > 0 {
m["test"] = in.Test m["test"] = in.Test
@ -280,7 +278,7 @@ func flattenServiceHealthcheck(in *container.HealthConfig) []interface{} {
} }
func flattenServiceHosts(in []string) *schema.Set { func flattenServiceHosts(in []string) *schema.Set {
out := make([]interface{}, len(in), len(in)) out := make([]interface{}, len(in))
for i, v := range in { for i, v := range in {
m := make(map[string]interface{}) m := make(map[string]interface{})
split := strings.Split(v, ":") split := strings.Split(v, ":")
@ -297,10 +295,10 @@ func flattenServiceHosts(in []string) *schema.Set {
func flattenServiceDNSConfig(in *swarm.DNSConfig) []interface{} { func flattenServiceDNSConfig(in *swarm.DNSConfig) []interface{} {
if in == nil { if in == nil {
return make([]interface{}, 0, 0) return make([]interface{}, 0)
} }
out := make([]interface{}, 1, 1) out := make([]interface{}, 1)
m := make(map[string]interface{}) m := make(map[string]interface{})
if len(in.Nameservers) > 0 { if len(in.Nameservers) > 0 {
m["nameservers"] = in.Nameservers m["nameservers"] = in.Nameservers
@ -316,7 +314,7 @@ func flattenServiceDNSConfig(in *swarm.DNSConfig) []interface{} {
} }
func flattenServiceSecrets(in []*swarm.SecretReference) *schema.Set { func flattenServiceSecrets(in []*swarm.SecretReference) *schema.Set {
out := make([]interface{}, len(in), len(in)) out := make([]interface{}, len(in))
for i, v := range in { for i, v := range in {
m := make(map[string]interface{}) m := make(map[string]interface{})
m["secret_id"] = v.SecretID m["secret_id"] = v.SecretID
@ -343,7 +341,7 @@ func flattenServiceSecrets(in []*swarm.SecretReference) *schema.Set {
} }
func flattenServiceConfigs(in []*swarm.ConfigReference) *schema.Set { func flattenServiceConfigs(in []*swarm.ConfigReference) *schema.Set {
out := make([]interface{}, len(in), len(in)) out := make([]interface{}, len(in))
for i, v := range in { for i, v := range in {
m := make(map[string]interface{}) m := make(map[string]interface{})
m["config_id"] = v.ConfigID m["config_id"] = v.ConfigID
@ -370,7 +368,7 @@ func flattenServiceConfigs(in []*swarm.ConfigReference) *schema.Set {
} }
func flattenTaskResources(in *swarm.ResourceRequirements) []interface{} { func flattenTaskResources(in *swarm.ResourceRequirements) []interface{} {
out := make([]interface{}, 0, 0) out := make([]interface{}, 0)
if in != nil { if in != nil {
m := make(map[string]interface{}) m := make(map[string]interface{})
m["limits"] = flattenResourceLimitsOrReservations(in.Limits) m["limits"] = flattenResourceLimitsOrReservations(in.Limits)
@ -381,7 +379,7 @@ func flattenTaskResources(in *swarm.ResourceRequirements) []interface{} {
} }
func flattenResourceLimitsOrReservations(in *swarm.Resources) []interface{} { func flattenResourceLimitsOrReservations(in *swarm.Resources) []interface{} {
out := make([]interface{}, 0, 0) out := make([]interface{}, 0)
if in != nil { if in != nil {
m := make(map[string]interface{}) m := make(map[string]interface{})
m["nano_cpus"] = in.NanoCPUs m["nano_cpus"] = in.NanoCPUs
@ -393,8 +391,8 @@ func flattenResourceLimitsOrReservations(in *swarm.Resources) []interface{} {
} }
func flattenResourceGenericResource(in []swarm.GenericResource) []interface{} { func flattenResourceGenericResource(in []swarm.GenericResource) []interface{} {
out := make([]interface{}, 0, 0) out := make([]interface{}, 0)
if in != nil && len(in) > 0 { if len(in) > 0 {
m := make(map[string]interface{}) m := make(map[string]interface{})
named := make([]string, 0) named := make([]string, 0)
discrete := make([]string, 0) discrete := make([]string, 0)
@ -433,9 +431,9 @@ func flattenTaskRestartPolicy(in *swarm.RestartPolicy) map[string]interface{} {
func flattenTaskPlacement(in *swarm.Placement) []interface{} { func flattenTaskPlacement(in *swarm.Placement) []interface{} {
if in == nil { if in == nil {
return make([]interface{}, 0, 0) return make([]interface{}, 0)
} }
out := make([]interface{}, 1, 1) out := make([]interface{}, 1)
m := make(map[string]interface{}) m := make(map[string]interface{})
if len(in.Constraints) > 0 { if len(in.Constraints) > 0 {
m["constraints"] = newStringSet(schema.HashString, in.Constraints) m["constraints"] = newStringSet(schema.HashString, in.Constraints)
@ -451,11 +449,11 @@ func flattenTaskPlacement(in *swarm.Placement) []interface{} {
} }
func flattenPlacementPrefs(in []swarm.PlacementPreference) *schema.Set { func flattenPlacementPrefs(in []swarm.PlacementPreference) *schema.Set {
if in == nil || len(in) == 0 { if len(in) == 0 {
return schema.NewSet(schema.HashString, make([]interface{}, 0, 0)) return schema.NewSet(schema.HashString, make([]interface{}, 0))
} }
out := make([]interface{}, len(in), len(in)) out := make([]interface{}, len(in))
for i, v := range in { for i, v := range in {
out[i] = v.Spread.SpreadDescriptor out[i] = v.Spread.SpreadDescriptor
} }
@ -463,7 +461,7 @@ func flattenPlacementPrefs(in []swarm.PlacementPreference) *schema.Set {
} }
func flattenPlacementPlatforms(in []swarm.Platform) *schema.Set { func flattenPlacementPlatforms(in []swarm.Platform) *schema.Set {
out := make([]interface{}, len(in), len(in)) out := make([]interface{}, len(in))
for i, v := range in { for i, v := range in {
m := make(map[string]interface{}) m := make(map[string]interface{})
m["architecture"] = v.Architecture m["architecture"] = v.Architecture
@ -477,7 +475,7 @@ func flattenPlacementPlatforms(in []swarm.Platform) *schema.Set {
} }
func flattenTaskNetworks(in []swarm.NetworkAttachmentConfig) *schema.Set { func flattenTaskNetworks(in []swarm.NetworkAttachmentConfig) *schema.Set {
out := make([]interface{}, len(in), len(in)) out := make([]interface{}, len(in))
for i, v := range in { for i, v := range in {
out[i] = v.Target out[i] = v.Target
} }
@ -486,10 +484,10 @@ func flattenTaskNetworks(in []swarm.NetworkAttachmentConfig) *schema.Set {
func flattenTaskLogDriver(in *swarm.Driver) []interface{} { func flattenTaskLogDriver(in *swarm.Driver) []interface{} {
if in == nil { if in == nil {
return make([]interface{}, 0, 0) return make([]interface{}, 0)
} }
out := make([]interface{}, 1, 1) out := make([]interface{}, 1)
m := make(map[string]interface{}) m := make(map[string]interface{})
m["name"] = in.Name m["name"] = in.Name
if len(in.Options) > 0 { if len(in.Options) > 0 {
@ -502,7 +500,7 @@ func flattenTaskLogDriver(in *swarm.Driver) []interface{} {
///// end TaskSpec ///// end TaskSpec
///// start EndpointSpec ///// start EndpointSpec
func flattenServicePorts(in []swarm.PortConfig) []interface{} { func flattenServicePorts(in []swarm.PortConfig) []interface{} {
out := make([]interface{}, len(in), len(in)) out := make([]interface{}, len(in))
for i, v := range in { for i, v := range in {
m := make(map[string]interface{}) m := make(map[string]interface{})
m["name"] = v.Name m["name"] = v.Name
@ -530,7 +528,7 @@ func shortDur(d time.Duration) string {
} }
func newStringSet(f schema.SchemaSetFunc, in []string) *schema.Set { func newStringSet(f schema.SchemaSetFunc, in []string) *schema.Set {
out := make([]interface{}, len(in), len(in)) out := make([]interface{}, len(in))
for i, v := range in { for i, v := range in {
out[i] = v out[i] = v
} }
@ -555,8 +553,8 @@ func mapStringSliceToMap(in []string) map[string]string {
// mapStringStringToMapStringInterface maps a string string map to a string interface map // mapStringStringToMapStringInterface maps a string string map to a string interface map
func mapStringStringToMapStringInterface(in map[string]string) map[string]interface{} { func mapStringStringToMapStringInterface(in map[string]string) map[string]interface{} {
if in == nil || len(in) == 0 { if len(in) == 0 {
return make(map[string]interface{}, 0) return make(map[string]interface{})
} }
mapped := make(map[string]interface{}, len(in)) mapped := make(map[string]interface{}, len(in))

View file

@ -49,9 +49,9 @@ func validateFloatRatio() schema.SchemaValidateFunc {
func validateStringIsFloatRatio() schema.SchemaValidateFunc { func validateStringIsFloatRatio() schema.SchemaValidateFunc {
return func(v interface{}, k string) (ws []string, errors []error) { return func(v interface{}, k string) (ws []string, errors []error) {
switch v.(type) { switch t := v.(type) {
case string: case string:
stringValue := v.(string) stringValue := t
value, err := strconv.ParseFloat(stringValue, 64) value, err := strconv.ParseFloat(stringValue, 64)
if err != nil { if err != nil {
errors = append(errors, fmt.Errorf( errors = append(errors, fmt.Errorf(
@ -62,7 +62,7 @@ func validateStringIsFloatRatio() schema.SchemaValidateFunc {
"%q has to be between 0.0 and 1.0", k)) "%q has to be between 0.0 and 1.0", k))
} }
case int: case int:
value := float64(v.(int)) value := float64(t)
if value < 0.0 || value > 1.0 { if value < 0.0 || value > 1.0 {
errors = append(errors, fmt.Errorf( errors = append(errors, fmt.Errorf(
"%q has to be between 0.0 and 1.0", k)) "%q has to be between 0.0 and 1.0", k))