Fixing daemonset checking Pods in wrong namespace and small refactoring

This commit is contained in:
PiotrProkop 2017-09-27 17:33:06 +02:00
parent 2590d0c013
commit a6473109f1
5 changed files with 42 additions and 29 deletions

View File

@ -28,7 +28,7 @@ Kubernetes-entrypoint introduces a wide variety of dependencies which can be use
## Latest features
Extending functionality of kubernetes-entrypoint by adding an ability to specify dependencies in different namespaces. The new format for writing dependencies is `namespace:name`. To ensure backward compatibility if the dependency name is without colon, it behaves just like in previous versions so it esumes that dependecies is running at the same namespace as kubernetes-entrypoint. This feature is not implemented for container, config and socket dependency because in such cases the different namespace is irrelevant.
Extending functionality of kubernetes-entrypoint by adding an ability to specify dependencies in different namespaces. The new format for writing dependencies is `namespace:name`. To ensure backward compatibility if the dependency name is without colon, it behaves just like in previous versions so it assumes that dependecies are running at the same namespace as kubernetes-entrypoint. This feature is not implemented for container, config and socket dependency because in such cases the different namespace is irrelevant.
For instance:
`

View File

@ -58,19 +58,20 @@ func (d Daemonset) IsResolved(entrypoint entry.EntrypointInterface) (bool, error
label := labels.SelectorFromSet(daemonset.Spec.Selector.MatchLabels)
opts := api.ListOptions{LabelSelector: label}
pods, err := entrypoint.Client().Pods(d.namespace).List(opts)
daemonsetPods, err := entrypoint.Client().Pods(d.namespace).List(opts)
if err != nil {
return false, err
}
myPod, err := entrypoint.Client().Pods(d.namespace).Get(d.podName)
myPod, err := entrypoint.Client().Pods(env.GetBaseNamespace()).Get(d.podName)
if err != nil {
return false, fmt.Errorf("Getting POD: %v failed : %v", myPodName, err)
}
myHost := myPod.Status.HostIP
for _, pod := range pods.Items {
for _, pod := range daemonsetPods.Items {
if !isPodOnHost(&pod, myHost) {
continue
}

View File

@ -13,7 +13,7 @@ import (
const (
podEnvVariableValue = "podlist"
daemonsetNamespace = "namespace1"
daemonsetNamespace = "test"
)
var testEntrypoint entrypoint.EntrypointInterface
@ -37,7 +37,7 @@ var _ = Describe("Daemonset", func() {
It(fmt.Sprintf("creates new daemonset with %s set and checks its name", PodNameEnvVar), func() {
daemonset, err := NewDaemonset(mocks.SucceedingDaemonsetName, daemonsetNamespace)
Expect(daemonset).NotTo(Equal(nil))
Expect(daemonset).NotTo(BeNil())
Expect(err).NotTo(HaveOccurred())
Expect(daemonset.name).To(Equal(mocks.SucceedingDaemonsetName))
@ -48,7 +48,7 @@ var _ = Describe("Daemonset", func() {
isResolved, err := daemonset.IsResolved(testEntrypoint)
Expect(isResolved).To(Equal(true))
Expect(isResolved).To(BeTrue())
Expect(err).NotTo(HaveOccurred())
})
@ -57,7 +57,7 @@ var _ = Describe("Daemonset", func() {
isResolved, err := daemonset.IsResolved(testEntrypoint)
Expect(isResolved).To(Equal(false))
Expect(isResolved).To(BeFalse())
Expect(err).To(HaveOccurred())
})
@ -66,7 +66,7 @@ var _ = Describe("Daemonset", func() {
isResolved, err := daemonset.IsResolved(testEntrypoint)
Expect(isResolved).To(Equal(false))
Expect(isResolved).To(BeFalse())
Expect(err).To(HaveOccurred())
})
@ -77,7 +77,7 @@ var _ = Describe("Daemonset", func() {
isResolved, err := daemonset.IsResolved(testEntrypoint)
Expect(isResolved).To(Equal(false))
Expect(isResolved).To(BeFalse())
Expect(err).To(HaveOccurred())
})
@ -86,32 +86,46 @@ var _ = Describe("Daemonset", func() {
isResolved, err := daemonset.IsResolved(testEntrypoint)
Expect(isResolved).To(Equal(false))
Expect(isResolved).To(BeFalse())
Expect(err).To(HaveOccurred())
})
It("checks resolution of a correct daemonset namespace", func() {
daemonset, err := NewDaemonset(mocks.CorrectDaemonsetNamespace, daemonsetNamespace)
daemonset, err := NewDaemonset(mocks.CorrectNamespaceDaemonsetName, daemonsetNamespace)
Expect(daemonset).NotTo(Equal(nil))
Expect(daemonset).NotTo(BeNil())
Expect(err).NotTo(HaveOccurred())
isResolved, err := daemonset.IsResolved(testEntrypoint)
Expect(isResolved).To(Equal(true))
Expect(isResolved).To(BeTrue())
Expect(err).NotTo(HaveOccurred())
})
It("checks resolution of an incorrect daemonset namespace", func() {
daemonset, err := NewDaemonset(mocks.IncorrectDaemonsetNamespace, daemonsetNamespace)
daemonset, err := NewDaemonset(mocks.IncorrectNamespaceDaemonsetName, daemonsetNamespace)
Expect(daemonset).NotTo(Equal(nil))
Expect(daemonset).NotTo(BeNil())
Expect(err).NotTo(HaveOccurred())
isResolved, err := daemonset.IsResolved(testEntrypoint)
Expect(isResolved).To(Equal(false))
Expect(isResolved).To(BeFalse())
Expect(err).To(HaveOccurred())
})
It("resolve daemonset and entrypoint pod in different namespaces", func() {
daemonset, err := NewDaemonset(mocks.CorrectNamespaceDaemonsetName, mocks.CorrectDaemonsetNamespace)
Expect(err).NotTo(HaveOccurred())
err = os.Setenv(PodNameEnvVar, "shouldwork")
Expect(err).NotTo(HaveOccurred())
isResolved, err := daemonset.IsResolved(testEntrypoint)
Expect(err).NotTo(HaveOccurred())
Expect(isResolved).To(BeTrue())
err = os.Unsetenv(PodNameEnvVar)
})
})

View File

@ -16,9 +16,14 @@ type dClient struct {
const (
SucceedingDaemonsetName = "DAEMONSET_SUCCEED"
FailingDaemonsetName = "DAEMONSET_FAIL"
CorrectNamespaceDaemonsetName = "CORRECT_DAEMONSET_NAMESPACE"
IncorrectNamespaceDaemonsetName = "INCORRECT_DAEMONSET_NAMESPACE"
CorrectDaemonsetNamespace = "CORRECT_DAEMONSET"
IncorrectMatchLabelsDaemonsetName = "DAEMONSET_INCORRECT_MATCH_LABELS"
NotReadyMatchLabelsDaemonsetName = "DAEMONSET_NOT_READY_MATCH_LABELS"
IncorrectMatchLabel = "INCORRECT"
NotReadyMatchLabel = "INCORRECT"
)
func (d dClient) Get(name string) (*extensions.DaemonSet, error) {
@ -41,9 +46,9 @@ func (d dClient) Get(name string) (*extensions.DaemonSet, error) {
},
}
if name == CorrectDaemonsetNamespace {
ds.ObjectMeta.Namespace = CorrectDaemonset
} else if name == IncorrectDaemonsetNamespace {
if name == CorrectNamespaceDaemonsetName {
ds.ObjectMeta.Namespace = CorrectDaemonsetNamespace
} else if name == IncorrectNamespaceDaemonsetName {
return nil, fmt.Errorf("Mock daemonset didnt work")
}

View File

@ -19,13 +19,6 @@ type pClient struct {
const (
PodNotPresent = "NOT_PRESENT"
PodEnvVariableValue = "podlist"
IncorrectMatchLabel = "INCORRECT"
NotReadyMatchLabel = "INCORRECT"
CorrectDaemonsetNamespace = "CORRECT_DAEMONSET_NAMESPACE"
IncorrectDaemonsetNamespace = "INCORRECT_DAEMONSET_NAMESPACE"
CorrectDaemonset = "CORRECT_DAEMONSET"
)
func (p pClient) Get(name string) (*v1.Pod, error) {