72 lines
2.4 KiB
Go
72 lines
2.4 KiB
Go
|
/*
|
||
|
Copyright 2016 The Kubernetes Authors.
|
||
|
|
||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
you may not use this file except in compliance with the License.
|
||
|
You may obtain a copy of the License at
|
||
|
|
||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||
|
|
||
|
Unless required by applicable law or agreed to in writing, software
|
||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
See the License for the specific language governing permissions and
|
||
|
limitations under the License.
|
||
|
*/
|
||
|
|
||
|
package resourcelock
|
||
|
|
||
|
import (
|
||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||
|
"k8s.io/kubernetes/pkg/client/record"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
LeaderElectionRecordAnnotationKey = "control-plane.alpha.kubernetes.io/leader"
|
||
|
)
|
||
|
|
||
|
// LeaderElectionRecord is the record that is stored in the leader election annotation.
|
||
|
// This information should be used for observational purposes only and could be replaced
|
||
|
// with a random string (e.g. UUID) with only slight modification of this code.
|
||
|
// TODO(mikedanese): this should potentially be versioned
|
||
|
type LeaderElectionRecord struct {
|
||
|
HolderIdentity string `json:"holderIdentity"`
|
||
|
LeaseDurationSeconds int `json:"leaseDurationSeconds"`
|
||
|
AcquireTime metav1.Time `json:"acquireTime"`
|
||
|
RenewTime metav1.Time `json:"renewTime"`
|
||
|
LeaderTransitions int `json:"leaderTransitions"`
|
||
|
}
|
||
|
|
||
|
// ResourceLockConfig common data that exists across different
|
||
|
// resource locks
|
||
|
type ResourceLockConfig struct {
|
||
|
Identity string
|
||
|
EventRecorder record.EventRecorder
|
||
|
}
|
||
|
|
||
|
// Interface offers a common interface for locking on arbitrary
|
||
|
// resources used in leader election. The Interface is used
|
||
|
// to hide the details on specific implementations in order to allow
|
||
|
// them to change over time. This interface is strictly for use
|
||
|
// by the leaderelection code.
|
||
|
type Interface interface {
|
||
|
// Get returns the LeaderElectionRecord
|
||
|
Get() (*LeaderElectionRecord, error)
|
||
|
|
||
|
// Create attempts to create a LeaderElectionRecord
|
||
|
Create(ler LeaderElectionRecord) error
|
||
|
|
||
|
// Update will update and existing LeaderElectionRecord
|
||
|
Update(ler LeaderElectionRecord) error
|
||
|
|
||
|
// RecordEvent is used to record events
|
||
|
RecordEvent(string)
|
||
|
|
||
|
// Identity will return the locks Identity
|
||
|
Identity() string
|
||
|
|
||
|
// Describe is used to convert details on current resource lock
|
||
|
// into a string
|
||
|
Describe() string
|
||
|
}
|