From 83714f905f0483a84b8af8132a14ea1464bd0355 Mon Sep 17 00:00:00 2001 From: Dileep Ranganathan Date: Fri, 21 Jun 2019 10:14:05 -0700 Subject: [PATCH] Rebuild conf from CollectdPlugins CRD Added feature to rebuild collectd conf and rolling update the Daemonset Issue-ID: ONAPARC-461 Signed-off-by: Dileep Ranganathan Change-Id: I24e25b2afc61e18e04be91d7de4b41f928e845ee --- .../DAaaS/microservices/collectd-operator/Makefile | 20 ++++++++++-- .../collectdplugin/collectdplugin_controller.go | 37 ++++++++++++++++++---- 2 files changed, 48 insertions(+), 9 deletions(-) diff --git a/vnfs/DAaaS/microservices/collectd-operator/Makefile b/vnfs/DAaaS/microservices/collectd-operator/Makefile index 47810e02..1c9311ea 100644 --- a/vnfs/DAaaS/microservices/collectd-operator/Makefile +++ b/vnfs/DAaaS/microservices/collectd-operator/Makefile @@ -37,25 +37,39 @@ build: clean vendor ## all: Delete the image, binary, complete build, test and run coverage all: build test cover +## debug: Build local binary for debugging +debug: + @echo "Deleting ${COP_LOCAL} binary" + @rm -rf ${COP_LOCAL} + @echo "Building ${COP_LOCAL} binary" + @go build -o ${COP_LOCAL} -mod=vendor demo/vnfs/DAaaS/microservices/collectd-operator/cmd/manager + +## deploy: Build Dockerfile and publish to repository deploy: build publish +## vendor: Build the vendor module vendor: @go mod vendor +## publish: Push docker image to repository publish: @docker push ${IMAGE_NAME} .PHONY: test +## test: run tests test: clean @go test -v ./... - +## format: format source code format: @go fmt ./... +## clean: clean build artifacts, image, binary clean: @echo "Deleting the collectd-operator binary" - @rm -rf ${PWD}/build/_output/bin/collectd-operator + @rm -rf ${COP} + @rm -rf ${COP_LOCAL} @echo "Deleting the collectd-operator docker image" @docker rmi ${IMAGE_NAME} .PHONY: cover +## cover: run tests and generate coverage report cover: @go test ./... -coverprofile=coverage.out @go tool cover -html=coverage.out -o coverage.html @@ -64,7 +78,7 @@ cover: ## help: Print help message help: Makefile @echo - @echo " Requires -\\t Operator SDK v0.8.0+, go1.12.5+" + @echo " Requires Operator SDK v0.8.0+, go1.12.5+" @echo @echo " Choose a command run in "$(PROJECTNAME)":" @echo diff --git a/vnfs/DAaaS/microservices/collectd-operator/pkg/controller/collectdplugin/collectdplugin_controller.go b/vnfs/DAaaS/microservices/collectd-operator/pkg/controller/collectdplugin/collectdplugin_controller.go index 3a7d2ea4..a7990a0d 100644 --- a/vnfs/DAaaS/microservices/collectd-operator/pkg/controller/collectdplugin/collectdplugin_controller.go +++ b/vnfs/DAaaS/microservices/collectd-operator/pkg/controller/collectdplugin/collectdplugin_controller.go @@ -25,8 +25,8 @@ var log = logf.Log.WithName("controller_collectdplugin") // ResourceMap to hold objects to update/reload type ResourceMap struct { - configMap *corev1.ConfigMap - daemonSet *extensionsv1beta1.DaemonSet + configMap *corev1.ConfigMap + daemonSet *extensionsv1beta1.DaemonSet collectdPlugins *[]onapv1alpha1.CollectdPlugin } @@ -111,13 +111,15 @@ func (r *ReconcileCollectdPlugin) Reconcile(request reconcile.Request) (reconcil cm := rmap.configMap ds := rmap.daemonSet + collectPlugins := rmap.collectdPlugins reqLogger.V(1).Info("Found ResourceMap") reqLogger.V(1).Info("ConfigMap.Namespace", cm.Namespace, "ConfigMap.Name", cm.Name) reqLogger.V(1).Info("DaemonSet.Namespace", ds.Namespace, "DaemonSet.Name", ds.Name) - //hasChanged, err := buildCollectdConf(r, instance) + collectdConf, err := rebuildCollectdConf(collectPlugins) //Restart Collectd Pods + ts := time.Now().Format(time.RFC850) reqLogger.V(1).Info("Timestamp : ", ts) ds.Spec.Template.SetAnnotations(map[string]string{ @@ -127,6 +129,8 @@ func (r *ReconcileCollectdPlugin) Reconcile(request reconcile.Request) (reconcil "daaas-random": ComputeSHA256([]byte(ts)), }) + cm.Data["node-collectd.conf"] = collectdConf + // Update the ConfigMap with new Spec and reload DaemonSets reqLogger.Info("Updating the ConfigMap", "ConfigMap.Namespace", cm.Namespace, "ConfigMap.Name", cm.Name) log.Info("ConfigMap Data", "Map: ", cm.Data) @@ -139,7 +143,6 @@ func (r *ReconcileCollectdPlugin) Reconcile(request reconcile.Request) (reconcil if err != nil { return reconcile.Result{}, err } - // Reconcile success reqLogger.Info("Updated the ConfigMap", "ConfigMap.Namespace", cm.Namespace, "ConfigMap.Name", cm.Name) return reconcile.Result{}, nil @@ -196,6 +199,28 @@ func findResourceMapForCR(r *ReconcileCollectdPlugin, cr *onapv1alpha1.CollectdP } // Get all collectd plugins and reconstruct, compute Hash and check for changes -func buildCollectdConf() { - +func rebuildCollectdConf(cpList *[]onapv1alpha1.CollectdPlugin) (string, error) { + var collectdConf string + if *cpList == nil || len(*cpList) == 0 { + return "", errors.NewNotFound(corev1.Resource("collectdplugin"), "CollectdPlugin") + } + loadPlugin := make(map[string]string) + for _, cp := range *cpList { + if cp.Spec.PluginName == "global" { + collectdConf += cp.Spec.PluginConf + "\n" + } else { + loadPlugin[cp.Spec.PluginName] = cp.Spec.PluginConf + } + } + + log.V(1).Info("::::::: Plugins Map ::::::: ", "PluginMap ", loadPlugin) + + for cpName, cpConf := range loadPlugin { + collectdConf += "LoadPlugin" + " " + cpName + "\n" + collectdConf += cpConf + "\n" + } + + collectdConf += "\n#Last line (collectd requires ‘\\n’ at the last line)" + + return collectdConf, nil } -- 2.16.6