Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Upgrade Docker SDK #898

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
292 changes: 292 additions & 0 deletions patches/0006-upgrade-docker-sdk.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,292 @@
diff --git a/internal/provider/resource_docker_container_funcs.go b/internal/provider/resource_docker_container_funcs.go
index 9f902d4..bde327f 100644
--- a/internal/provider/resource_docker_container_funcs.go
+++ b/internal/provider/resource_docker_container_funcs.go
@@ -379,7 +379,7 @@ func resourceDockerContainerCreate(ctx context.Context, d *schema.ResourceData,
hostConfig.StorageOpt = mapTypeMapValsToString(v.(map[string]interface{}))
}

- var retContainer container.ContainerCreateCreatedBody
+ var retContainer container.CreateResponse

// TODO mavogel add platform later which comes from API v1.41. Currently we pass nil
if retContainer, err = client.ContainerCreate(ctx, config, hostConfig, networkingConfig, nil, d.Get("name").(string)); err != nil {
diff --git a/internal/provider/resource_docker_volume.go b/internal/provider/resource_docker_volume.go
index dd010cd..fefa276 100644
--- a/internal/provider/resource_docker_volume.go
+++ b/internal/provider/resource_docker_volume.go
@@ -6,7 +6,6 @@ import (
"log"
"time"

- "github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/volume"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
@@ -80,7 +79,7 @@ func resourceDockerVolume() *schema.Resource {
func resourceDockerVolumeCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
client := meta.(*ProviderConfig).DockerClient

- createOpts := volume.VolumeCreateBody{}
+ createOpts := volume.CreateOptions{}

if v, ok := d.GetOk("name"); ok {
createOpts.Name = v.(string)
@@ -96,7 +95,7 @@ func resourceDockerVolumeCreate(ctx context.Context, d *schema.ResourceData, met
}

var err error
- var retVolume types.Volume
+ var retVolume volume.Volume
retVolume, err = client.VolumeCreate(ctx, createOpts)

if err != nil {
diff --git a/internal/provider/resource_docker_volume_test.go b/internal/provider/resource_docker_volume_test.go
index 7898747..585ca2c 100644
--- a/internal/provider/resource_docker_volume_test.go
+++ b/internal/provider/resource_docker_volume_test.go
@@ -5,13 +5,13 @@ import (
"fmt"
"testing"

- "github.com/docker/docker/api/types"
+ "github.com/docker/docker/api/types/volume"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
)

func TestAccDockerVolume_basic(t *testing.T) {
- var v types.Volume
+ var v volume.Volume

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
@@ -39,7 +39,7 @@ func TestAccDockerVolume_basic(t *testing.T) {
}

func TestAccDockerVolume_full(t *testing.T) {
- var v types.Volume
+ var v volume.Volume

testCheckVolumeInspect := func(*terraform.State) error {
if v.Driver != "local" {
@@ -88,7 +88,7 @@ func TestAccDockerVolume_full(t *testing.T) {
}

func TestAccDockerVolume_labels(t *testing.T) {
- var v types.Volume
+ var v volume.Volume

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
@@ -127,7 +127,7 @@ func TestAccDockerVolume_labels(t *testing.T) {
})
}

-func checkDockerVolumeCreated(n string, volume *types.Volume) resource.TestCheckFunc {
+func checkDockerVolumeCreated(n string, volume *volume.Volume) resource.TestCheckFunc {
return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[n]
if !ok {
diff --git a/internal/provider/provider.go b/internal/provider/provider.go
index 7feca79..29fcba3 100644
--- a/internal/provider/provider.go
+++ b/internal/provider/provider.go
@@ -11,7 +11,7 @@ import (
"strings"

"github.com/docker/cli/cli/config/configfile"
- "github.com/docker/docker/api/types"
+ "github.com/docker/docker/api/types/registry"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -217,17 +217,17 @@ func configure(version string, p *schema.Provider) func(context.Context, *schema
// AuthConfigs represents authentication options to use for the
// PushImage method accommodating the new X-Registry-Config header
type AuthConfigs struct {
- Configs map[string]types.AuthConfig `json:"configs"`
+ Configs map[string]registry.AuthConfig `json:"configs"`
}

// Take the given registry_auth schemas and return a map of registry auth configurations
func providerSetToRegistryAuth(authList *schema.Set) (*AuthConfigs, error) {
authConfigs := AuthConfigs{
- Configs: make(map[string]types.AuthConfig),
+ Configs: make(map[string]registry.AuthConfig),
}

for _, auth := range authList.List() {
- authConfig := types.AuthConfig{}
+ authConfig := registry.AuthConfig{}
address := auth.(map[string]interface{})["address"].(string)
authConfig.ServerAddress = normalizeRegistryAddress(address)
registryHostname := convertToHostname(authConfig.ServerAddress)
diff --git a/internal/provider/resource_docker_registry_image_funcs.go b/internal/provider/resource_docker_registry_image_funcs.go
index 33ba474..509b26a 100644
--- a/internal/provider/resource_docker_registry_image_funcs.go
+++ b/internal/provider/resource_docker_registry_image_funcs.go
@@ -14,6 +14,7 @@ import (

"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
+ "github.com/docker/docker/api/types/registry"
"github.com/docker/docker/client"
"github.com/docker/go-units"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
@@ -143,11 +144,11 @@ func createImageBuildOptions(buildOptions map[string]interface{}) types.ImageBui
return ulimits
}

- readAuthConfigs := func(options []interface{}) map[string]types.AuthConfig {
- authConfigs := make(map[string]types.AuthConfig, len(options))
+ readAuthConfigs := func(options []interface{}) map[string]registry.AuthConfig {
+ authConfigs := make(map[string]registry.AuthConfig, len(options))
for _, v := range options {
authOptions := v.(map[string]interface{})
- auth := types.AuthConfig{
+ auth := registry.AuthConfig{
Username: authOptions["user_name"].(string),
Password: authOptions["password"].(string),
Auth: authOptions["auth"].(string),
@@ -201,7 +202,7 @@ func createImageBuildOptions(buildOptions map[string]interface{}) types.ImageBui
func pushDockerRegistryImage(ctx context.Context, client *client.Client, pushOpts internalPushImageOptions, username string, password string) error {
pushOptions := types.ImagePushOptions{}
if username != "" {
- auth := types.AuthConfig{Username: username, Password: password}
+ auth := registry.AuthConfig{Username: username, Password: password}
authBytes, err := json.Marshal(auth)
if err != nil {
return fmt.Errorf("Error creating push options: %s", err)
@@ -239,11 +240,11 @@ func pushDockerRegistryImage(ctx context.Context, client *client.Client, pushOpt

func getAuthConfigForRegistry(
registryWithoutProtocol string,
- providerConfig *ProviderConfig) (types.AuthConfig, error) {
+ providerConfig *ProviderConfig) (registry.AuthConfig, error) {
if authConfig, ok := providerConfig.AuthConfigs.Configs[registryWithoutProtocol]; ok {
return authConfig, nil
}
- return types.AuthConfig{}, fmt.Errorf("no auth config found for registry %s in auth configs: %#v", registryWithoutProtocol, providerConfig.AuthConfigs.Configs)
+ return registry.AuthConfig{}, fmt.Errorf("no auth config found for registry %s in auth configs: %#v", registryWithoutProtocol, providerConfig.AuthConfigs.Configs)
}

func buildHttpClientForRegistry(registryAddressWithProtocol string, insecureSkipVerify bool) *http.Client {
diff --git a/internal/provider/resource_docker_service_funcs.go b/internal/provider/resource_docker_service_funcs.go
index 333b584..478013a 100644
--- a/internal/provider/resource_docker_service_funcs.go
+++ b/internal/provider/resource_docker_service_funcs.go
@@ -12,6 +12,7 @@ import (
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/filters"
+ "github.com/docker/docker/api/types/registry"
"github.com/docker/docker/api/types/swarm"
"github.com/docker/docker/client"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
@@ -593,25 +594,25 @@ func terminalState(state swarm.TaskState) bool {
}

// authToServiceAuth maps the auth to AuthConfiguration
-func authToServiceAuth(auths []interface{}) types.AuthConfig {
+func authToServiceAuth(auths []interface{}) registry.AuthConfig {
if len(auths) == 0 {
- return types.AuthConfig{}
+ return registry.AuthConfig{}
}
// it's maxItems = 1
auth := auths[0].(map[string]interface{})
if auth["username"] != nil && len(auth["username"].(string)) > 0 && auth["password"] != nil && len(auth["password"].(string)) > 0 {
- return types.AuthConfig{
+ return registry.AuthConfig{
Username: auth["username"].(string),
Password: auth["password"].(string),
ServerAddress: auth["server_address"].(string),
}
}

- return types.AuthConfig{}
+ return registry.AuthConfig{}
}

// fromRegistryAuth extract the desired AuthConfiguration for the given image
-func fromRegistryAuth(image string, authConfigs map[string]types.AuthConfig) types.AuthConfig {
+func fromRegistryAuth(image string, authConfigs map[string]registry.AuthConfig) registry.AuthConfig {
// Remove normalized prefixes to simplify substring
// DevSkim: ignore DS137138
image = strings.Replace(strings.Replace(image, "http://", "", 1), "https://", "", 1)
@@ -625,12 +626,12 @@ func fromRegistryAuth(image string, authConfigs map[string]types.AuthConfig) typ
}
}

- return types.AuthConfig{}
+ return registry.AuthConfig{}
}

// retrieveAndMarshalAuth retrieves and marshals the service registry auth
func retrieveAndMarshalAuth(d *schema.ResourceData, meta interface{}, stageType string) []byte {
- var auth types.AuthConfig
+ var auth registry.AuthConfig
// when a service is updated/set for the first time the auth is set but empty
// this is why we need this additional check
if rawAuth, ok := d.GetOk("auth"); ok && len(rawAuth.([]interface{})) != 0 {
diff --git a/internal/provider/resource_docker_container_funcs.go b/internal/provider/resource_docker_container_funcs.go
index bde327f..61c8e2b 100644
--- a/internal/provider/resource_docker_container_funcs.go
+++ b/internal/provider/resource_docker_container_funcs.go
@@ -236,7 +236,7 @@ func resourceDockerContainerCreate(ctx context.Context, d *schema.ResourceData,
Privileged: d.Get("privileged").(bool),
PublishAllPorts: d.Get("publish_all_ports").(bool),
RestartPolicy: container.RestartPolicy{
- Name: d.Get("restart").(string),
+ Name: container.RestartPolicyMode(d.Get("restart").(string)),
MaximumRetryCount: d.Get("max_retry_count").(int),
},
Runtime: d.Get("runtime").(string),
diff --git a/internal/provider/resource_docker_image_funcs.go b/internal/provider/resource_docker_image_funcs.go
index 5c15e57..15370d8 100644
--- a/internal/provider/resource_docker_image_funcs.go
+++ b/internal/provider/resource_docker_image_funcs.go
@@ -15,6 +15,7 @@ import (

"github.com/docker/cli/cli/command/image/build"
"github.com/docker/docker/api/types"
+ "github.com/docker/docker/api/types/registry"
"github.com/docker/docker/api/types/versions"
"github.com/docker/docker/client"
"github.com/docker/docker/errdefs"
@@ -195,7 +196,7 @@ func fetchLocalImages(ctx context.Context, data *Data, client *client.Client) er
func pullImage(ctx context.Context, data *Data, client *client.Client, authConfig *AuthConfigs, image string, platform string) error {
pullOpts := parseImageOptions(image)

- auth := types.AuthConfig{}
+ auth := registry.AuthConfig{}
if authConfig, ok := authConfig.Configs[pullOpts.Registry]; ok {
auth = authConfig
}
diff --git a/internal/provider/resource_docker_container_funcs.go b/internal/provider/resource_docker_container_funcs.go
index 8c5409a..4a7e2e9 100644
--- a/internal/provider/resource_docker_container_funcs.go
+++ b/internal/provider/resource_docker_container_funcs.go
@@ -835,7 +835,7 @@ func resourceDockerContainerUpdate(ctx context.Context, d *schema.ResourceData,

updateConfig := container.UpdateConfig{
RestartPolicy: container.RestartPolicy{
- Name: d.Get("restart").(string),
+ Name: container.RestartPolicyMode(d.Get("restart").(string)),
MaximumRetryCount: d.Get("max_retry_count").(int),
},
Resources: container.Resources{
diff --git a/internal/provider/config.go b/internal/provider/config.go
index 7393751..5b2cabf 100644
--- a/internal/provider/config.go
+++ b/internal/provider/config.go
@@ -115,7 +115,7 @@ func (c *Config) NewClient() (*client.Client, error) {
return nil, err
}
if helper != nil {
- opts = append(opts, client.WithDialContext(helper.Dialer), client.WithHost(helper.Host))
+ opts = append(opts, client.WithHost(helper.Host), client.WithDialContext(helper.Dialer))
} else if c.Host != "" {
opts = append(opts, client.WithHost(c.Host))
}
Loading
Loading