mirror of
https://github.com/kreuzwerker/terraform-provider-docker.git
synced 2025-12-24 00:29:46 -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}
|
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()
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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) },
|
||||||
|
|
|
||||||
|
|
@ -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 != "" {
|
||||||
|
|
|
||||||
|
|
@ -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{})
|
||||||
|
|
|
||||||
|
|
@ -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])
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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) {
|
||||||
|
|
|
||||||
|
|
@ -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])
|
||||||
|
|
|
||||||
|
|
@ -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))
|
||||||
|
|
|
||||||
|
|
@ -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))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue