Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Handle dependency update event #88

Merged
Merged
Show file tree
Hide file tree
Changes from 41 commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
d457913
Bootstrapping admiral
aattuluri Sep 19, 2019
7b9a2ff
Add circle ci config
aattuluri Sep 19, 2019
c9e80a5
Fix the working directory for builds
aattuluri Sep 19, 2019
76b9561
Bootstrapping admiral
aattuluri Sep 19, 2019
85aeeaa
Add circle ci config
aattuluri Sep 19, 2019
fe313cc
Fix the working directory for builds
aattuluri Sep 19, 2019
306ad93
Merge branch 'master' of https://github.com/aattuluri/admiral
aattuluri Sep 19, 2019
a9fa409
Add build status badge.
aattuluri Sep 19, 2019
4ae717d
Revert "Add build status badge."
aattuluri Sep 19, 2019
ff09cfb
Merge remote-tracking branch 'upstream/master'
aattuluri Sep 19, 2019
eb51849
Merge remote-tracking branch 'upstream/master'
aattuluri Sep 20, 2019
928c0d2
Merge remote-tracking branch 'upstream/master'
aattuluri Sep 20, 2019
2fb3364
Merge remote-tracking branch 'upstream/master'
aattuluri Sep 23, 2019
ea3ed61
Merge remote-tracking branch 'upstream/master'
aattuluri Sep 23, 2019
15e7845
Merge remote-tracking branch 'upstream/master'
aattuluri Sep 24, 2019
3b34036
Merge remote-tracking branch 'upstream/master'
aattuluri Sep 29, 2019
656bf71
Merge remote-tracking branch 'upstream/master'
aattuluri Sep 29, 2019
0245314
Merge remote-tracking branch 'upstream/master'
aattuluri Sep 29, 2019
111c3de
Merge remote-tracking branch 'upstream/master'
aattuluri Oct 4, 2019
e39651c
Merge remote-tracking branch 'upstream/master'
aattuluri Oct 4, 2019
b280c0b
Merge remote-tracking branch 'upstream/master'
aattuluri Oct 6, 2019
4b74679
Merge remote-tracking branch 'upstream/master'
aattuluri Oct 16, 2019
09b8a5b
Merge remote-tracking branch 'upstream/master'
aattuluri Oct 30, 2019
6546170
Merge remote-tracking branch 'upstream/master'
aattuluri Dec 27, 2019
1b0dfeb
Merge remote-tracking branch 'upstream/master'
aattuluri Jan 2, 2020
9b0010b
Merge remote-tracking branch 'upstream/master'
aattuluri Jan 9, 2020
7b68379
Merge remote-tracking branch 'upstream/master'
aattuluri Jan 21, 2020
5ae2f4c
Merge remote-tracking branch 'upstream/master'
aattuluri Jan 24, 2020
6e297db
Publish images: i) latest from master, ii) TAG if its set and iii) co…
aattuluri Jan 24, 2020
d6674b9
Merge remote-tracking branch 'upstream/master'
aattuluri Feb 19, 2020
e45ef03
Merge remote-tracking branch 'upstream/master'
aattuluri Feb 26, 2020
9096f16
Merge remote-tracking branch 'upstream/master'
aattuluri Feb 27, 2020
1e7a3d5
Merge remote-tracking branch 'upstream/master'
aattuluri Mar 8, 2020
a9e55b3
Merge remote-tracking branch 'upstream/master'
aattuluri Mar 20, 2020
c40a8be
Merge remote-tracking branch 'upstream/master'
aattuluri Mar 27, 2020
17e97ee
Handle update event for Dependency record
aattuluri Mar 27, 2020
66bd1d9
Add Updated method to mock handler.
aattuluri Mar 27, 2020
969ee7b
Optimize sidecar egress update
aattuluri Mar 27, 2020
0db2602
Reduce the sidecar updates as needed.
aattuluri Mar 27, 2020
4a58ef4
Undo invalid import.
aattuluri Mar 27, 2020
718d06b
Fix for a nasty bug.
aattuluri Mar 27, 2020
70130f6
Code review comments.
aattuluri Mar 27, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 13 additions & 14 deletions admiral/pkg/clusters/serviceentry.go
Original file line number Diff line number Diff line change
Expand Up @@ -175,27 +175,25 @@ func createServiceEntryForNewServiceOrPod(env string, sourceIdentity string, rem
ep.Ports = oldPorts
}
}
}

for _, val := range dependents.Map() {
remoteRegistry.AdmiralCache.DependencyNamespaceCache.Put(val, serviceInstance.Namespace, localFqdn)
}
for _, val := range dependents.Map() {
remoteRegistry.AdmiralCache.DependencyNamespaceCache.Put(val, serviceInstance.Namespace, localFqdn)
}

if common.GetWorkloadSidecarUpdate() == "enabled" {
for _, sidecarEgress := range remoteRegistry.AdmiralCache.DependencyNamespaceCache.Get(sourceIdentity) {
modifySidecarForLocalClusterCommunication(serviceInstance.Namespace, sidecarEgress.Namespace, sidecarEgress.FQDN, rc)
}
}
if common.GetWorkloadSidecarUpdate() == "enabled" {
modifySidecarForLocalClusterCommunication(serviceInstance.Namespace, remoteRegistry.AdmiralCache.DependencyNamespaceCache.Get(sourceIdentity), rc)
}
}
return serviceEntries
}

func modifySidecarForLocalClusterCommunication(sidecarNamespace string, dependencyNamespace string, localFqdn string, rc *RemoteController) {
func modifySidecarForLocalClusterCommunication(sidecarNamespace string, sidecarEgressMap map[string]common.SidecarEgress, rc *RemoteController) {

//get existing sidecar from the cluster
sidecarConfig := rc.SidecarController

if sidecarConfig == nil {
if sidecarConfig == nil || sidecarEgressMap == nil {
return
}

Expand All @@ -208,10 +206,11 @@ func modifySidecarForLocalClusterCommunication(sidecarNamespace string, dependen
//copy and add our new local FQDN
newSidecar := copySidecar(sidecar)

egressHost := dependencyNamespace + "/" + localFqdn

if !util.Contains(newSidecar.Spec.Egress[0].Hosts, egressHost) {
newSidecar.Spec.Egress[0].Hosts = append(newSidecar.Spec.Egress[0].Hosts, egressHost)
for _, sidecarEgress := range sidecarEgressMap {
josephpeacock marked this conversation as resolved.
Show resolved Hide resolved
egressHost := sidecarEgress.Namespace + "/" + sidecarEgress.FQDN
if !util.Contains(newSidecar.Spec.Egress[0].Hosts, egressHost) {
newSidecar.Spec.Egress[0].Hosts = append(newSidecar.Spec.Egress[0].Hosts, egressHost)
}
}

newSidecarConfig := createSidecarSkeletion(newSidecar.Spec, common.GetWorkloadSidecarName(), sidecarNamespace)
Expand Down
9 changes: 7 additions & 2 deletions admiral/pkg/clusters/serviceentry_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,10 @@ func TestModifyNonExistingSidecarForLocalClusterCommunication(t *testing.T) {
remoteController := &RemoteController{}
remoteController.SidecarController = sidecarController

modifySidecarForLocalClusterCommunication("test-sidecar-namespace", "test-dependency-namespace", "test-local-fqdn", remoteController)
sidecarEgressMap := make(map[string]common.SidecarEgress)
sidecarEgressMap["test-dependency-namespace"] = common.SidecarEgress{Namespace: "test-dependency-namespace", FQDN: "test-local-fqdn"}

modifySidecarForLocalClusterCommunication("test-sidecar-namespace", sidecarEgressMap, remoteController)

sidecarObj, _ := sidecarController.IstioClient.NetworkingV1alpha3().Sidecars("test-sidecar-namespace").Get(common.GetWorkloadSidecarName(), v12.GetOptions{})

Expand Down Expand Up @@ -328,7 +331,9 @@ func TestModifyExistingSidecarForLocalClusterCommunication(t *testing.T) {

if createdSidecar != nil {

modifySidecarForLocalClusterCommunication("test-sidecar-namespace", "test-dependency-namespace", "test-local-fqdn", remoteController)
sidecarEgressMap := make(map[string]common.SidecarEgress)
sidecarEgressMap["test-dependency-namespace"] = common.SidecarEgress{Namespace: "test-dependency-namespace", FQDN: "test-local-fqdn"}
modifySidecarForLocalClusterCommunication("test-sidecar-namespace", sidecarEgressMap, remoteController)

updatedSidecar, error := sidecarController.IstioClient.NetworkingV1alpha3().Sidecars("test-sidecar-namespace").Get("default", v12.GetOptions{})

Expand Down
20 changes: 16 additions & 4 deletions admiral/pkg/clusters/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -174,18 +174,30 @@ type ServiceHandler struct {

func (dh *DependencyHandler) Added(obj *v1.Dependency) {

log.Infof(LogFormat, "Event", "dependency-record", obj.Name, "", "Received=true namespace="+obj.Namespace)
log.Infof(LogFormat, "Add", "dependency-record", obj.Name, "", "Received=true namespace="+obj.Namespace)

HandleDependencyRecord(obj, dh.RemoteRegistry)

}

func (dh *DependencyHandler) Updated(obj *v1.Dependency) {

log.Infof(LogFormat, "Update", "dependency-record", obj.Name, "", "Received=true namespace="+obj.Namespace)

HandleDependencyRecord(obj, dh.RemoteRegistry)

}

func HandleDependencyRecord(obj *v1.Dependency, remoteRegitry *RemoteRegistry) {
sourceIdentity := obj.Spec.Source

if len(sourceIdentity) == 0 {
log.Infof(LogFormat, "Event", "dependency-record", obj.Name, "", "No identity found namespace="+obj.Namespace)
}

updateIdentityDependencyCache(sourceIdentity, dh.RemoteRegistry.AdmiralCache.IdentityDependencyCache, obj)

handleDependencyRecord(sourceIdentity, dh.RemoteRegistry, dh.RemoteRegistry.remoteControllers, obj)
updateIdentityDependencyCache(sourceIdentity, remoteRegitry.AdmiralCache.IdentityDependencyCache, obj)

handleDependencyRecord(sourceIdentity, remoteRegitry, remoteRegitry.remoteControllers, obj)
}

func (dh *DependencyHandler) Deleted(obj *v1.Dependency) {
Expand Down
7 changes: 7 additions & 0 deletions admiral/pkg/controller/admiral/dependency.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
// Handler interface contains the methods that are required
type DepHandler interface {
Added(obj *v1.Dependency)
Updated(obj *v1.Dependency)
Deleted(obj *v1.Dependency)
}

Expand Down Expand Up @@ -107,6 +108,12 @@ func (d *DependencyController) Added(ojb interface{}) {
d.DepHandler.Added(dep)
}

func (d *DependencyController) Updated(ojb interface{}) {
dep := ojb.(*v1.Dependency)
d.Cache.Put(dep)
d.DepHandler.Added(dep)
}

func (d *DependencyController) Deleted(ojb interface{}) {
dep := ojb.(*v1.Dependency)
d.DepHandler.Deleted(dep)
Expand Down
14 changes: 7 additions & 7 deletions admiral/pkg/controller/common/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ type SidecarEgress struct {
}

type SidecarEgressMap struct {
cache map[string][]SidecarEgress
aattuluri marked this conversation as resolved.
Show resolved Hide resolved
cache map[string]map[string]SidecarEgress
mutex *sync.Mutex
}

Expand Down Expand Up @@ -64,7 +64,7 @@ type LabelSet struct {

func NewSidecarEgressMap() *SidecarEgressMap {
n := new(SidecarEgressMap)
n.cache = make(map[string][]SidecarEgress)
n.cache = make(map[string]map[string]SidecarEgress)
n.mutex = &sync.Mutex{}
return n
}
Expand Down Expand Up @@ -113,8 +113,8 @@ func (s *MapOfMaps) Put(pkey string, key string, value string) {
var mapVal = s.cache[pkey]
if mapVal == nil {
mapVal = NewMap()
mapVal.Put(key, value)
}
mapVal.Put(key, value)
s.cache[pkey] = mapVal
}

Expand All @@ -137,13 +137,13 @@ func (s *SidecarEgressMap) Put(asset string, namespace string, fqdn string) {
s.mutex.Lock()
var mapVal = s.cache[asset]
if mapVal == nil {
mapVal = make([]SidecarEgress, 0)
aattuluri marked this conversation as resolved.
Show resolved Hide resolved
mapVal = make(map[string]SidecarEgress, 0)
}
mapVal = append(mapVal, SidecarEgress{Namespace: namespace, FQDN: fqdn})
mapVal[namespace] = SidecarEgress{Namespace: namespace, FQDN: fqdn}
s.cache[asset] = mapVal
}

func (s *SidecarEgressMap) Get(key string) []SidecarEgress {
func (s *SidecarEgressMap) Get(key string) map[string]SidecarEgress {
return s.cache[key]
}

Expand All @@ -153,6 +153,6 @@ func (s *SidecarEgressMap) Delete(key string) {
delete(s.cache, key)
}

func (s *SidecarEgressMap) Map() map[string][]SidecarEgress {
func (s *SidecarEgressMap) Map() map[string]map[string]SidecarEgress {
return s.cache
}
4 changes: 4 additions & 0 deletions admiral/pkg/test/mock.go
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@ func (m *MockDependencyHandler) Added(obj *v1.Dependency) {

}

func (m *MockDependencyHandler) Updated(obj *v1.Dependency) {

}

func (m *MockDependencyHandler) Deleted(obj *v1.Dependency) {

}
Expand Down