Add ClusterSelector to Ingress Controller
fix log messages
This commit is contained in:
		| @@ -16,6 +16,7 @@ go_library( | |||||||
|         "//federation/apis/federation/v1beta1:go_default_library", |         "//federation/apis/federation/v1beta1:go_default_library", | ||||||
|         "//federation/client/clientset_generated/federation_clientset:go_default_library", |         "//federation/client/clientset_generated/federation_clientset:go_default_library", | ||||||
|         "//federation/pkg/federation-controller/util:go_default_library", |         "//federation/pkg/federation-controller/util:go_default_library", | ||||||
|  |         "//federation/pkg/federation-controller/util/clusterselector:go_default_library", | ||||||
|         "//federation/pkg/federation-controller/util/deletionhelper:go_default_library", |         "//federation/pkg/federation-controller/util/deletionhelper:go_default_library", | ||||||
|         "//federation/pkg/federation-controller/util/eventsink:go_default_library", |         "//federation/pkg/federation-controller/util/eventsink:go_default_library", | ||||||
|         "//pkg/api:go_default_library", |         "//pkg/api:go_default_library", | ||||||
|   | |||||||
| @@ -35,6 +35,7 @@ import ( | |||||||
| 	federationapi "k8s.io/kubernetes/federation/apis/federation/v1beta1" | 	federationapi "k8s.io/kubernetes/federation/apis/federation/v1beta1" | ||||||
| 	federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" | 	federationclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" | ||||||
| 	"k8s.io/kubernetes/federation/pkg/federation-controller/util" | 	"k8s.io/kubernetes/federation/pkg/federation-controller/util" | ||||||
|  | 	"k8s.io/kubernetes/federation/pkg/federation-controller/util/clusterselector" | ||||||
| 	"k8s.io/kubernetes/federation/pkg/federation-controller/util/deletionhelper" | 	"k8s.io/kubernetes/federation/pkg/federation-controller/util/deletionhelper" | ||||||
| 	"k8s.io/kubernetes/federation/pkg/federation-controller/util/eventsink" | 	"k8s.io/kubernetes/federation/pkg/federation-controller/util/eventsink" | ||||||
| 	"k8s.io/kubernetes/pkg/api" | 	"k8s.io/kubernetes/pkg/api" | ||||||
| @@ -765,7 +766,14 @@ func (ic *IngressController) reconcileIngress(ingress types.NamespacedName) { | |||||||
| 		desiredIngress.Spec = *objSpecCopy | 		desiredIngress.Spec = *objSpecCopy | ||||||
| 		glog.V(4).Infof("Desired Ingress: %v", desiredIngress) | 		glog.V(4).Infof("Desired Ingress: %v", desiredIngress) | ||||||
|  |  | ||||||
| 		if !clusterIngressFound { | 		send, err := clusterselector.SendToCluster(cluster.Labels, desiredIngress.ObjectMeta.Annotations) | ||||||
|  | 		if err != nil { | ||||||
|  | 			glog.Errorf("Error processing ClusterSelector cluster: %s for Ingress map: %s error: %s", cluster.Name, key, err.Error()) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		switch { | ||||||
|  | 		case !clusterIngressFound && send: | ||||||
| 			glog.V(4).Infof("No existing Ingress %s in cluster %s - checking if appropriate to queue a create operation", ingress, cluster.Name) | 			glog.V(4).Infof("No existing Ingress %s in cluster %s - checking if appropriate to queue a create operation", ingress, cluster.Name) | ||||||
| 			// We can't supply server-created fields when creating a new object. | 			// We can't supply server-created fields when creating a new object. | ||||||
| 			desiredIngress.ObjectMeta = util.DeepCopyRelevantObjectMeta(baseIngress.ObjectMeta) | 			desiredIngress.ObjectMeta = util.DeepCopyRelevantObjectMeta(baseIngress.ObjectMeta) | ||||||
| @@ -799,7 +807,15 @@ func (ic *IngressController) reconcileIngress(ingress types.NamespacedName) { | |||||||
| 			} else { | 			} else { | ||||||
| 				glog.V(4).Infof("No annotation %q exists on ingress %q in federation and waiting for ingress in cluster %s. Not queueing create operation for ingress until annotation exists", staticIPNameKeyWritable, ingress, firstClusterName) | 				glog.V(4).Infof("No annotation %q exists on ingress %q in federation and waiting for ingress in cluster %s. Not queueing create operation for ingress until annotation exists", staticIPNameKeyWritable, ingress, firstClusterName) | ||||||
| 			} | 			} | ||||||
| 		} else { | 		case clusterIngressFound && !send: | ||||||
|  | 			glog.V(5).Infof("Removing Ingress: %s from cluster: %s reason: cluster selectors do not match: %-v %-v", key, cluster.Name, cluster.ObjectMeta.Labels, desiredIngress.ObjectMeta.Annotations[federationapi.FederationClusterSelectorAnnotation]) | ||||||
|  | 			operations = append(operations, util.FederatedOperation{ | ||||||
|  | 				Type:        util.OperationTypeDelete, | ||||||
|  | 				Obj:         desiredIngress, | ||||||
|  | 				ClusterName: cluster.Name, | ||||||
|  | 				Key:         key, | ||||||
|  | 			}) | ||||||
|  | 		case clusterIngressFound && send: | ||||||
| 			clusterIngress := clusterIngressObj.(*extensionsv1beta1.Ingress) | 			clusterIngress := clusterIngressObj.(*extensionsv1beta1.Ingress) | ||||||
| 			glog.V(4).Infof("Found existing Ingress %s in cluster %s - checking if update is required (in either direction)", ingress, cluster.Name) | 			glog.V(4).Infof("Found existing Ingress %s in cluster %s - checking if update is required (in either direction)", ingress, cluster.Name) | ||||||
| 			clusterIPName, clusterIPNameExists := clusterIngress.ObjectMeta.Annotations[staticIPNameKeyReadonly] | 			clusterIPName, clusterIPNameExists := clusterIngress.ObjectMeta.Annotations[staticIPNameKeyReadonly] | ||||||
|   | |||||||
| @@ -233,6 +233,7 @@ func TestIngressController(t *testing.T) { | |||||||
| 		fedIngress.ObjectMeta.Annotations = make(map[string]string) | 		fedIngress.ObjectMeta.Annotations = make(map[string]string) | ||||||
| 	} | 	} | ||||||
| 	fedIngress.ObjectMeta.Annotations["A"] = "B" | 	fedIngress.ObjectMeta.Annotations["A"] = "B" | ||||||
|  | 	fedIngress.ObjectMeta.Annotations[federationapi.FederationClusterSelectorAnnotation] = `[{"key": "cluster", "operator": "in", "values": ["cluster1","cluster2"]}]` | ||||||
| 	t.Log("Modifying Federated Ingress") | 	t.Log("Modifying Federated Ingress") | ||||||
| 	fedIngressWatch.Modify(&fedIngress) | 	fedIngressWatch.Modify(&fedIngress) | ||||||
| 	t.Log("Checking that Ingress was correctly updated in cluster 1") | 	t.Log("Checking that Ingress was correctly updated in cluster 1") | ||||||
|   | |||||||
| @@ -366,6 +366,7 @@ func NewCluster(name string, readyStatus apiv1.ConditionStatus) *federationapi.C | |||||||
| 		ObjectMeta: metav1.ObjectMeta{ | 		ObjectMeta: metav1.ObjectMeta{ | ||||||
| 			Name:        name, | 			Name:        name, | ||||||
| 			Annotations: map[string]string{}, | 			Annotations: map[string]string{}, | ||||||
|  | 			Labels:      map[string]string{"cluster": name}, | ||||||
| 		}, | 		}, | ||||||
| 		Status: federationapi.ClusterStatus{ | 		Status: federationapi.ClusterStatus{ | ||||||
| 			Conditions: []federationapi.ClusterCondition{ | 			Conditions: []federationapi.ClusterCondition{ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 emaildanwilson
					emaildanwilson