mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-06-30 02:31:10 +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.
|
||||
- `dns` - (Optional) The DNS configuration.
|
||||
- `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.
|
||||
- `ip_config` - (Optional) The IP configuration (one block per network
|
||||
device).
|
||||
|
@ -331,7 +331,8 @@ output "ubuntu_vm_public_key" {
|
||||
otherwise defaults to `ide2`.
|
||||
- `dns` - (Optional) The DNS configuration.
|
||||
- `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
|
||||
device).
|
||||
- `ipv4` - (Optional) The IPv4 configuration.
|
||||
|
@ -15,7 +15,7 @@ resource "proxmox_virtual_environment_container" "example_template" {
|
||||
|
||||
initialization {
|
||||
dns {
|
||||
server = "1.1.1.1"
|
||||
servers = ["1.1.1.1", "8.8.8.8"]
|
||||
}
|
||||
|
||||
hostname = "terraform-provider-proxmox-example-lxc-template"
|
||||
|
@ -67,7 +67,7 @@ resource "proxmox_virtual_environment_vm" "example_template" {
|
||||
interface = "scsi4"
|
||||
|
||||
dns {
|
||||
server = "1.1.1.1"
|
||||
servers = ["1.1.1.1", "8.8.8.8"]
|
||||
}
|
||||
|
||||
ip_config {
|
||||
@ -154,7 +154,7 @@ resource "proxmox_virtual_environment_vm" "example" {
|
||||
interface = "scsi4"
|
||||
|
||||
dns {
|
||||
server = "8.8.8.8"
|
||||
servers = ["1.1.1.1"]
|
||||
}
|
||||
ip_config {
|
||||
ipv4 {
|
||||
|
@ -98,6 +98,7 @@ const (
|
||||
mkResourceVirtualEnvironmentContainerInitializationDNS = "dns"
|
||||
mkResourceVirtualEnvironmentContainerInitializationDNSDomain = "domain"
|
||||
mkResourceVirtualEnvironmentContainerInitializationDNSServer = "server"
|
||||
mkResourceVirtualEnvironmentContainerInitializationDNSServers = "servers"
|
||||
mkResourceVirtualEnvironmentContainerInitializationHostname = "hostname"
|
||||
mkResourceVirtualEnvironmentContainerInitializationIPConfig = "ip_config"
|
||||
mkResourceVirtualEnvironmentContainerInitializationIPConfigIPv4 = "ipv4"
|
||||
@ -388,9 +389,18 @@ func Container() *schema.Resource {
|
||||
mkResourceVirtualEnvironmentContainerInitializationDNSServer: {
|
||||
Type: schema.TypeString,
|
||||
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,
|
||||
Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.IsIPv4Address},
|
||||
MinItems: 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
MaxItems: 1,
|
||||
@ -950,10 +960,18 @@ func containerCreateClone(ctx context.Context, d *schema.ResourceData, m interfa
|
||||
if len(initializationDNS) > 0 {
|
||||
initializationDNSBlock := initializationDNS[0].(map[string]interface{})
|
||||
initializationDNSDomain := initializationDNSBlock[mkResourceVirtualEnvironmentContainerInitializationDNSDomain].(string)
|
||||
initializationDNSServer := initializationDNSBlock[mkResourceVirtualEnvironmentContainerInitializationDNSServer].(string)
|
||||
|
||||
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)
|
||||
@ -1265,7 +1283,17 @@ func containerCreateCustom(ctx context.Context, d *schema.ResourceData, m interf
|
||||
if len(initializationDNS) > 0 {
|
||||
initializationDNSBlock := initializationDNS[0].(map[string]interface{})
|
||||
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)
|
||||
@ -1982,8 +2010,12 @@ func containerRead(ctx context.Context, d *schema.ResourceData, m interface{}) d
|
||||
|
||||
if containerConfig.DNSServer != nil {
|
||||
initializationDNS[mkResourceVirtualEnvironmentContainerInitializationDNSServer] = *containerConfig.DNSServer
|
||||
|
||||
dnsServer := strings.Split(*containerConfig.DNSServer, " ")
|
||||
initializationDNS[mkResourceVirtualEnvironmentContainerInitializationDNSServers] = dnsServer
|
||||
} else {
|
||||
initializationDNS[mkResourceVirtualEnvironmentContainerInitializationDNSServer] = ""
|
||||
initializationDNS[mkResourceVirtualEnvironmentContainerInitializationDNSServers] = []string{}
|
||||
}
|
||||
|
||||
initialization[mkResourceVirtualEnvironmentContainerInitializationDNS] = []interface{}{
|
||||
@ -2459,7 +2491,15 @@ func containerUpdate(ctx context.Context, d *schema.ResourceData, m interface{})
|
||||
if len(initializationDNS) > 0 {
|
||||
initializationDNSBlock := initializationDNS[0].(map[string]interface{})
|
||||
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)
|
||||
|
@ -154,11 +154,13 @@ func TestContainerSchema(t *testing.T) {
|
||||
test.AssertOptionalArguments(t, initializationDNSSchema, []string{
|
||||
mkResourceVirtualEnvironmentContainerInitializationDNSDomain,
|
||||
mkResourceVirtualEnvironmentContainerInitializationDNSServer,
|
||||
mkResourceVirtualEnvironmentContainerInitializationDNSServers,
|
||||
})
|
||||
|
||||
test.AssertValueTypes(t, initializationDNSSchema, map[string]schema.ValueType{
|
||||
mkResourceVirtualEnvironmentContainerInitializationDNSDomain: schema.TypeString,
|
||||
mkResourceVirtualEnvironmentContainerInitializationDNSServer: schema.TypeString,
|
||||
mkResourceVirtualEnvironmentContainerInitializationDNSServers: schema.TypeList,
|
||||
})
|
||||
|
||||
initializationIPConfigSchema := test.AssertNestedSchemaExistence(
|
||||
|
@ -221,6 +221,7 @@ const (
|
||||
mkResourceVirtualEnvironmentVMInitializationDNS = "dns"
|
||||
mkResourceVirtualEnvironmentVMInitializationDNSDomain = "domain"
|
||||
mkResourceVirtualEnvironmentVMInitializationDNSServer = "server"
|
||||
mkResourceVirtualEnvironmentVMInitializationDNSServers = "servers"
|
||||
mkResourceVirtualEnvironmentVMInitializationIPConfig = "ip_config"
|
||||
mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4 = "ipv4"
|
||||
mkResourceVirtualEnvironmentVMInitializationIPConfigIPv4Address = "address"
|
||||
@ -887,9 +888,18 @@ func VM() *schema.Resource {
|
||||
mkResourceVirtualEnvironmentVMInitializationDNSServer: {
|
||||
Type: schema.TypeString,
|
||||
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,
|
||||
Elem: &schema.Schema{Type: schema.TypeString, ValidateFunc: validation.IsIPv4Address},
|
||||
MinItems: 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
MaxItems: 1,
|
||||
@ -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 {
|
||||
clone := d.Get(mkResourceVirtualEnvironmentVMClone).([]interface{})
|
||||
|
||||
@ -3090,10 +3110,15 @@ func vmGetCloudInitConfig(d *schema.ResourceData) *vms.CustomCloudInitConfig {
|
||||
initializationConfig.SearchDomain = &domain
|
||||
}
|
||||
|
||||
server := initializationDNSBlock[mkResourceVirtualEnvironmentVMInitializationDNSServer].(string)
|
||||
servers := initializationDNSBlock[mkResourceVirtualEnvironmentVMInitializationDNSServers].([]interface{})
|
||||
deprecatedServer := initializationDNSBlock[mkResourceVirtualEnvironmentVMInitializationDNSServer].(string)
|
||||
|
||||
if server != "" {
|
||||
initializationConfig.Nameserver = &server
|
||||
if len(servers) > 0 {
|
||||
nameserver := strings.Join(ConvertToStringSlice(servers), " ")
|
||||
|
||||
initializationConfig.Nameserver = &nameserver
|
||||
} else if deprecatedServer != "" {
|
||||
initializationConfig.Nameserver = &deprecatedServer
|
||||
}
|
||||
}
|
||||
|
||||
@ -4458,8 +4483,12 @@ func vmReadCustom(
|
||||
|
||||
if vmConfig.CloudInitDNSServer != nil {
|
||||
initializationDNS[mkResourceVirtualEnvironmentVMInitializationDNSServer] = *vmConfig.CloudInitDNSServer
|
||||
|
||||
dnsServer := strings.Split(*vmConfig.CloudInitDNSServer, " ")
|
||||
initializationDNS[mkResourceVirtualEnvironmentVMInitializationDNSServers] = dnsServer
|
||||
} else {
|
||||
initializationDNS[mkResourceVirtualEnvironmentVMInitializationDNSServer] = ""
|
||||
initializationDNS[mkResourceVirtualEnvironmentVMInitializationDNSServers] = []string{}
|
||||
}
|
||||
|
||||
initialization[mkResourceVirtualEnvironmentVMInitializationDNS] = []interface{}{
|
||||
|
@ -300,11 +300,13 @@ func TestVMSchema(t *testing.T) {
|
||||
test.AssertOptionalArguments(t, initializationDNSSchema, []string{
|
||||
mkResourceVirtualEnvironmentVMInitializationDNSDomain,
|
||||
mkResourceVirtualEnvironmentVMInitializationDNSServer,
|
||||
mkResourceVirtualEnvironmentVMInitializationDNSServers,
|
||||
})
|
||||
|
||||
test.AssertValueTypes(t, initializationDNSSchema, map[string]schema.ValueType{
|
||||
mkResourceVirtualEnvironmentVMInitializationDNSDomain: schema.TypeString,
|
||||
mkResourceVirtualEnvironmentVMInitializationDNSServer: schema.TypeString,
|
||||
mkResourceVirtualEnvironmentVMInitializationDNSServers: schema.TypeList,
|
||||
})
|
||||
|
||||
initializationIPConfigSchema := test.AssertNestedSchemaExistence(
|
||||
|
Loading…
Reference in New Issue
Block a user