Fixing daemonset checking Pods in wrong namespace and small refactoring
This commit is contained in:
parent
2590d0c013
commit
a6473109f1
@ -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:
|
||||
`
|
||||
|
7
dependencies/daemonset/daemonset.go
vendored
7
dependencies/daemonset/daemonset.go
vendored
@ -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
|
||||
}
|
||||
|
40
dependencies/daemonset/daemonset_test.go
vendored
40
dependencies/daemonset/daemonset_test.go
vendored
@ -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)
|
||||
})
|
||||
})
|
||||
|
@ -14,11 +14,16 @@ type dClient struct {
|
||||
}
|
||||
|
||||
const (
|
||||
SucceedingDaemonsetName = "DAEMONSET_SUCCEED"
|
||||
FailingDaemonsetName = "DAEMONSET_FAIL"
|
||||
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")
|
||||
}
|
||||
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user