in pkg/providers/k8s/configmap/configmap.go [107:196]
func (c *configmapController) sync(ctx context.Context, ev *types.Event) error {
key := ev.Object.(string)
log.Debugw("configmap sync event arrived",
zap.String("event_type", ev.Type.String()),
zap.Any("key", ev.Object),
)
namespace, name, err := cache.SplitMetaNamespaceKey(key)
if err != nil {
log.Errorf("invalid resource key: %s", key)
return err
}
cm, err := c.ConfigMapLister.ConfigMaps(namespace).Get(name)
if err != nil {
if !k8serrors.IsNotFound(err) {
log.Errorw("sync failed, unable to get ConfigMap",
zap.String("key", key),
zap.Error(err),
)
return err
}
if ev.Type != types.EventDelete {
log.Warnw("configmap was deleted before it can be delivered",
zap.String("key", key),
)
return nil
}
cm = ev.Tombstone.(*corev1.ConfigMap)
}
var (
configmap *translation.ConfigMap
oldConfigmap *translation.ConfigMap
)
configmap, err = translation.TranslateConfigMap(cm)
if err != nil {
return err
}
if ev.Type == types.EventUpdate {
oldConfigmap, _ = translation.TranslateConfigMap(ev.OldObject.(*corev1.ConfigMap))
}
for clusterName, pluginMetadatas := range configmap.ConfigYaml.Data {
m := &utils.Manifest{
PluginMetadatas: pluginMetadatas,
}
var (
added *utils.Manifest
updated *utils.Manifest
deleted *utils.Manifest
)
if ev.Type == types.EventDelete {
deleted = m
} else if ev.Type == types.EventAdd {
added = m
} else {
if oldConfigmap != nil {
oldPluginMetadatas := oldConfigmap.ConfigYaml.Data[clusterName]
om := &utils.Manifest{
PluginMetadatas: oldPluginMetadatas,
}
added, updated, deleted = m.Diff(om)
}
}
if err := c.SyncClusterManifests(ctx, clusterName, added, updated, deleted, false); err != nil {
log.Errorw("sync cluster failed", zap.Error(err))
return err
}
}
if ev.Type == types.EventUpdate && oldConfigmap != nil {
if oldConfigmap == nil {
return nil
}
for clusterName, pluginMetadatas := range oldConfigmap.ConfigYaml.Data {
if _, ok := configmap.ConfigYaml.Data[clusterName]; !ok {
deleted := &utils.Manifest{
PluginMetadatas: pluginMetadatas,
}
if err := c.SyncClusterManifests(ctx, clusterName, nil, nil, deleted, false); err != nil {
log.Errorw("sync cluster failed", zap.Error(err))
}
}
}
}
return nil
}