specify dns servers to openstack subnet

This commit is contained in:
Jesse Haka 2019-02-25 22:54:07 +02:00
parent d44c7fed95
commit 71452d0ddd
12 changed files with 64 additions and 11 deletions

View File

@ -151,6 +151,7 @@ type CreateClusterOptions struct {
// OpenstackExternalNet is the name of the external network for the openstack router
OpenstackExternalNet string
OpenstackStorageIgnoreAZ bool
OpenstackDNSServers string
// OpenstackLBOctavia is boolean value should we use octavia or old loadbalancer api
OpenstackLBOctavia bool
@ -383,6 +384,7 @@ func NewCmdCreateCluster(f *util.Factory, out io.Writer) *cobra.Command {
cmd.Flags().StringVar(&options.OpenstackExternalNet, "os-ext-net", options.OpenstackExternalNet, "The name of the external network to use with the openstack router")
cmd.Flags().BoolVar(&options.OpenstackStorageIgnoreAZ, "os-kubelet-ignore-az", options.OpenstackStorageIgnoreAZ, "If true kubernetes may attach volumes across availability zones")
cmd.Flags().BoolVar(&options.OpenstackLBOctavia, "os-octavia", options.OpenstackLBOctavia, "If true octavia loadbalancer api will be used")
cmd.Flags().StringVar(&options.OpenstackDNSServers, "os-dns-servers", options.OpenstackDNSServers, "comma separated list of DNS Servers which is used in network")
}
return cmd
@ -915,6 +917,9 @@ func RunCreateCluster(f *util.Factory, out io.Writer, c *CreateClusterOptions) e
MaxRetries: fi.Int(3),
},
}
if c.OpenstackDNSServers != "" {
cluster.Spec.CloudConfig.Openstack.Router.DNSServers = fi.String(c.OpenstackDNSServers)
}
}
}

View File

@ -63,4 +63,5 @@ kops delete cluster my-cluster.k8s.local --yes
#### Optional flags
* `--os-kubelet-ignore-az=true` Nova and Cinder have different availability zones, more information [Kubernetes docs](https://kubernetes.io/docs/concepts/cluster-administration/cloud-providers/#block-storage)
* `--os-octavia=true` If Octavia Loadbalancer api should be used instead of old lbaas v2 api.
* `--os-dns-servers=8.8.8.8,8.8.4.4` You can define dns servers to be used in your cluster if your openstack setup does not have working dnssetup by default

View File

@ -528,6 +528,7 @@ type OpenstackMonitor struct {
// OpenstackRouter defines the config for a router
type OpenstackRouter struct {
ExternalNetwork *string `json:"externalNetwork,omitempty"`
DNSServers *string `json:"dnsServers,omitempty"`
}
// OpenstackConfiguration defines cloud config elements for the openstack cloud provider

View File

@ -528,6 +528,7 @@ type OpenstackMonitor struct {
// OpenstackRouter defines the config for a router
type OpenstackRouter struct {
ExternalNetwork *string `json:"externalNetwork,omitempty"`
DNSServers *string `json:"dnsServers,omitempty"`
}
// OpenstackConfiguration defines cloud config elements for the openstack cloud provider

View File

@ -4096,6 +4096,7 @@ func Convert_kops_OpenstackMonitor_To_v1alpha1_OpenstackMonitor(in *kops.Opensta
func autoConvert_v1alpha1_OpenstackRouter_To_kops_OpenstackRouter(in *OpenstackRouter, out *kops.OpenstackRouter, s conversion.Scope) error {
out.ExternalNetwork = in.ExternalNetwork
out.DNSServers = in.DNSServers
return nil
}
@ -4106,6 +4107,7 @@ func Convert_v1alpha1_OpenstackRouter_To_kops_OpenstackRouter(in *OpenstackRoute
func autoConvert_kops_OpenstackRouter_To_v1alpha1_OpenstackRouter(in *kops.OpenstackRouter, out *OpenstackRouter, s conversion.Scope) error {
out.ExternalNetwork = in.ExternalNetwork
out.DNSServers = in.DNSServers
return nil
}

View File

@ -2696,6 +2696,11 @@ func (in *OpenstackRouter) DeepCopyInto(out *OpenstackRouter) {
*out = new(string)
**out = **in
}
if in.DNSServers != nil {
in, out := &in.DNSServers, &out.DNSServers
*out = new(string)
**out = **in
}
return
}

View File

@ -528,6 +528,7 @@ type OpenstackMonitor struct {
// OpenstackRouter defines the config for a router
type OpenstackRouter struct {
ExternalNetwork *string `json:"externalNetwork,omitempty"`
DNSServers *string `json:"dnsServers,omitempty"`
}
// OpenstackConfiguration defines cloud config elements for the openstack cloud provider

View File

@ -4366,6 +4366,7 @@ func Convert_kops_OpenstackMonitor_To_v1alpha2_OpenstackMonitor(in *kops.Opensta
func autoConvert_v1alpha2_OpenstackRouter_To_kops_OpenstackRouter(in *OpenstackRouter, out *kops.OpenstackRouter, s conversion.Scope) error {
out.ExternalNetwork = in.ExternalNetwork
out.DNSServers = in.DNSServers
return nil
}
@ -4376,6 +4377,7 @@ func Convert_v1alpha2_OpenstackRouter_To_kops_OpenstackRouter(in *OpenstackRoute
func autoConvert_kops_OpenstackRouter_To_v1alpha2_OpenstackRouter(in *kops.OpenstackRouter, out *OpenstackRouter, s conversion.Scope) error {
out.ExternalNetwork = in.ExternalNetwork
out.DNSServers = in.DNSServers
return nil
}

View File

@ -2767,6 +2767,11 @@ func (in *OpenstackRouter) DeepCopyInto(out *OpenstackRouter) {
*out = new(string)
**out = **in
}
if in.DNSServers != nil {
in, out := &in.DNSServers, &out.DNSServers
*out = new(string)
**out = **in
}
return
}

View File

@ -2981,6 +2981,11 @@ func (in *OpenstackRouter) DeepCopyInto(out *OpenstackRouter) {
*out = new(string)
**out = **in
}
if in.DNSServers != nil {
in, out := &in.DNSServers, &out.DNSServers
*out = new(string)
**out = **in
}
return
}

View File

@ -62,6 +62,14 @@ func (b *NetworkModelBuilder) Build(c *fi.ModelBuilderContext) error {
CIDR: s(sp.CIDR),
Lifecycle: b.Lifecycle,
}
if b.Cluster.Spec.CloudConfig.Openstack.Router.DNSServers != nil {
dnsSplitted := strings.Split(fi.StringValue(b.Cluster.Spec.CloudConfig.Openstack.Router.DNSServers), ",")
dnsNameSrv := make([]*string, len(dnsSplitted))
for i, ns := range dnsSplitted {
dnsNameSrv[i] = fi.String(ns)
}
t.DNSServers = dnsNameSrv
}
c.AddTask(t)
t1 := &openstacktasks.RouterInterface{

View File

@ -28,11 +28,12 @@ import (
//go:generate fitask -type=Subnet
type Subnet struct {
ID *string
Name *string
Network *Network
CIDR *string
Lifecycle *fi.Lifecycle
ID *string
Name *string
Network *Network
CIDR *string
DNSServers []*string
Lifecycle *fi.Lifecycle
}
// GetDependencies returns the dependencies of the Port task
@ -53,18 +54,24 @@ func (s *Subnet) CompareWithID() *string {
}
func NewSubnetTaskFromCloud(cloud openstack.OpenstackCloud, lifecycle *fi.Lifecycle, subnet *subnets.Subnet, find *Subnet) (*Subnet, error) {
network, err := cloud.GetNetwork(subnet.NetworkID)
if err != nil {
return nil, fmt.Errorf("NewSubnetTaskFromCloud: Failed to get network with ID %s: %v", subnet.NetworkID, err)
}
networkTask, err := NewNetworkTaskFromCloud(cloud, lifecycle, network)
nameservers := make([]*string, len(subnet.DNSNameservers))
for i, ns := range subnet.DNSNameservers {
nameservers[i] = fi.String(ns)
}
actual := &Subnet{
ID: fi.String(subnet.ID),
Name: fi.String(subnet.Name),
Network: networkTask,
CIDR: fi.String(subnet.CIDR),
Lifecycle: lifecycle,
ID: fi.String(subnet.ID),
Name: fi.String(subnet.Name),
Network: networkTask,
CIDR: fi.String(subnet.CIDR),
Lifecycle: lifecycle,
DNSServers: nameservers,
}
if find != nil {
find.ID = actual.ID
@ -113,6 +120,9 @@ func (_ *Subnet) CheckChanges(a, e, changes *Subnet) error {
if changes.Name != nil {
return fi.CannotChangeField("Name")
}
if e.DNSServers != nil {
return fi.CannotChangeField("DNSServers")
}
if e.Network != nil {
return fi.CannotChangeField("Network")
}
@ -135,6 +145,13 @@ func (_ *Subnet) RenderOpenstack(t *openstack.OpenstackAPITarget, a, e, changes
EnableDHCP: fi.Bool(true),
}
if len(e.DNSServers) > 0 {
dnsNameSrv := make([]string, len(e.DNSServers))
for i, ns := range e.DNSServers {
dnsNameSrv[i] = fi.StringValue(ns)
}
opt.DNSNameservers = dnsNameSrv
}
v, err := t.Cloud.CreateSubnet(opt)
if err != nil {
return fmt.Errorf("Error creating subnet: %v", err)