This commit is contained in:
Chao Xu 2016-11-19 16:38:44 -08:00
parent b50367cbdc
commit f0ad860d66
5 changed files with 134 additions and 133 deletions

View File

@ -17,8 +17,9 @@ limitations under the License.
package config
import (
"github.com/stretchr/testify/assert"
"testing"
"github.com/stretchr/testify/assert"
)
func TestValidate(t *testing.T) {

View File

@ -18,9 +18,9 @@ package config
import (
"k8s.io/client-go/pkg/util/wait"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/client/cache"
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5"
fed "k8s.io/kubernetes/pkg/dns/federation"
"k8s.io/kubernetes/pkg/fields"
"k8s.io/kubernetes/pkg/runtime"
@ -55,19 +55,19 @@ func NewSync(client clientset.Interface, ns string, name string) Sync {
}
listWatch := &cache.ListWatch{
ListFunc: func(options api.ListOptions) (runtime.Object, error) {
options.FieldSelector = fields.Set{"metadata.name": name}.AsSelector()
ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
options.FieldSelector = fields.Set{"metadata.name": name}.AsSelector().String()
return client.Core().ConfigMaps(ns).List(options)
},
WatchFunc: func(options api.ListOptions) (watch.Interface, error) {
options.FieldSelector = fields.Set{"metadata.name": name}.AsSelector()
WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
options.FieldSelector = fields.Set{"metadata.name": name}.AsSelector().String()
return client.Core().ConfigMaps(ns).Watch(options)
},
}
store, controller := cache.NewInformer(
listWatch,
&api.ConfigMap{},
&v1.ConfigMap{},
time.Duration(0),
cache.ResourceEventHandlerFuncs{
AddFunc: sync.onAdd,
@ -115,8 +115,8 @@ func (sync *kubeSync) Periodic() <-chan *Config {
return sync.channel
}
func (sync *kubeSync) toConfigMap(obj interface{}) *api.ConfigMap {
cm, ok := obj.(*api.ConfigMap)
func (sync *kubeSync) toConfigMap(obj interface{}) *v1.ConfigMap {
cm, ok := obj.(*v1.ConfigMap)
if !ok {
glog.Fatalf("Expected ConfigMap, got %T", obj)
}
@ -154,7 +154,7 @@ func (sync *kubeSync) onUpdate(_, obj interface{}) {
}
}
func (sync *kubeSync) processUpdate(cm *api.ConfigMap) (config *Config, changed bool, err error) {
func (sync *kubeSync) processUpdate(cm *v1.ConfigMap) (config *Config, changed bool, err error) {
glog.V(4).Infof("processUpdate ConfigMap %+v", *cm)
if cm.ObjectMeta.ResourceVersion != sync.latestVersion {
@ -184,7 +184,7 @@ func (sync *kubeSync) processUpdate(cm *api.ConfigMap) (config *Config, changed
return
}
func (sync *kubeSync) updateFederations(cm *api.ConfigMap, config *Config) (err error) {
func (sync *kubeSync) updateFederations(cm *v1.ConfigMap, config *Config) (err error) {
if flagValue, ok := cm.Data["federations"]; ok {
config.Federations = make(map[string]string)
if err = fed.ParseFederationsFlag(flagValue, config.Federations); err != nil {

View File

@ -27,11 +27,11 @@ import (
etcd "github.com/coreos/etcd/client"
"github.com/miekg/dns"
skymsg "github.com/skynetservices/skydns/msg"
kapi "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/endpoints"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/api/v1/endpoints"
kcache "k8s.io/kubernetes/pkg/client/cache"
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5"
"k8s.io/kubernetes/pkg/dns/config"
"k8s.io/kubernetes/pkg/dns/treecache"
"k8s.io/kubernetes/pkg/dns/util"
@ -94,7 +94,7 @@ type KubeDNS struct {
// IP. Access to this is coordinated using cacheLock. We use the
// same lock for cache and this map to ensure that they don't get
// out of sync.
clusterIPServiceMap map[string]*kapi.Service
clusterIPServiceMap map[string]*v1.Service
// cacheLock protecting the cache. caller is responsible for using
// the cacheLock before invoking methods on cache the cache is not
// thread-safe, and the caller can guarantee thread safety by using
@ -127,7 +127,7 @@ func NewKubeDNS(client clientset.Interface, clusterDomain string, configSync con
cacheLock: sync.RWMutex{},
nodesStore: kcache.NewStore(kcache.MetaNamespaceKeyFunc),
reverseRecordMap: make(map[string]*skymsg.Service),
clusterIPServiceMap: make(map[string]*kapi.Service),
clusterIPServiceMap: make(map[string]*v1.Service),
domainPath: util.ReverseArray(strings.Split(strings.TrimRight(clusterDomain, "."), ".")),
configLock: sync.RWMutex{},
@ -165,11 +165,11 @@ func (kd *KubeDNS) waitForKubernetesService() {
const kubernetesSvcName = "kubernetes"
const servicePollInterval = 1 * time.Second
name := fmt.Sprintf("%v/%v", kapi.NamespaceDefault, kubernetesSvcName)
name := fmt.Sprintf("%v/%v", v1.NamespaceDefault, kubernetesSvcName)
glog.V(2).Infof("Waiting for service: %v", name)
for {
svc, err := kd.kubeClient.Core().Services(kapi.NamespaceDefault).Get(kubernetesSvcName)
svc, err := kd.kubeClient.Core().Services(v1.NamespaceDefault).Get(kubernetesSvcName)
if err != nil || svc == nil {
glog.V(3).Infof(
"Ignoring error while waiting for service %v: %v. Sleeping %v before retrying.",
@ -218,14 +218,14 @@ func (kd *KubeDNS) setServicesStore() {
// Returns a cache.ListWatch that gets all changes to services.
kd.servicesStore, kd.serviceController = kcache.NewInformer(
&kcache.ListWatch{
ListFunc: func(options kapi.ListOptions) (runtime.Object, error) {
return kd.kubeClient.Core().Services(kapi.NamespaceAll).List(options)
ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
return kd.kubeClient.Core().Services(v1.NamespaceAll).List(options)
},
WatchFunc: func(options kapi.ListOptions) (watch.Interface, error) {
return kd.kubeClient.Core().Services(kapi.NamespaceAll).Watch(options)
WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
return kd.kubeClient.Core().Services(v1.NamespaceAll).Watch(options)
},
},
&kapi.Service{},
&v1.Service{},
resyncPeriod,
kcache.ResourceEventHandlerFuncs{
AddFunc: kd.newService,
@ -239,14 +239,14 @@ func (kd *KubeDNS) setEndpointsStore() {
// Returns a cache.ListWatch that gets all changes to endpoints.
kd.endpointsStore, kd.endpointsController = kcache.NewInformer(
&kcache.ListWatch{
ListFunc: func(options kapi.ListOptions) (runtime.Object, error) {
return kd.kubeClient.Core().Endpoints(kapi.NamespaceAll).List(options)
ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
return kd.kubeClient.Core().Endpoints(v1.NamespaceAll).List(options)
},
WatchFunc: func(options kapi.ListOptions) (watch.Interface, error) {
return kd.kubeClient.Core().Endpoints(kapi.NamespaceAll).Watch(options)
WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
return kd.kubeClient.Core().Endpoints(v1.NamespaceAll).Watch(options)
},
},
&kapi.Endpoints{},
&v1.Endpoints{},
resyncPeriod,
kcache.ResourceEventHandlerFuncs{
AddFunc: kd.handleEndpointAdd,
@ -260,8 +260,8 @@ func (kd *KubeDNS) setEndpointsStore() {
)
}
func assertIsService(obj interface{}) (*kapi.Service, bool) {
if service, ok := obj.(*kapi.Service); ok {
func assertIsService(obj interface{}) (*v1.Service, bool) {
if service, ok := obj.(*v1.Service); ok {
return service, ok
} else {
glog.Errorf("Type assertion failed! Expected 'Service', got %T", service)
@ -275,12 +275,12 @@ func (kd *KubeDNS) newService(obj interface{}) {
glog.V(4).Infof("Service details: %v", service)
// ExternalName services are a special kind that return CNAME records
if service.Spec.Type == kapi.ServiceTypeExternalName {
if service.Spec.Type == v1.ServiceTypeExternalName {
kd.newExternalNameService(service)
return
}
// if ClusterIP is not set, a DNS entry should not be created
if !kapi.IsServiceIPSet(service) {
if !v1.IsServiceIPSet(service) {
kd.newHeadlessService(service)
return
}
@ -303,7 +303,7 @@ func (kd *KubeDNS) removeService(obj interface{}) {
s.Name, subCachePath, success)
// ExternalName services have no IP
if kapi.IsServiceIPSet(s) {
if v1.IsServiceIPSet(s) {
delete(kd.reverseRecordMap, s.Spec.ClusterIP)
delete(kd.clusterIPServiceMap, s.Spec.ClusterIP)
}
@ -315,8 +315,8 @@ func (kd *KubeDNS) updateService(oldObj, newObj interface{}) {
if old, ok := assertIsService(oldObj); ok {
// Remove old cache path only if changing type to/from ExternalName.
// In all other cases, we'll update records in place.
if (new.Spec.Type == kapi.ServiceTypeExternalName) !=
(old.Spec.Type == kapi.ServiceTypeExternalName) {
if (new.Spec.Type == v1.ServiceTypeExternalName) !=
(old.Spec.Type == v1.ServiceTypeExternalName) {
kd.removeService(oldObj)
}
kd.newService(newObj)
@ -325,24 +325,24 @@ func (kd *KubeDNS) updateService(oldObj, newObj interface{}) {
}
func (kd *KubeDNS) handleEndpointAdd(obj interface{}) {
if e, ok := obj.(*kapi.Endpoints); ok {
if e, ok := obj.(*v1.Endpoints); ok {
kd.addDNSUsingEndpoints(e)
}
}
func (kd *KubeDNS) addDNSUsingEndpoints(e *kapi.Endpoints) error {
func (kd *KubeDNS) addDNSUsingEndpoints(e *v1.Endpoints) error {
svc, err := kd.getServiceFromEndpoints(e)
if err != nil {
return err
}
if svc == nil || kapi.IsServiceIPSet(svc) {
if svc == nil || v1.IsServiceIPSet(svc) {
// No headless service found corresponding to endpoints object.
return nil
}
return kd.generateRecordsForHeadlessService(e, svc)
}
func (kd *KubeDNS) getServiceFromEndpoints(e *kapi.Endpoints) (*kapi.Service, error) {
func (kd *KubeDNS) getServiceFromEndpoints(e *v1.Endpoints) (*v1.Service, error) {
key, err := kcache.MetaNamespaceKeyFunc(e)
if err != nil {
return nil, err
@ -364,12 +364,12 @@ func (kd *KubeDNS) getServiceFromEndpoints(e *kapi.Endpoints) (*kapi.Service, er
// fqdn constructs the fqdn for the given service. subpaths is a list of path
// elements rooted at the given service, ending at a service record.
func (kd *KubeDNS) fqdn(service *kapi.Service, subpaths ...string) string {
func (kd *KubeDNS) fqdn(service *v1.Service, subpaths ...string) string {
domainLabels := append(append(kd.domainPath, serviceSubdomain, service.Namespace, service.Name), subpaths...)
return dns.Fqdn(strings.Join(util.ReverseArray(domainLabels), "."))
}
func (kd *KubeDNS) newPortalService(service *kapi.Service) {
func (kd *KubeDNS) newPortalService(service *v1.Service) {
subCache := treecache.NewTreeCache()
recordValue, recordLabel := util.GetSkyMsg(service.Spec.ClusterIP, 0)
subCache.SetEntry(recordLabel, recordValue, kd.fqdn(service, recordLabel))
@ -397,7 +397,7 @@ func (kd *KubeDNS) newPortalService(service *kapi.Service) {
kd.clusterIPServiceMap[service.Spec.ClusterIP] = service
}
func (kd *KubeDNS) generateRecordsForHeadlessService(e *kapi.Endpoints, svc *kapi.Service) error {
func (kd *KubeDNS) generateRecordsForHeadlessService(e *v1.Endpoints, svc *v1.Service) error {
// TODO: remove this after v1.4 is released and the old annotations are EOL
podHostnames, err := getPodHostnamesFromAnnotation(e.Annotations)
if err != nil {
@ -433,7 +433,7 @@ func (kd *KubeDNS) generateRecordsForHeadlessService(e *kapi.Endpoints, svc *kap
return nil
}
func getHostname(address *kapi.EndpointAddress, podHostnames map[string]endpoints.HostRecord) (string, bool) {
func getHostname(address *v1.EndpointAddress, podHostnames map[string]endpoints.HostRecord) (string, bool) {
if len(address.Hostname) > 0 {
return address.Hostname, true
}
@ -457,7 +457,7 @@ func getPodHostnamesFromAnnotation(annotations map[string]string) (map[string]en
return hostnames, nil
}
func (kd *KubeDNS) generateSRVRecordValue(svc *kapi.Service, portNumber int, labels ...string) *skymsg.Service {
func (kd *KubeDNS) generateSRVRecordValue(svc *v1.Service, portNumber int, labels ...string) *skymsg.Service {
host := strings.Join([]string{svc.Name, svc.Namespace, serviceSubdomain, kd.domain}, ".")
for _, cNameLabel := range labels {
host = cNameLabel + "." + host
@ -467,7 +467,7 @@ func (kd *KubeDNS) generateSRVRecordValue(svc *kapi.Service, portNumber int, lab
}
// Generates skydns records for a headless service.
func (kd *KubeDNS) newHeadlessService(service *kapi.Service) error {
func (kd *KubeDNS) newHeadlessService(service *v1.Service) error {
// Create an A record for every pod in the service.
// This record must be periodically updated.
// Format is as follows:
@ -486,14 +486,14 @@ func (kd *KubeDNS) newHeadlessService(service *kapi.Service) error {
service.Name, service.Namespace)
return nil
}
if e, ok := e.(*kapi.Endpoints); ok {
if e, ok := e.(*v1.Endpoints); ok {
return kd.generateRecordsForHeadlessService(e, service)
}
return nil
}
// Generates skydns records for an ExternalName service.
func (kd *KubeDNS) newExternalNameService(service *kapi.Service) {
func (kd *KubeDNS) newExternalNameService(service *v1.Service) {
// Create a CNAME record for the service's ExternalName.
// TODO: TTL?
recordValue, _ := util.GetSkyMsg(service.Spec.ExternalName, 0)
@ -675,7 +675,7 @@ func (kd *KubeDNS) serviceWithClusterIPHasEndpoints(msg *skymsg.Service) (bool,
if !exists {
return false, nil
}
if e, ok := e.(*kapi.Endpoints); ok {
if e, ok := e.(*v1.Endpoints); ok {
return len(e.Subsets) > 0, nil
}
return false, fmt.Errorf("unexpected: found non-endpoint object in endpoint store: %v", e)
@ -840,12 +840,12 @@ func (kd *KubeDNS) federationRecords(queryPath []string) ([]skymsg.Service, erro
// Also note that zone here means the zone in cloud provider terminology, not
// the DNS zone.
func (kd *KubeDNS) getClusterZoneAndRegion() (string, string, error) {
var node *kapi.Node
var node *v1.Node
objs := kd.nodesStore.List()
if len(objs) > 0 {
var ok bool
if node, ok = objs[0].(*kapi.Node); !ok {
if node, ok = objs[0].(*v1.Node); !ok {
return "", "", fmt.Errorf("expected node object, got: %T", objs[0])
}
} else {
@ -853,7 +853,7 @@ func (kd *KubeDNS) getClusterZoneAndRegion() (string, string, error) {
// wasteful in case of non-federated independent Kubernetes clusters. So carefully
// proceeding here.
// TODO(madhusudancs): Move this to external/v1 API.
nodeList, err := kd.kubeClient.Core().Nodes().List(kapi.ListOptions{})
nodeList, err := kd.kubeClient.Core().Nodes().List(v1.ListOptions{})
if err != nil || len(nodeList.Items) == 0 {
return "", "", fmt.Errorf("failed to retrieve the cluster nodes: %v", err)
}
@ -891,7 +891,7 @@ func (kd *KubeDNS) getClusterZoneAndRegion() (string, string, error) {
return zone, region, nil
}
func getServiceFQDN(domain string, service *kapi.Service) string {
func getServiceFQDN(domain string, service *v1.Service) string {
return strings.Join(
[]string{service.Name, service.Namespace, serviceSubdomain, domain}, ".")
}

View File

@ -32,11 +32,11 @@ import (
skyServer "github.com/skynetservices/skydns/server"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
kapi "k8s.io/kubernetes/pkg/api"
endpointsapi "k8s.io/kubernetes/pkg/api/endpoints"
"k8s.io/kubernetes/pkg/api/unversioned"
"k8s.io/kubernetes/pkg/api/v1"
endpointsapi "k8s.io/kubernetes/pkg/api/v1/endpoints"
"k8s.io/kubernetes/pkg/client/cache"
fake "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/fake"
fake "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5/fake"
"k8s.io/kubernetes/pkg/dns/config"
"k8s.io/kubernetes/pkg/dns/treecache"
"k8s.io/kubernetes/pkg/dns/util"
@ -61,7 +61,7 @@ func newKubeDNS() *KubeDNS {
cache: treecache.NewTreeCache(),
reverseRecordMap: make(map[string]*skymsg.Service),
clusterIPServiceMap: make(map[string]*kapi.Service),
clusterIPServiceMap: make(map[string]*v1.Service),
cacheLock: sync.RWMutex{},
config: config.NewDefaultConfig(),
@ -339,7 +339,7 @@ func TestHeadlessServiceEndpointsUpdate(t *testing.T) {
assertDNSForHeadlessService(t, kd, endpoints)
// remove all endpoints
endpoints.Subsets = []kapi.EndpointSubset{}
endpoints.Subsets = []v1.EndpointSubset{}
kd.handleEndpointAdd(endpoints)
assertNoDNSForHeadlessService(t, kd, service)
@ -419,7 +419,7 @@ func TestFederationHeadlessService(t *testing.T) {
"testservice.default.svc.cluster.local.", t, kd)
// Delete the endpoint.
endpoints.Subsets = []kapi.EndpointSubset{}
endpoints.Subsets = []v1.EndpointSubset{}
kd.handleEndpointAdd(endpoints)
kd.updateService(s, s)
@ -461,7 +461,7 @@ func TestFederationService(t *testing.T) {
"testservice.default.svc.cluster.local.", t, kd)
// Remove the endpoint.
endpoints.Subsets = []kapi.EndpointSubset{}
endpoints.Subsets = []v1.EndpointSubset{}
kd.handleEndpointAdd(endpoints)
kd.updateService(s, s)
@ -590,17 +590,17 @@ func TestConfigSyncInitialMap(t *testing.T) {
checkConfigEqual(t, kd, &config.Config{Federations: map[string]string{"name3": "domain3"}})
}
func newNodes() *kapi.NodeList {
return &kapi.NodeList{
Items: []kapi.Node{
func newNodes() *v1.NodeList {
return &v1.NodeList{
Items: []v1.Node{
// Node without annotation.
{
ObjectMeta: kapi.ObjectMeta{
ObjectMeta: v1.ObjectMeta{
Name: "testnode-0",
},
},
{
ObjectMeta: kapi.ObjectMeta{
ObjectMeta: v1.ObjectMeta{
Name: "testnode-1",
Labels: map[string]string{
// Note: The zone name here is an arbitrary string and doesn't exactly follow the
@ -615,15 +615,15 @@ func newNodes() *kapi.NodeList {
}
}
func newService(namespace, serviceName, clusterIP, portName string, portNumber int32) *kapi.Service {
service := kapi.Service{
ObjectMeta: kapi.ObjectMeta{
func newService(namespace, serviceName, clusterIP, portName string, portNumber int32) *v1.Service {
service := v1.Service{
ObjectMeta: v1.ObjectMeta{
Name: serviceName,
Namespace: namespace,
},
Spec: kapi.ServiceSpec{
Spec: v1.ServiceSpec{
ClusterIP: clusterIP,
Ports: []kapi.ServicePort{
Ports: []v1.ServicePort{
{Port: portNumber, Name: portName, Protocol: "TCP"},
},
},
@ -631,17 +631,17 @@ func newService(namespace, serviceName, clusterIP, portName string, portNumber i
return &service
}
func newExternalNameService() *kapi.Service {
service := kapi.Service{
ObjectMeta: kapi.ObjectMeta{
func newExternalNameService() *v1.Service {
service := v1.Service{
ObjectMeta: v1.ObjectMeta{
Name: testService,
Namespace: testNamespace,
},
Spec: kapi.ServiceSpec{
Spec: v1.ServiceSpec{
ClusterIP: "None",
Type: kapi.ServiceTypeExternalName,
Type: v1.ServiceTypeExternalName,
ExternalName: testExternalName,
Ports: []kapi.ServicePort{
Ports: []v1.ServicePort{
{Port: 0},
},
},
@ -649,15 +649,15 @@ func newExternalNameService() *kapi.Service {
return &service
}
func newHeadlessService() *kapi.Service {
service := kapi.Service{
ObjectMeta: kapi.ObjectMeta{
func newHeadlessService() *v1.Service {
service := v1.Service{
ObjectMeta: v1.ObjectMeta{
Name: testService,
Namespace: testNamespace,
},
Spec: kapi.ServiceSpec{
Spec: v1.ServiceSpec{
ClusterIP: "None",
Ports: []kapi.ServicePort{
Ports: []v1.ServicePort{
{Port: 0},
},
},
@ -665,40 +665,40 @@ func newHeadlessService() *kapi.Service {
return &service
}
func newEndpoints(service *kapi.Service, subsets ...kapi.EndpointSubset) *kapi.Endpoints {
endpoints := kapi.Endpoints{
func newEndpoints(service *v1.Service, subsets ...v1.EndpointSubset) *v1.Endpoints {
endpoints := v1.Endpoints{
ObjectMeta: service.ObjectMeta,
Subsets: []kapi.EndpointSubset{},
Subsets: []v1.EndpointSubset{},
}
endpoints.Subsets = append(endpoints.Subsets, subsets...)
return &endpoints
}
func newSubsetWithOnePort(portName string, port int32, ips ...string) kapi.EndpointSubset {
func newSubsetWithOnePort(portName string, port int32, ips ...string) v1.EndpointSubset {
subset := newSubset()
subset.Ports = append(subset.Ports, kapi.EndpointPort{Port: port, Name: portName, Protocol: "TCP"})
subset.Ports = append(subset.Ports, v1.EndpointPort{Port: port, Name: portName, Protocol: "TCP"})
for _, ip := range ips {
subset.Addresses = append(subset.Addresses, kapi.EndpointAddress{IP: ip})
subset.Addresses = append(subset.Addresses, v1.EndpointAddress{IP: ip})
}
return subset
}
func newSubsetWithTwoPorts(portName1 string, portNumber1 int32, portName2 string, portNumber2 int32, ips ...string) kapi.EndpointSubset {
func newSubsetWithTwoPorts(portName1 string, portNumber1 int32, portName2 string, portNumber2 int32, ips ...string) v1.EndpointSubset {
subset := newSubsetWithOnePort(portName1, portNumber1, ips...)
subset.Ports = append(subset.Ports, kapi.EndpointPort{Port: portNumber2, Name: portName2, Protocol: "TCP"})
subset.Ports = append(subset.Ports, v1.EndpointPort{Port: portNumber2, Name: portName2, Protocol: "TCP"})
return subset
}
func newSubset() kapi.EndpointSubset {
subset := kapi.EndpointSubset{
Addresses: []kapi.EndpointAddress{},
Ports: []kapi.EndpointPort{},
func newSubset() v1.EndpointSubset {
subset := v1.EndpointSubset{
Addresses: []v1.EndpointAddress{},
Ports: []v1.EndpointPort{},
}
return subset
}
func assertSRVForHeadlessService(t *testing.T, kd *KubeDNS, s *kapi.Service, e *kapi.Endpoints) {
func assertSRVForHeadlessService(t *testing.T, kd *KubeDNS, s *v1.Service, e *v1.Endpoints) {
for _, subset := range e.Subsets {
for _, port := range subset.Ports {
records, err := kd.Records(getSRVFQDN(kd, s, port.Name), false)
@ -709,7 +709,7 @@ func assertSRVForHeadlessService(t *testing.T, kd *KubeDNS, s *kapi.Service, e *
}
}
func assertDNSForHeadlessService(t *testing.T, kd *KubeDNS, e *kapi.Endpoints) {
func assertDNSForHeadlessService(t *testing.T, kd *KubeDNS, e *v1.Endpoints) {
records, err := kd.Records(getEndpointsFQDN(kd, e), false)
require.NoError(t, err)
endpoints := map[string]bool{}
@ -725,7 +725,7 @@ func assertDNSForHeadlessService(t *testing.T, kd *KubeDNS, e *kapi.Endpoints) {
}
}
func assertDNSForExternalService(t *testing.T, kd *KubeDNS, s *kapi.Service) {
func assertDNSForExternalService(t *testing.T, kd *KubeDNS, s *v1.Service) {
records, err := kd.Records(getServiceFQDN(kd.domain, s), false)
require.NoError(t, err)
assert.Equal(t, 1, len(records))
@ -738,7 +738,7 @@ func assertRecordPortsMatchPort(t *testing.T, port int32, records []skymsg.Servi
}
}
func assertCNameRecordsMatchEndpointIPs(t *testing.T, kd *KubeDNS, e []kapi.EndpointAddress, records []skymsg.Service) {
func assertCNameRecordsMatchEndpointIPs(t *testing.T, kd *KubeDNS, e []v1.EndpointAddress, records []skymsg.Service) {
endpoints := map[string]bool{}
for _, endpointAddress := range e {
endpoints[endpointAddress.IP] = true
@ -758,32 +758,32 @@ func getIPForCName(t *testing.T, kd *KubeDNS, cname string) string {
return records[0].Host
}
func assertNoDNSForHeadlessService(t *testing.T, kd *KubeDNS, s *kapi.Service) {
func assertNoDNSForHeadlessService(t *testing.T, kd *KubeDNS, s *v1.Service) {
records, err := kd.Records(getServiceFQDN(kd.domain, s), false)
require.Error(t, err)
assert.Equal(t, 0, len(records))
}
func assertNoDNSForExternalService(t *testing.T, kd *KubeDNS, s *kapi.Service) {
func assertNoDNSForExternalService(t *testing.T, kd *KubeDNS, s *v1.Service) {
records, err := kd.Records(getServiceFQDN(kd.domain, s), false)
require.Error(t, err)
assert.Equal(t, 0, len(records))
}
func assertSRVForNamedPort(t *testing.T, kd *KubeDNS, s *kapi.Service, portName string) {
func assertSRVForNamedPort(t *testing.T, kd *KubeDNS, s *v1.Service, portName string) {
records, err := kd.Records(getSRVFQDN(kd, s, portName), false)
require.NoError(t, err)
assert.Equal(t, 1, len(records))
assert.Equal(t, getServiceFQDN(kd.domain, s), records[0].Host)
}
func assertNoSRVForNamedPort(t *testing.T, kd *KubeDNS, s *kapi.Service, portName string) {
func assertNoSRVForNamedPort(t *testing.T, kd *KubeDNS, s *v1.Service, portName string) {
records, err := kd.Records(getSRVFQDN(kd, s, portName), false)
require.Error(t, err)
assert.Equal(t, 0, len(records))
}
func assertNoDNSForClusterIP(t *testing.T, kd *KubeDNS, s *kapi.Service) {
func assertNoDNSForClusterIP(t *testing.T, kd *KubeDNS, s *v1.Service) {
serviceFQDN := getServiceFQDN(kd.domain, s)
queries := getEquivalentQueries(serviceFQDN, s.Namespace)
for _, query := range queries {
@ -793,7 +793,7 @@ func assertNoDNSForClusterIP(t *testing.T, kd *KubeDNS, s *kapi.Service) {
}
}
func assertDNSForClusterIP(t *testing.T, kd *KubeDNS, s *kapi.Service) {
func assertDNSForClusterIP(t *testing.T, kd *KubeDNS, s *v1.Service) {
serviceFQDN := getServiceFQDN(kd.domain, s)
queries := getEquivalentQueries(serviceFQDN, s.Namespace)
for _, query := range queries {
@ -804,7 +804,7 @@ func assertDNSForClusterIP(t *testing.T, kd *KubeDNS, s *kapi.Service) {
}
}
func assertReverseRecord(t *testing.T, kd *KubeDNS, s *kapi.Service) {
func assertReverseRecord(t *testing.T, kd *KubeDNS, s *v1.Service) {
segments := util.ReverseArray(strings.Split(s.Spec.ClusterIP, "."))
reverseLookup := fmt.Sprintf("%s%s", strings.Join(segments, "."), util.ArpaSuffix)
reverseRecord, err := kd.ReverseRecord(reverseLookup)
@ -812,7 +812,7 @@ func assertReverseRecord(t *testing.T, kd *KubeDNS, s *kapi.Service) {
assert.Equal(t, getServiceFQDN(kd.domain, s), reverseRecord.Host)
}
func assertNoReverseRecord(t *testing.T, kd *KubeDNS, s *kapi.Service) {
func assertNoReverseRecord(t *testing.T, kd *KubeDNS, s *v1.Service) {
segments := util.ReverseArray(strings.Split(s.Spec.ClusterIP, "."))
reverseLookup := fmt.Sprintf("%s%s", strings.Join(segments, "."), util.ArpaSuffix)
reverseRecord, err := kd.ReverseRecord(reverseLookup)
@ -830,14 +830,14 @@ func getEquivalentQueries(serviceFQDN, namespace string) []string {
}
}
func getFederationServiceFQDN(kd *KubeDNS, s *kapi.Service, federationName string) string {
func getFederationServiceFQDN(kd *KubeDNS, s *v1.Service, federationName string) string {
return fmt.Sprintf("%s.%s.%s.svc.%s", s.Name, s.Namespace, federationName, kd.domain)
}
func getEndpointsFQDN(kd *KubeDNS, e *kapi.Endpoints) string {
func getEndpointsFQDN(kd *KubeDNS, e *v1.Endpoints) string {
return fmt.Sprintf("%s.%s.svc.%s", e.Name, e.Namespace, kd.domain)
}
func getSRVFQDN(kd *KubeDNS, s *kapi.Service, portName string) string {
func getSRVFQDN(kd *KubeDNS, s *v1.Service, portName string) string {
return fmt.Sprintf("_%s._tcp.%s.%s.svc.%s", portName, s.Name, s.Namespace, kd.domain)
}

View File

@ -21,9 +21,9 @@ import (
"strings"
"time"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/unversioned"
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"k8s.io/kubernetes/pkg/api/v1"
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_5"
fed "k8s.io/kubernetes/pkg/dns/federation"
"k8s.io/kubernetes/pkg/fields"
"k8s.io/kubernetes/pkg/labels"
@ -42,12 +42,12 @@ type dnsConfigMapTest struct {
name string
labels []string
cm *api.ConfigMap
cm *v1.ConfigMap
isValid bool
dnsPod *api.Pod
utilPod *api.Pod
utilService *api.Service
dnsPod *v1.Pod
utilPod *v1.Pod
utilService *v1.Service
}
var _ = framework.KubeDescribe("DNS config map", func() {
@ -69,7 +69,7 @@ var _ = framework.KubeDescribe("DNS config map", func() {
func (t *dnsConfigMapTest) init() {
By("Finding a DNS pod")
label := labels.SelectorFromSet(labels.Set(map[string]string{"k8s-app": "kube-dns"}))
options := api.ListOptions{LabelSelector: label}
options := v1.ListOptions{LabelSelector: label.String()}
pods, err := t.f.ClientSet.Core().Pods("kube-system").List(options)
Expect(err).NotTo(HaveOccurred())
@ -94,19 +94,19 @@ func (t *dnsConfigMapTest) run() {
invalid := map[string]string{"federations": "invalid.map=xyz"}
By("empty -> valid1")
t.setConfigMap(&api.ConfigMap{Data: valid1}, true)
t.setConfigMap(&v1.ConfigMap{Data: valid1}, true)
t.validate()
By("valid1 -> valid2")
t.setConfigMap(&api.ConfigMap{Data: valid2}, true)
t.setConfigMap(&v1.ConfigMap{Data: valid2}, true)
t.validate()
By("valid2 -> invalid")
t.setConfigMap(&api.ConfigMap{Data: invalid}, false)
t.setConfigMap(&v1.ConfigMap{Data: invalid}, false)
t.validate()
By("invalid -> valid1")
t.setConfigMap(&api.ConfigMap{Data: valid1}, true)
t.setConfigMap(&v1.ConfigMap{Data: valid1}, true)
t.validate()
By("valid1 -> deleted")
@ -114,7 +114,7 @@ func (t *dnsConfigMapTest) run() {
t.validate()
By("deleted -> invalid")
t.setConfigMap(&api.ConfigMap{Data: invalid}, false)
t.setConfigMap(&v1.ConfigMap{Data: invalid}, false)
t.validate()
}
@ -210,7 +210,7 @@ func (t *dnsConfigMapTest) runDig(dnsName string) []string {
}
}
func (t *dnsConfigMapTest) setConfigMap(cm *api.ConfigMap, isValid bool) {
func (t *dnsConfigMapTest) setConfigMap(cm *v1.ConfigMap, isValid bool) {
if isValid {
t.cm = cm
}
@ -219,11 +219,11 @@ func (t *dnsConfigMapTest) setConfigMap(cm *api.ConfigMap, isValid bool) {
cm.ObjectMeta.Namespace = t.ns
cm.ObjectMeta.Name = t.name
options := api.ListOptions{
options := v1.ListOptions{
FieldSelector: fields.Set{
"metadata.namespace": t.ns,
"metadata.name": t.name,
}.AsSelector(),
}.AsSelector().String(),
}
cmList, err := t.c.Core().ConfigMaps(t.ns).List(options)
Expect(err).NotTo(HaveOccurred())
@ -253,22 +253,22 @@ func (t *dnsConfigMapTest) createUtilPod() {
// Actual port # doesn't matter, just need to exist.
const servicePort = 10101
t.utilPod = &api.Pod{
t.utilPod = &v1.Pod{
TypeMeta: unversioned.TypeMeta{
Kind: "Pod",
},
ObjectMeta: api.ObjectMeta{
ObjectMeta: v1.ObjectMeta{
Namespace: t.f.Namespace.Name,
Labels: map[string]string{"app": "e2e-dns-configmap"},
GenerateName: "e2e-dns-configmap-",
},
Spec: api.PodSpec{
Containers: []api.Container{
Spec: v1.PodSpec{
Containers: []v1.Container{
{
Name: "util",
Image: "gcr.io/google_containers/dnsutils:e2e",
Command: []string{"sleep", "10000"},
Ports: []api.ContainerPort{
Ports: []v1.ContainerPort{
{ContainerPort: servicePort, Protocol: "TCP"},
},
},
@ -282,17 +282,17 @@ func (t *dnsConfigMapTest) createUtilPod() {
framework.Logf("Created pod %v", t.utilPod)
Expect(t.f.WaitForPodRunning(t.utilPod.Name)).NotTo(HaveOccurred())
t.utilService = &api.Service{
t.utilService = &v1.Service{
TypeMeta: unversioned.TypeMeta{
Kind: "Service",
},
ObjectMeta: api.ObjectMeta{
ObjectMeta: v1.ObjectMeta{
Namespace: t.f.Namespace.Name,
Name: "e2e-dns-configmap",
},
Spec: api.ServiceSpec{
Spec: v1.ServiceSpec{
Selector: map[string]string{"app": "e2e-dns-configmap"},
Ports: []api.ServicePort{
Ports: []v1.ServicePort{
{
Protocol: "TCP",
Port: servicePort,
@ -309,7 +309,7 @@ func (t *dnsConfigMapTest) createUtilPod() {
func (t *dnsConfigMapTest) deleteUtilPod() {
podClient := t.c.Core().Pods(t.f.Namespace.Name)
if err := podClient.Delete(t.utilPod.Name, api.NewDeleteOptions(0)); err != nil {
if err := podClient.Delete(t.utilPod.Name, v1.NewDeleteOptions(0)); err != nil {
framework.Logf("Delete of pod %v:%v failed: %v",
t.utilPod.Namespace, t.utilPod.Name, err)
}