mirror of
https://github.com/kreuzwerker/terraform-provider-docker.git
synced 2025-12-20 22:59:42 -05:00
chore: introduces golangci-lint (#32)
* refactor: fix code with golangci-lint * ci: configure golangci-lint * Closes #13
This commit is contained in:
parent
f10da47da8
commit
554797dfd9
18 changed files with 123 additions and 75 deletions
17
.github/workflows/golangci-lint.yaml
vendored
Normal file
17
.github/workflows/golangci-lint.yaml
vendored
Normal 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
7
.golangci.yml
Normal 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
|
||||
|
|
@ -38,7 +38,7 @@ func buildHTTPClientFromBytes(caPEMCert, certPEMBlock, keyPEMBlock []byte) (*htt
|
|||
tlsConfig.Certificates = []tls.Certificate{tlsCert}
|
||||
}
|
||||
|
||||
if caPEMCert == nil || len(caPEMCert) == 0 {
|
||||
if len(caPEMCert) == 0 {
|
||||
tlsConfig.InsecureSkipVerify = true
|
||||
} else {
|
||||
caPool := x509.NewCertPool()
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ func dataSourceDockerNetworkRead(d *schema.ResourceData, meta interface{}) error
|
|||
"ip_range": config.IPRange,
|
||||
}
|
||||
}
|
||||
err = d.Set("ipam_config", ipam)
|
||||
d.Set("ipam_config", ipam)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
|
|
@ -559,7 +559,9 @@ func resourceDockerContainerRead(d *schema.ResourceData, meta interface{}) error
|
|||
if finishTime.After(creationTime) {
|
||||
// It exited immediately, so error out so dependent containers
|
||||
// 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)
|
||||
}
|
||||
|
||||
|
|
@ -568,7 +570,9 @@ func resourceDockerContainerRead(d *schema.ResourceData, meta interface{}) error
|
|||
|
||||
// Handle the case of the for loop above running its course
|
||||
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)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ func updateV0ToV1PortsOrder(is *terraform.InstanceState, meta interface{}) error
|
|||
// map the sorted ports to an output structure tf can write
|
||||
outputPorts := make([]interface{}, 0)
|
||||
for _, mappedPort := range portsMapped {
|
||||
outputPort := make(map[string]interface{}, 0)
|
||||
outputPort := make(map[string]interface{})
|
||||
outputPort["internal"] = mappedPort.internal
|
||||
outputPort["external"] = mappedPort.external
|
||||
outputPort["ip"] = mappedPort.ip
|
||||
|
|
|
|||
|
|
@ -667,7 +667,9 @@ func TestAccDockerContainer_upload(t *testing.T) {
|
|||
}
|
||||
|
||||
fbuf := new(bytes.Buffer)
|
||||
fbuf.ReadFrom(tr)
|
||||
if _, err := fbuf.ReadFrom(tr); err != nil {
|
||||
return err
|
||||
}
|
||||
content := fbuf.String()
|
||||
|
||||
if content != "foo" {
|
||||
|
|
@ -729,7 +731,9 @@ func TestAccDockerContainer_uploadSource(t *testing.T) {
|
|||
}
|
||||
|
||||
fbuf := new(bytes.Buffer)
|
||||
fbuf.ReadFrom(tr)
|
||||
if _, err := fbuf.ReadFrom(tr); err != nil {
|
||||
return err
|
||||
}
|
||||
content := fbuf.String()
|
||||
if content != string(testFileContent) {
|
||||
return fmt.Errorf("file content is invalid")
|
||||
|
|
@ -831,7 +835,9 @@ func TestAccDockerContainer_uploadAsBase64(t *testing.T) {
|
|||
}
|
||||
|
||||
fbuf := new(bytes.Buffer)
|
||||
fbuf.ReadFrom(tr)
|
||||
if _, err := fbuf.ReadFrom(tr); err != nil {
|
||||
return err
|
||||
}
|
||||
gotContent := fbuf.String()
|
||||
|
||||
if wantedContent != gotContent {
|
||||
|
|
@ -982,7 +988,9 @@ func TestAccDockerContainer_device(t *testing.T) {
|
|||
}
|
||||
|
||||
fbuf := new(bytes.Buffer)
|
||||
fbuf.ReadFrom(tr)
|
||||
if _, err := fbuf.ReadFrom(tr); err != nil {
|
||||
return err
|
||||
}
|
||||
content := fbuf.Bytes()
|
||||
|
||||
if len(content) != 10 {
|
||||
|
|
|
|||
|
|
@ -39,7 +39,9 @@ func decodeBuildMessages(response types.ImageBuildResponse) (string, error) {
|
|||
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 {
|
||||
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 {
|
||||
log.Printf("[DEBUG] found local image via imageName + latest: %v", imageName)
|
||||
imageName = imageName + ":latest"
|
||||
return apiImage
|
||||
}
|
||||
return nil
|
||||
|
|
@ -218,7 +219,9 @@ func pullImage(data *Data, client *client.Client, authConfig *AuthConfigs, image
|
|||
defer out.Close()
|
||||
|
||||
buf := new(bytes.Buffer)
|
||||
buf.ReadFrom(out)
|
||||
if _, err := buf.ReadFrom(out); err != nil {
|
||||
return err
|
||||
}
|
||||
s := buf.String()
|
||||
log.Printf("[DEBUG] pulled image %v: %v", image, s)
|
||||
|
||||
|
|
|
|||
|
|
@ -206,7 +206,9 @@ func testAccDockerImageDestroy(s *terraform.State) error {
|
|||
func TestAccDockerImage_build(t *testing.T) {
|
||||
wd, _ := os.Getwd()
|
||||
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)
|
||||
resource.Test(t, resource.TestCase{
|
||||
PreCheck: func() { testAccPreCheck(t) },
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
// the initial case when the resource is created
|
||||
if old == "" && new != "" {
|
||||
|
|
|
|||
|
|
@ -206,7 +206,7 @@ func resourceDockerNetworkRemoveRefreshFunc(
|
|||
// TODO mavogel: separate structure file
|
||||
// TODO 2: seems like we can replace the set hash generation with plain lists -> #219
|
||||
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 {
|
||||
log.Printf("[DEBUG] flatten ipam %d: %#v", i, v)
|
||||
m := make(map[string]interface{})
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
if !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 {
|
||||
if network.Labels[name] != value {
|
||||
return fmt.Errorf("Bad value for label '%s': %s", name, network.Labels[name])
|
||||
|
|
|
|||
|
|
@ -178,6 +178,9 @@ func buildDockerRegistryImage(client *client.Client, buildOptions map[string]int
|
|||
}
|
||||
defer os.Remove(dockerContextTarPath)
|
||||
dockerBuildContext, err := os.Open(dockerContextTarPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer dockerBuildContext.Close()
|
||||
|
||||
buildResponse, err := client.ImageBuild(context.Background(), dockerBuildContext, imageBuildOptions)
|
||||
|
|
@ -210,7 +213,7 @@ func buildDockerImageContextTar(buildContext string) (string, error) {
|
|||
tw := tar.NewWriter(tmpFile)
|
||||
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
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -251,7 +254,9 @@ func buildDockerImageContextTar(buildContext string) (string, error) {
|
|||
f.Close()
|
||||
|
||||
return nil
|
||||
})
|
||||
}); err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return tmpFile.Name(), nil
|
||||
}
|
||||
|
|
@ -262,7 +267,9 @@ func getDockerImageContextTarHash(dockerContextTarPath string) (string, error) {
|
|||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
hasher.Write(s)
|
||||
if _, err := hasher.Write(s); err != nil {
|
||||
return "", err
|
||||
}
|
||||
contextHash := hex.EncodeToString(hasher.Sum(nil))
|
||||
return contextHash, nil
|
||||
}
|
||||
|
|
@ -295,7 +302,9 @@ func pushDockerRegistryImage(client *client.Client, pushOpts internalPushImageOp
|
|||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
json.Unmarshal(streamBytes, &errorMessage)
|
||||
if err := json.Unmarshal(streamBytes, &errorMessage); err != nil {
|
||||
return err
|
||||
}
|
||||
if 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)
|
||||
oauthResp, err := client.Do(req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
switch oauthResp.StatusCode {
|
||||
case http.StatusOK, http.StatusAccepted, http.StatusNotFound:
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -1135,7 +1135,8 @@ func createLogDriver(v interface{}) (*swarm.Driver, error) {
|
|||
if rawOptions, ok := rawLogging["options"]; ok {
|
||||
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
|
||||
|
|
@ -1329,7 +1330,7 @@ func fromRegistryAuth(image string, authConfigs map[string]types.AuthConfig) typ
|
|||
|
||||
// retrieveAndMarshalAuth retrieves and marshals the service registry auth
|
||||
func retrieveAndMarshalAuth(d *schema.ResourceData, meta interface{}, stageType string) []byte {
|
||||
auth := types.AuthConfig{}
|
||||
var auth types.AuthConfig
|
||||
if v, ok := d.GetOk("auth"); ok {
|
||||
auth = authToServiceAuth(v.(map[string]interface{}))
|
||||
} else {
|
||||
|
|
@ -1407,8 +1408,6 @@ var (
|
|||
swarm.TaskStateFailed: 12,
|
||||
swarm.TaskStateRejected: 13,
|
||||
}
|
||||
|
||||
longestState int
|
||||
)
|
||||
|
||||
// serviceCreatePendingStates are the pending states for the creation of a service
|
||||
|
|
|
|||
|
|
@ -63,12 +63,10 @@ func TestDockerSecretFromRegistryAuth_multiple(t *testing.T) {
|
|||
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 {
|
||||
t.Fatalf("bad authconfig attribute for '%q'\nExpected: %s\n Got: %s", name, expected, actual)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func TestDockerImageNameSuppress(t *testing.T) {
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
if volume.Labels[name] != value {
|
||||
return fmt.Errorf("Bad value for label '%s': %s", name, volume.Labels[name])
|
||||
|
|
|
|||
|
|
@ -25,9 +25,7 @@ func flattenTaskSpec(in swarm.TaskSpec) []interface{} {
|
|||
if in.Placement != nil {
|
||||
m["placement"] = flattenTaskPlacement(in.Placement)
|
||||
}
|
||||
if in.ForceUpdate >= 0 {
|
||||
m["force_update"] = in.ForceUpdate
|
||||
}
|
||||
m["force_update"] = in.ForceUpdate
|
||||
if len(in.Runtime) > 0 {
|
||||
m["runtime"] = in.Runtime
|
||||
}
|
||||
|
|
@ -56,7 +54,7 @@ func flattenServiceMode(in swarm.ServiceMode) []interface{} {
|
|||
}
|
||||
|
||||
func flattenReplicated(in *swarm.ReplicatedService) []interface{} {
|
||||
out := make([]interface{}, 0, 0)
|
||||
out := make([]interface{}, 0)
|
||||
m := make(map[string]interface{})
|
||||
if in != nil {
|
||||
if in.Replicas != nil {
|
||||
|
|
@ -69,7 +67,7 @@ func flattenReplicated(in *swarm.ReplicatedService) []interface{} {
|
|||
}
|
||||
|
||||
func flattenServiceUpdateOrRollbackConfig(in *swarm.UpdateConfig) []interface{} {
|
||||
out := make([]interface{}, 0, 0)
|
||||
out := make([]interface{}, 0)
|
||||
if in == nil {
|
||||
return out
|
||||
}
|
||||
|
|
@ -86,7 +84,7 @@ func flattenServiceUpdateOrRollbackConfig(in *swarm.UpdateConfig) []interface{}
|
|||
}
|
||||
|
||||
func flattenServiceEndpoint(in swarm.Endpoint) []interface{} {
|
||||
out := make([]interface{}, 0, 0)
|
||||
out := make([]interface{}, 0)
|
||||
m := make(map[string]interface{})
|
||||
m["mode"] = string(in.Spec.Mode)
|
||||
m["ports"] = flattenServicePorts(in.Ports)
|
||||
|
|
@ -96,7 +94,7 @@ func flattenServiceEndpoint(in swarm.Endpoint) []interface{} {
|
|||
}
|
||||
|
||||
func flattenServiceEndpointSpec(in *swarm.EndpointSpec) []interface{} {
|
||||
out := make([]interface{}, 0, 0)
|
||||
out := make([]interface{}, 0)
|
||||
m := make(map[string]interface{})
|
||||
m["mode"] = string(in.Mode)
|
||||
m["ports"] = flattenServicePorts(in.Ports)
|
||||
|
|
@ -107,7 +105,7 @@ func flattenServiceEndpointSpec(in *swarm.EndpointSpec) []interface{} {
|
|||
|
||||
///// start TaskSpec
|
||||
func flattenContainerSpec(in *swarm.ContainerSpec) []interface{} {
|
||||
out := make([]interface{}, 0, 0)
|
||||
out := make([]interface{}, 0)
|
||||
m := make(map[string]interface{})
|
||||
if len(in.Image) > 0 {
|
||||
m["image"] = in.Image
|
||||
|
|
@ -175,14 +173,14 @@ func flattenContainerSpec(in *swarm.ContainerSpec) []interface{} {
|
|||
|
||||
func flattenPrivileges(in *swarm.Privileges) []interface{} {
|
||||
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{})
|
||||
|
||||
if in.CredentialSpec != nil {
|
||||
credSpec := make([]interface{}, 1, 1)
|
||||
credSpec := make([]interface{}, 1)
|
||||
internal := make(map[string]interface{})
|
||||
internal["file"] = in.CredentialSpec.File
|
||||
internal["registry"] = in.CredentialSpec.Registry
|
||||
|
|
@ -190,7 +188,7 @@ func flattenPrivileges(in *swarm.Privileges) []interface{} {
|
|||
m["credential_spec"] = credSpec
|
||||
}
|
||||
if in.SELinuxContext != nil {
|
||||
seLinuxContext := make([]interface{}, 1, 1)
|
||||
seLinuxContext := make([]interface{}, 1)
|
||||
internal := make(map[string]interface{})
|
||||
internal["disable"] = in.SELinuxContext.Disable
|
||||
internal["user"] = in.SELinuxContext.User
|
||||
|
|
@ -205,7 +203,7 @@ func flattenPrivileges(in *swarm.Privileges) []interface{} {
|
|||
}
|
||||
|
||||
func flattenServiceMounts(in []mount.Mount) *schema.Set {
|
||||
out := make([]interface{}, len(in), len(in))
|
||||
out := make([]interface{}, len(in))
|
||||
for i, v := range in {
|
||||
m := make(map[string]interface{})
|
||||
m["target"] = v.Target
|
||||
|
|
@ -213,8 +211,8 @@ func flattenServiceMounts(in []mount.Mount) *schema.Set {
|
|||
m["type"] = string(v.Type)
|
||||
m["read_only"] = v.ReadOnly
|
||||
if v.BindOptions != nil {
|
||||
bindOptions := make([]interface{}, 0, 0)
|
||||
bindOptionsItem := make(map[string]interface{}, 0)
|
||||
bindOptions := make([]interface{}, 0)
|
||||
bindOptionsItem := make(map[string]interface{})
|
||||
|
||||
if len(v.BindOptions.Propagation) > 0 {
|
||||
bindOptionsItem["propagation"] = string(v.BindOptions.Propagation)
|
||||
|
|
@ -225,8 +223,8 @@ func flattenServiceMounts(in []mount.Mount) *schema.Set {
|
|||
}
|
||||
|
||||
if v.VolumeOptions != nil {
|
||||
volumeOptions := make([]interface{}, 0, 0)
|
||||
volumeOptionsItem := make(map[string]interface{}, 0)
|
||||
volumeOptions := make([]interface{}, 0)
|
||||
volumeOptionsItem := make(map[string]interface{})
|
||||
|
||||
volumeOptionsItem["no_copy"] = v.VolumeOptions.NoCopy
|
||||
volumeOptionsItem["labels"] = mapToLabelSet(v.VolumeOptions.Labels)
|
||||
|
|
@ -242,8 +240,8 @@ func flattenServiceMounts(in []mount.Mount) *schema.Set {
|
|||
}
|
||||
|
||||
if v.TmpfsOptions != nil {
|
||||
tmpfsOptions := make([]interface{}, 0, 0)
|
||||
tmpfsOptionsItem := make(map[string]interface{}, 0)
|
||||
tmpfsOptions := make([]interface{}, 0)
|
||||
tmpfsOptionsItem := make(map[string]interface{})
|
||||
|
||||
tmpfsOptionsItem["size_bytes"] = int(v.TmpfsOptions.SizeBytes)
|
||||
tmpfsOptionsItem["mode"] = v.TmpfsOptions.Mode.Perm
|
||||
|
|
@ -263,10 +261,10 @@ func flattenServiceMounts(in []mount.Mount) *schema.Set {
|
|||
|
||||
func flattenServiceHealthcheck(in *container.HealthConfig) []interface{} {
|
||||
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{})
|
||||
if len(in.Test) > 0 {
|
||||
m["test"] = in.Test
|
||||
|
|
@ -280,7 +278,7 @@ func flattenServiceHealthcheck(in *container.HealthConfig) []interface{} {
|
|||
}
|
||||
|
||||
func flattenServiceHosts(in []string) *schema.Set {
|
||||
out := make([]interface{}, len(in), len(in))
|
||||
out := make([]interface{}, len(in))
|
||||
for i, v := range in {
|
||||
m := make(map[string]interface{})
|
||||
split := strings.Split(v, ":")
|
||||
|
|
@ -297,10 +295,10 @@ func flattenServiceHosts(in []string) *schema.Set {
|
|||
|
||||
func flattenServiceDNSConfig(in *swarm.DNSConfig) []interface{} {
|
||||
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{})
|
||||
if len(in.Nameservers) > 0 {
|
||||
m["nameservers"] = in.Nameservers
|
||||
|
|
@ -316,7 +314,7 @@ func flattenServiceDNSConfig(in *swarm.DNSConfig) []interface{} {
|
|||
}
|
||||
|
||||
func flattenServiceSecrets(in []*swarm.SecretReference) *schema.Set {
|
||||
out := make([]interface{}, len(in), len(in))
|
||||
out := make([]interface{}, len(in))
|
||||
for i, v := range in {
|
||||
m := make(map[string]interface{})
|
||||
m["secret_id"] = v.SecretID
|
||||
|
|
@ -343,7 +341,7 @@ func flattenServiceSecrets(in []*swarm.SecretReference) *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 {
|
||||
m := make(map[string]interface{})
|
||||
m["config_id"] = v.ConfigID
|
||||
|
|
@ -370,7 +368,7 @@ func flattenServiceConfigs(in []*swarm.ConfigReference) *schema.Set {
|
|||
}
|
||||
|
||||
func flattenTaskResources(in *swarm.ResourceRequirements) []interface{} {
|
||||
out := make([]interface{}, 0, 0)
|
||||
out := make([]interface{}, 0)
|
||||
if in != nil {
|
||||
m := make(map[string]interface{})
|
||||
m["limits"] = flattenResourceLimitsOrReservations(in.Limits)
|
||||
|
|
@ -381,7 +379,7 @@ func flattenTaskResources(in *swarm.ResourceRequirements) []interface{} {
|
|||
}
|
||||
|
||||
func flattenResourceLimitsOrReservations(in *swarm.Resources) []interface{} {
|
||||
out := make([]interface{}, 0, 0)
|
||||
out := make([]interface{}, 0)
|
||||
if in != nil {
|
||||
m := make(map[string]interface{})
|
||||
m["nano_cpus"] = in.NanoCPUs
|
||||
|
|
@ -393,8 +391,8 @@ func flattenResourceLimitsOrReservations(in *swarm.Resources) []interface{} {
|
|||
}
|
||||
|
||||
func flattenResourceGenericResource(in []swarm.GenericResource) []interface{} {
|
||||
out := make([]interface{}, 0, 0)
|
||||
if in != nil && len(in) > 0 {
|
||||
out := make([]interface{}, 0)
|
||||
if len(in) > 0 {
|
||||
m := make(map[string]interface{})
|
||||
named := 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{} {
|
||||
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{})
|
||||
if len(in.Constraints) > 0 {
|
||||
m["constraints"] = newStringSet(schema.HashString, in.Constraints)
|
||||
|
|
@ -451,11 +449,11 @@ func flattenTaskPlacement(in *swarm.Placement) []interface{} {
|
|||
}
|
||||
|
||||
func flattenPlacementPrefs(in []swarm.PlacementPreference) *schema.Set {
|
||||
if in == nil || len(in) == 0 {
|
||||
return schema.NewSet(schema.HashString, make([]interface{}, 0, 0))
|
||||
if len(in) == 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 {
|
||||
out[i] = v.Spread.SpreadDescriptor
|
||||
}
|
||||
|
|
@ -463,7 +461,7 @@ func flattenPlacementPrefs(in []swarm.PlacementPreference) *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 {
|
||||
m := make(map[string]interface{})
|
||||
m["architecture"] = v.Architecture
|
||||
|
|
@ -477,7 +475,7 @@ func flattenPlacementPlatforms(in []swarm.Platform) *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 {
|
||||
out[i] = v.Target
|
||||
}
|
||||
|
|
@ -486,10 +484,10 @@ func flattenTaskNetworks(in []swarm.NetworkAttachmentConfig) *schema.Set {
|
|||
|
||||
func flattenTaskLogDriver(in *swarm.Driver) []interface{} {
|
||||
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["name"] = in.Name
|
||||
if len(in.Options) > 0 {
|
||||
|
|
@ -502,7 +500,7 @@ func flattenTaskLogDriver(in *swarm.Driver) []interface{} {
|
|||
///// end TaskSpec
|
||||
///// start EndpointSpec
|
||||
func flattenServicePorts(in []swarm.PortConfig) []interface{} {
|
||||
out := make([]interface{}, len(in), len(in))
|
||||
out := make([]interface{}, len(in))
|
||||
for i, v := range in {
|
||||
m := make(map[string]interface{})
|
||||
m["name"] = v.Name
|
||||
|
|
@ -530,7 +528,7 @@ func shortDur(d time.Duration) string {
|
|||
}
|
||||
|
||||
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 {
|
||||
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
|
||||
func mapStringStringToMapStringInterface(in map[string]string) map[string]interface{} {
|
||||
if in == nil || len(in) == 0 {
|
||||
return make(map[string]interface{}, 0)
|
||||
if len(in) == 0 {
|
||||
return make(map[string]interface{})
|
||||
}
|
||||
|
||||
mapped := make(map[string]interface{}, len(in))
|
||||
|
|
|
|||
|
|
@ -49,9 +49,9 @@ func validateFloatRatio() schema.SchemaValidateFunc {
|
|||
|
||||
func validateStringIsFloatRatio() schema.SchemaValidateFunc {
|
||||
return func(v interface{}, k string) (ws []string, errors []error) {
|
||||
switch v.(type) {
|
||||
switch t := v.(type) {
|
||||
case string:
|
||||
stringValue := v.(string)
|
||||
stringValue := t
|
||||
value, err := strconv.ParseFloat(stringValue, 64)
|
||||
if err != nil {
|
||||
errors = append(errors, fmt.Errorf(
|
||||
|
|
@ -62,7 +62,7 @@ func validateStringIsFloatRatio() schema.SchemaValidateFunc {
|
|||
"%q has to be between 0.0 and 1.0", k))
|
||||
}
|
||||
case int:
|
||||
value := float64(v.(int))
|
||||
value := float64(t)
|
||||
if value < 0.0 || value > 1.0 {
|
||||
errors = append(errors, fmt.Errorf(
|
||||
"%q has to be between 0.0 and 1.0", k))
|
||||
|
|
|
|||
Loading…
Reference in a new issue