mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-07-01 02:52:58 +00:00
feat(vm, lxc): add new initialization.dns.servers
param to vm and container (#832)
feat(vm): add new dns servers param to vm and container, deprecated server param Signed-off-by: rafsaf <rafal.safin12@gmail.com>
This commit is contained in:
parent
a8b574cfa5
commit
16e571dc19
@ -129,7 +129,8 @@ output "ubuntu_container_public_key" {
|
|||||||
- `initialization` - (Optional) The initialization configuration.
|
- `initialization` - (Optional) The initialization configuration.
|
||||||
- `dns` - (Optional) The DNS configuration.
|
- `dns` - (Optional) The DNS configuration.
|
||||||
- `domain` - (Optional) The DNS search domain.
|
- `domain` - (Optional) The DNS search domain.
|
||||||
- `server` - (Optional) The DNS server.
|
- `server` - (Optional) The DNS server. The `server` attribute is deprecated and will be removed in a future release. Please use the `servers` attribute instead.
|
||||||
|
- `servers` - (Optional) The list of DNS servers.
|
||||||
- `hostname` - (Optional) The hostname.
|
- `hostname` - (Optional) The hostname.
|
||||||
- `ip_config` - (Optional) The IP configuration (one block per network
|
- `ip_config` - (Optional) The IP configuration (one block per network
|
||||||
device).
|
device).
|
||||||
|
@ -331,7 +331,8 @@ output "ubuntu_vm_public_key" {
|
|||||||
otherwise defaults to `ide2`.
|
otherwise defaults to `ide2`.
|
||||||
- `dns` - (Optional) The DNS configuration.
|
- `dns` - (Optional) The DNS configuration.
|
||||||
- `domain` - (Optional) The DNS search domain.
|
- `domain` - (Optional) The DNS search domain.
|
||||||
- `server` - (Optional) The DNS server.
|
- `server` - (Optional) The DNS server. The `server` attribute is deprecated and will be removed in a future release. Please use the `servers` attribute instead.
|
||||||
|
- `servers` - (Optional) The list of DNS servers.
|
||||||
- `ip_config` - (Optional) The IP configuration (one block per network
|
- `ip_config` - (Optional) The IP configuration (one block per network
|
||||||
device).
|
device).
|
||||||
- `ipv4` - (Optional) The IPv4 configuration.
|
- `ipv4` - (Optional) The IPv4 configuration.
|
||||||
|
@ -15,7 +15,7 @@ resource "proxmox_virtual_environment_container" "example_template" {
|
|||||||
|
|
||||||
initialization {
|
initialization {
|
||||||
dns {
|
dns {
|
||||||
server = "1.1.1.1"
|
servers = ["1.1.1.1", "8.8.8.8"]
|
||||||
}
|
}
|
||||||
|
|
||||||
hostname = "terraform-provider-proxmox-example-lxc-template"
|
hostname = "terraform-provider-proxmox-example-lxc-template"
|
||||||
@ -72,7 +72,7 @@ resource "proxmox_virtual_environment_container" "example" {
|
|||||||
mount_point {
|
mount_point {
|
||||||
// bind mount, requires root@pam
|
// bind mount, requires root@pam
|
||||||
volume = "/mnt/bindmounts/shared"
|
volume = "/mnt/bindmounts/shared"
|
||||||
path = "/shared"
|
path = "/shared"
|
||||||
}
|
}
|
||||||
|
|
||||||
node_name = data.proxmox_virtual_environment_nodes.example.names[0]
|
node_name = data.proxmox_virtual_environment_nodes.example.names[0]
|
||||||
|
@ -67,7 +67,7 @@ resource "proxmox_virtual_environment_vm" "example_template" {
|
|||||||
interface = "scsi4"
|
interface = "scsi4"
|
||||||
|
|
||||||
dns {
|
dns {
|
||||||
server = "1.1.1.1"
|
servers = ["1.1.1.1", "8.8.8.8"]
|
||||||
}
|
}
|
||||||
|
|
||||||
ip_config {
|
ip_config {
|
||||||
@ -154,7 +154,7 @@ resource "proxmox_virtual_environment_vm" "example" {
|
|||||||
interface = "scsi4"
|
interface = "scsi4"
|
||||||
|
|
||||||
dns {
|
dns {
|
||||||
server = "8.8.8.8"
|
servers = ["1.1.1.1"]
|
||||||
}
|
}
|
||||||
ip_config {
|
ip_config {
|
||||||
ipv4 {
|
ipv4 {
|
||||||
|
@ -98,6 +98,7 @@ const (
|
|||||||
mkResourceVirtualEnvironmentContainerInitializationDNS = "dns"
|
mkResourceVirtualEnvironmentContainerInitializationDNS = "dns"
|
||||||
mkResourceVirtualEnvironmentContainerInitializationDNSDomain = "domain"
|
mkResourceVirtualEnvironmentContainerInitializationDNSDomain = "domain"
|
||||||
mkResourceVirtualEnvironmentContainerInitializationDNSServer = "server"
|
mkResourceVirtualEnvironmentContainerInitializationDNSServer = "server"
|
||||||
|
mkResourceVirtualEnvironmentContainerInitializationDNSServers = "servers"
|
||||||
mkResourceVirtualEnvironmentContainerInitializationHostname = "hostname"
|
mkResourceVirtualEnvironmentContainerInitializationHostname = "hostname"
|
||||||
mkResourceVirtualEnvironmentContainerInitializationIPConfig = "ip_config"
|
mkResourceVirtualEnvironmentContainerInitializationIPConfig = "ip_config"
|
||||||
mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4 = "ipv4"
|
mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4 = "ipv4"
|
||||||
@ -388,8 +389,17 @@ func Container() *schema.Resource {
|
|||||||
mkResourceVirtualEnvironmentContainerInitializationDNSServer: {
|
mkResourceVirtualEnvironmentContainerInitializationDNSServer: {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Description: "The DNS server",
|
Description: "The DNS server",
|
||||||
|
Deprecated: "The `server` attribute is deprecated and will be removed in a future release. " +
|
||||||
|
"Please use the `servers` attribute instead.",
|
||||||
|
Optional: true,
|
||||||
|
Default: dvResourceVirtualEnvironmentContainerInitializationDNSServer,
|
||||||
|
},
|
||||||
|
mkResourceVirtualEnvironmentContainerInitializationDNSServers: {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Description: "The list of DNS servers",
|
||||||
Optional: true,
|
Optional: true,
|
||||||
Default: dvResourceVirtualEnvironmentContainerInitializationDNSServer,
|
Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.IsIPv4Address},
|
||||||
|
MinItems: 0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -950,10 +960,18 @@ func containerCreateClone(ctx context.Context, d *schema.ResourceData, m interfa
|
|||||||
if len(initializationDNS) > 0 {
|
if len(initializationDNS) > 0 {
|
||||||
initializationDNSBlock := initializationDNS[0].(map[string]interface{})
|
initializationDNSBlock := initializationDNS[0].(map[string]interface{})
|
||||||
initializationDNSDomain := initializationDNSBlock[mkResourceVirtualEnvironmentContainerInitializationDNSDomain].(string)
|
initializationDNSDomain := initializationDNSBlock[mkResourceVirtualEnvironmentContainerInitializationDNSDomain].(string)
|
||||||
initializationDNSServer := initializationDNSBlock[mkResourceVirtualEnvironmentContainerInitializationDNSServer].(string)
|
|
||||||
|
|
||||||
updateBody.DNSDomain = &initializationDNSDomain
|
updateBody.DNSDomain = &initializationDNSDomain
|
||||||
updateBody.DNSServer = &initializationDNSServer
|
|
||||||
|
servers := initializationDNSBlock[mkResourceVirtualEnvironmentContainerInitializationDNSServers].([]interface{})
|
||||||
|
deprecatedServer := initializationDNSBlock[mkResourceVirtualEnvironmentContainerInitializationDNSServer].(string)
|
||||||
|
|
||||||
|
if len(servers) > 0 {
|
||||||
|
nameserver := strings.Join(ConvertToStringSlice(servers), " ")
|
||||||
|
|
||||||
|
updateBody.DNSServer = &nameserver
|
||||||
|
} else {
|
||||||
|
updateBody.DNSServer = &deprecatedServer
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
initializationHostname := initializationBlock[mkResourceVirtualEnvironmentContainerInitializationHostname].(string)
|
initializationHostname := initializationBlock[mkResourceVirtualEnvironmentContainerInitializationHostname].(string)
|
||||||
@ -1265,7 +1283,17 @@ func containerCreateCustom(ctx context.Context, d *schema.ResourceData, m interf
|
|||||||
if len(initializationDNS) > 0 {
|
if len(initializationDNS) > 0 {
|
||||||
initializationDNSBlock := initializationDNS[0].(map[string]interface{})
|
initializationDNSBlock := initializationDNS[0].(map[string]interface{})
|
||||||
initializationDNSDomain = initializationDNSBlock[mkResourceVirtualEnvironmentContainerInitializationDNSDomain].(string)
|
initializationDNSDomain = initializationDNSBlock[mkResourceVirtualEnvironmentContainerInitializationDNSDomain].(string)
|
||||||
initializationDNSServer = initializationDNSBlock[mkResourceVirtualEnvironmentContainerInitializationDNSServer].(string)
|
|
||||||
|
servers := initializationDNSBlock[mkResourceVirtualEnvironmentContainerInitializationDNSServers].([]interface{})
|
||||||
|
deprecatedServer := initializationDNSBlock[mkResourceVirtualEnvironmentContainerInitializationDNSServer].(string)
|
||||||
|
|
||||||
|
if len(servers) > 0 {
|
||||||
|
nameserver := strings.Join(ConvertToStringSlice(servers), " ")
|
||||||
|
|
||||||
|
initializationDNSServer = nameserver
|
||||||
|
} else {
|
||||||
|
initializationDNSServer = deprecatedServer
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
initializationHostname = initializationBlock[mkResourceVirtualEnvironmentContainerInitializationHostname].(string)
|
initializationHostname = initializationBlock[mkResourceVirtualEnvironmentContainerInitializationHostname].(string)
|
||||||
@ -1982,8 +2010,12 @@ func containerRead(ctx context.Context, d *schema.ResourceData, m interface{}) d
|
|||||||
|
|
||||||
if containerConfig.DNSServer != nil {
|
if containerConfig.DNSServer != nil {
|
||||||
initializationDNS[mkResourceVirtualEnvironmentContainerInitializationDNSServer] = *containerConfig.DNSServer
|
initializationDNS[mkResourceVirtualEnvironmentContainerInitializationDNSServer] = *containerConfig.DNSServer
|
||||||
|
|
||||||
|
dnsServer := strings.Split(*containerConfig.DNSServer, " ")
|
||||||
|
initializationDNS[mkResourceVirtualEnvironmentContainerInitializationDNSServers] = dnsServer
|
||||||
} else {
|
} else {
|
||||||
initializationDNS[mkResourceVirtualEnvironmentContainerInitializationDNSServer] = ""
|
initializationDNS[mkResourceVirtualEnvironmentContainerInitializationDNSServer] = ""
|
||||||
|
initializationDNS[mkResourceVirtualEnvironmentContainerInitializationDNSServers] = []string{}
|
||||||
}
|
}
|
||||||
|
|
||||||
initialization[mkResourceVirtualEnvironmentContainerInitializationDNS] = []interface{}{
|
initialization[mkResourceVirtualEnvironmentContainerInitializationDNS] = []interface{}{
|
||||||
@ -2459,7 +2491,15 @@ func containerUpdate(ctx context.Context, d *schema.ResourceData, m interface{})
|
|||||||
if len(initializationDNS) > 0 {
|
if len(initializationDNS) > 0 {
|
||||||
initializationDNSBlock := initializationDNS[0].(map[string]interface{})
|
initializationDNSBlock := initializationDNS[0].(map[string]interface{})
|
||||||
initializationDNSDomain = initializationDNSBlock[mkResourceVirtualEnvironmentContainerInitializationDNSDomain].(string)
|
initializationDNSDomain = initializationDNSBlock[mkResourceVirtualEnvironmentContainerInitializationDNSDomain].(string)
|
||||||
initializationDNSServer = initializationDNSBlock[mkResourceVirtualEnvironmentContainerInitializationDNSServer].(string)
|
|
||||||
|
servers := initializationDNSBlock[mkResourceVirtualEnvironmentContainerInitializationDNSServers].([]interface{})
|
||||||
|
deprecatedServer := initializationDNSBlock[mkResourceVirtualEnvironmentContainerInitializationDNSServer].(string)
|
||||||
|
|
||||||
|
if len(servers) > 0 {
|
||||||
|
initializationDNSServer = strings.Join(ConvertToStringSlice(servers), " ")
|
||||||
|
} else {
|
||||||
|
initializationDNSServer = deprecatedServer
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
initializationHostname = initializationBlock[mkResourceVirtualEnvironmentContainerInitializationHostname].(string)
|
initializationHostname = initializationBlock[mkResourceVirtualEnvironmentContainerInitializationHostname].(string)
|
||||||
|
@ -154,11 +154,13 @@ func TestContainerSchema(t *testing.T) {
|
|||||||
test.AssertOptionalArguments(t, initializationDNSSchema, []string{
|
test.AssertOptionalArguments(t, initializationDNSSchema, []string{
|
||||||
mkResourceVirtualEnvironmentContainerInitializationDNSDomain,
|
mkResourceVirtualEnvironmentContainerInitializationDNSDomain,
|
||||||
mkResourceVirtualEnvironmentContainerInitializationDNSServer,
|
mkResourceVirtualEnvironmentContainerInitializationDNSServer,
|
||||||
|
mkResourceVirtualEnvironmentContainerInitializationDNSServers,
|
||||||
})
|
})
|
||||||
|
|
||||||
test.AssertValueTypes(t, initializationDNSSchema, map[string]schema.ValueType{
|
test.AssertValueTypes(t, initializationDNSSchema, map[string]schema.ValueType{
|
||||||
mkResourceVirtualEnvironmentContainerInitializationDNSDomain: schema.TypeString,
|
mkResourceVirtualEnvironmentContainerInitializationDNSDomain: schema.TypeString,
|
||||||
mkResourceVirtualEnvironmentContainerInitializationDNSServer: schema.TypeString,
|
mkResourceVirtualEnvironmentContainerInitializationDNSServer: schema.TypeString,
|
||||||
|
mkResourceVirtualEnvironmentContainerInitializationDNSServers: schema.TypeList,
|
||||||
})
|
})
|
||||||
|
|
||||||
initializationIPConfigSchema := test.AssertNestedSchemaExistence(
|
initializationIPConfigSchema := test.AssertNestedSchemaExistence(
|
||||||
|
@ -221,6 +221,7 @@ const (
|
|||||||
mkResourceVirtualEnvironmentVMInitializationDNS = "dns"
|
mkResourceVirtualEnvironmentVMInitializationDNS = "dns"
|
||||||
mkResourceVirtualEnvironmentVMInitializationDNSDomain = "domain"
|
mkResourceVirtualEnvironmentVMInitializationDNSDomain = "domain"
|
||||||
mkResourceVirtualEnvironmentVMInitializationDNSServer = "server"
|
mkResourceVirtualEnvironmentVMInitializationDNSServer = "server"
|
||||||
|
mkResourceVirtualEnvironmentVMInitializationDNSServers = "servers"
|
||||||
mkResourceVirtualEnvironmentVMInitializationIPConfig = "ip_config"
|
mkResourceVirtualEnvironmentVMInitializationIPConfig = "ip_config"
|
||||||
mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4 = "ipv4"
|
mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4 = "ipv4"
|
||||||
mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4Address = "address"
|
mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4Address = "address"
|
||||||
@ -887,8 +888,17 @@ func VM() *schema.Resource {
|
|||||||
mkResourceVirtualEnvironmentVMInitializationDNSServer: {
|
mkResourceVirtualEnvironmentVMInitializationDNSServer: {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Description: "The DNS server",
|
Description: "The DNS server",
|
||||||
|
Deprecated: "The `server` attribute is deprecated and will be removed in a future release. " +
|
||||||
|
"Please use the `servers` attribute instead.",
|
||||||
|
Optional: true,
|
||||||
|
Default: dvResourceVirtualEnvironmentVMInitializationDNSServer,
|
||||||
|
},
|
||||||
|
mkResourceVirtualEnvironmentVMInitializationDNSServers: {
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Description: "The list of DNS servers",
|
||||||
Optional: true,
|
Optional: true,
|
||||||
Default: dvResourceVirtualEnvironmentVMInitializationDNSServer,
|
Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.IsIPv4Address},
|
||||||
|
MinItems: 0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -1658,6 +1668,16 @@ func VM() *schema.Resource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ConvertToStringSlice helps convert interface slice to string slice.
|
||||||
|
func ConvertToStringSlice(interfaceSlice []interface{}) []string {
|
||||||
|
resultSlice := []string{}
|
||||||
|
for _, val := range interfaceSlice {
|
||||||
|
resultSlice = append(resultSlice, val.(string))
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultSlice
|
||||||
|
}
|
||||||
|
|
||||||
func vmCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
func vmCreate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
|
||||||
clone := d.Get(mkResourceVirtualEnvironmentVMClone).([]interface{})
|
clone := d.Get(mkResourceVirtualEnvironmentVMClone).([]interface{})
|
||||||
|
|
||||||
@ -3090,10 +3110,15 @@ func vmGetCloudInitConfig(d *schema.ResourceData) *vms.CustomCloudInitConfig {
|
|||||||
initializationConfig.SearchDomain = &domain
|
initializationConfig.SearchDomain = &domain
|
||||||
}
|
}
|
||||||
|
|
||||||
server := initializationDNSBlock[mkResourceVirtualEnvironmentVMInitializationDNSServer].(string)
|
servers := initializationDNSBlock[mkResourceVirtualEnvironmentVMInitializationDNSServers].([]interface{})
|
||||||
|
deprecatedServer := initializationDNSBlock[mkResourceVirtualEnvironmentVMInitializationDNSServer].(string)
|
||||||
|
|
||||||
if server != "" {
|
if len(servers) > 0 {
|
||||||
initializationConfig.Nameserver = &server
|
nameserver := strings.Join(ConvertToStringSlice(servers), " ")
|
||||||
|
|
||||||
|
initializationConfig.Nameserver = &nameserver
|
||||||
|
} else if deprecatedServer != "" {
|
||||||
|
initializationConfig.Nameserver = &deprecatedServer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4458,8 +4483,12 @@ func vmReadCustom(
|
|||||||
|
|
||||||
if vmConfig.CloudInitDNSServer != nil {
|
if vmConfig.CloudInitDNSServer != nil {
|
||||||
initializationDNS[mkResourceVirtualEnvironmentVMInitializationDNSServer] = *vmConfig.CloudInitDNSServer
|
initializationDNS[mkResourceVirtualEnvironmentVMInitializationDNSServer] = *vmConfig.CloudInitDNSServer
|
||||||
|
|
||||||
|
dnsServer := strings.Split(*vmConfig.CloudInitDNSServer, " ")
|
||||||
|
initializationDNS[mkResourceVirtualEnvironmentVMInitializationDNSServers] = dnsServer
|
||||||
} else {
|
} else {
|
||||||
initializationDNS[mkResourceVirtualEnvironmentVMInitializationDNSServer] = ""
|
initializationDNS[mkResourceVirtualEnvironmentVMInitializationDNSServer] = ""
|
||||||
|
initializationDNS[mkResourceVirtualEnvironmentVMInitializationDNSServers] = []string{}
|
||||||
}
|
}
|
||||||
|
|
||||||
initialization[mkResourceVirtualEnvironmentVMInitializationDNS] = []interface{}{
|
initialization[mkResourceVirtualEnvironmentVMInitializationDNS] = []interface{}{
|
||||||
|
@ -300,11 +300,13 @@ func TestVMSchema(t *testing.T) {
|
|||||||
test.AssertOptionalArguments(t, initializationDNSSchema, []string{
|
test.AssertOptionalArguments(t, initializationDNSSchema, []string{
|
||||||
mkResourceVirtualEnvironmentVMInitializationDNSDomain,
|
mkResourceVirtualEnvironmentVMInitializationDNSDomain,
|
||||||
mkResourceVirtualEnvironmentVMInitializationDNSServer,
|
mkResourceVirtualEnvironmentVMInitializationDNSServer,
|
||||||
|
mkResourceVirtualEnvironmentVMInitializationDNSServers,
|
||||||
})
|
})
|
||||||
|
|
||||||
test.AssertValueTypes(t, initializationDNSSchema, map[string]schema.ValueType{
|
test.AssertValueTypes(t, initializationDNSSchema, map[string]schema.ValueType{
|
||||||
mkResourceVirtualEnvironmentVMInitializationDNSDomain: schema.TypeString,
|
mkResourceVirtualEnvironmentVMInitializationDNSDomain: schema.TypeString,
|
||||||
mkResourceVirtualEnvironmentVMInitializationDNSServer: schema.TypeString,
|
mkResourceVirtualEnvironmentVMInitializationDNSServer: schema.TypeString,
|
||||||
|
mkResourceVirtualEnvironmentVMInitializationDNSServers: schema.TypeList,
|
||||||
})
|
})
|
||||||
|
|
||||||
initializationIPConfigSchema := test.AssertNestedSchemaExistence(
|
initializationIPConfigSchema := test.AssertNestedSchemaExistence(
|
||||||
|
Loading…
Reference in New Issue
Block a user