diff --git a/bindata/linuxptp/ptp-daemon.yaml b/bindata/linuxptp/ptp-daemon.yaml index adf707c9..4e521f2c 100644 --- a/bindata/linuxptp/ptp-daemon.yaml +++ b/bindata/linuxptp/ptp-daemon.yaml @@ -76,16 +76,20 @@ spec: fieldPath: metadata.name - name: PLUGINS value: "{{ .EnabledPlugins }}" - volumeMounts: - name: config-volume mountPath: /etc/linuxptp + - name: leap-volume + mountPath: /etc/leap - name: socket-dir mountPath: /var/run volumes: - name: config-volume configMap: name: ptp-configmap + - name: leap-volume + configMap: + name: leap-configmap - name: linuxptp-certs secret: secretName: linuxptp-daemon-secret diff --git a/controllers/ptpoperatorconfig_controller.go b/controllers/ptpoperatorconfig_controller.go index 1645dad1..df7630f4 100644 --- a/controllers/ptpoperatorconfig_controller.go +++ b/controllers/ptpoperatorconfig_controller.go @@ -129,6 +129,11 @@ func (r *PtpOperatorConfigReconciler) Reconcile(ctx context.Context, req ctrl.Re return reconcile.Result{}, err } + if err = r.createLeapConfigMap(ctx, defaultCfg); err != nil { + glog.Errorf("failed to create leap config map: %v", err) + return reconcile.Result{}, err + } + if err = r.syncLinuxptpDaemon(ctx, defaultCfg, nodeList); err != nil { glog.Errorf("failed to sync linux ptp daemon: %v", err) if err.Error() == AmqReadyStateError { @@ -140,6 +145,34 @@ func (r *PtpOperatorConfigReconciler) Reconcile(ctx context.Context, req ctrl.Re return reconcile.Result{RequeueAfter: ResyncPeriod}, nil } +// createLeapConfigMap creates an empty leap second config map +func (r *PtpOperatorConfigReconciler) createLeapConfigMap(ctx context.Context, defaultCfg *ptpv1.PtpOperatorConfig) error { + var err error + + cm := &corev1.ConfigMap{} + err = r.Get(ctx, types.NamespacedName{ + Namespace: names.Namespace, Name: names.DefaultLeapConfigMapName}, cm) + if err != nil { + if errors.IsNotFound(err) { + cm.Name = names.DefaultLeapConfigMapName + cm.Namespace = names.Namespace + cm.Data = make(map[string]string) + + if err = controllerutil.SetControllerReference(defaultCfg, cm, r.Scheme); err != nil { + return fmt.Errorf("failed to set owner reference: %v", err) + } + err = r.Create(ctx, cm) + if err != nil { + return fmt.Errorf("failed to create leap config map: %v", err) + } + glog.Infof("leap config map created successfully") + } else { + return fmt.Errorf("failed to create leap config map: %v", err) + } + } + return nil +} + // createPTPConfigMap creates PTP config map func (r *PtpOperatorConfigReconciler) createPTPConfigMap(ctx context.Context, defaultCfg *ptpv1.PtpOperatorConfig) error { var err error diff --git a/pkg/names/names.go b/pkg/names/names.go index f3ad5826..5ea8da58 100644 --- a/pkg/names/names.go +++ b/pkg/names/names.go @@ -11,6 +11,10 @@ const Namespace = "ptp" // by ptp-operator. const DefaultPTPConfigMapName = "ptp-configmap" +// DefaultLeapConfigMapName is the default leap config map that created +// by ptp-operator. +const DefaultLeapConfigMapName = "leap-configmap" + // DefaultOperatorConfigName is the default operator config that // created by ptp-operator. It's set to the owner of resources of // linuxptp daemonset, ptp-configmap and nodePtpDevice.