Skip to content

Commit

Permalink
Object Endpoint
Browse files Browse the repository at this point in the history
longhorn/longhorn#5832

Signed-off-by: Moritz Röhrich <moritz.rohrich@suse.com>
  • Loading branch information
m-ildefons committed Sep 6, 2023
1 parent 421da08 commit 18fa003
Show file tree
Hide file tree
Showing 4 changed files with 81 additions and 0 deletions.
9 changes: 9 additions & 0 deletions app/daemon.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ const (
FlagBackingImageManagerImage = "backing-image-manager-image"
FlagManagerImage = "manager-image"
FlagSupportBundleManagerImage = "support-bundle-manager-image"
FlagObjectEndpointImage = "object-endpoint-image"
FlagServiceAccount = "service-account"
FlagKubeConfig = "kube-config"
)
Expand Down Expand Up @@ -64,6 +65,10 @@ func DaemonCmd() cli.Command {
Name: FlagSupportBundleManagerImage,
Usage: "Specify Longhorn support bundle manager image",
},
cli.StringFlag{
Name: FlagObjectEndpointImage,
Usage: "Specify Longhorn object storage gateway image",
},
cli.StringFlag{
Name: FlagManagerImage,
Usage: "Specify Longhorn manager image",
Expand Down Expand Up @@ -110,6 +115,10 @@ func startManager(c *cli.Context) error {
if supportBundleManagerImage == "" {
return fmt.Errorf("require %v", FlagSupportBundleManagerImage)
}
objectEndpointImage := c.String(FlagObjectEndpointImage)
if objectEndpointImage == "" {
return fmt.Errorf("require %v", FlagObjectEndpointImage)
}
managerImage := c.String(FlagManagerImage)
if managerImage == "" {
return fmt.Errorf("require %v", FlagManagerImage)
Expand Down
58 changes: 58 additions & 0 deletions k8s/pkg/apis/longhorn/v1beta2/objectendpoint.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package v1beta2

import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

type ObjectEndpointState string

const (
ObjectEndpointStateUnknown = ObjectEndpointState("unknown")
ObjectEndpointStateStarting = ObjectEndpointState("starting")
ObjectEndpointStateRunning = ObjectEndpointState("running")
ObjectEndpointStateStopping = ObjectEndpointState("stopping")
ObjectEndpointStateStopped = ObjectEndpointState("stopped")
ObjectEndpointStateError = ObjectEndpointState("error")
)

type ObjectEndpointStatus struct {
State ObjectEndpointState `json:"state""`
Endpoint string `json:"endpoint"`
}

type ObjectEndpointCredentials struct {
AccessKey string `json:"accessKey"`
SecretKey string `json:"secretKey"`
}

type ObjectEndpointSpec struct {
Image string `json:"image"`
Credentials ObjectEndpointCredentials `json:"credentials"`
Volume string `json:"volume"`
}

// +genclient
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// +kubebuilder:resource:shortName=lhoe
// +kubebuilder:subresource:status
// +kubebuilder:storageversion
// +kubebuilder:printcolumn:name="State",type=string,JSONPath=`.status.state`,description="The state of object endpoint"
// +kubebuilder:printcolumn:name="Endpoint",type=string,JSONPath=`.status.endpoint`,description=""
// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp`

// Representation of an object storage endpoint in the K8s API.
type ObjectEndpoint struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

Spec ObjectEndpointSpec `json:"spec,omitempty"`
Status ObjectEndpointStatus `json:"status,omitempty"`
}

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

// ObjectEndpointList is a list of ObjectEndpoints.
type ObjectEndpointList struct {
metav1.TypeMeta `json:",inline"`
metav1.ObjectMeta `json:"metadata,omitempty"`

Items []ObjectEndpoint `json:"items"`
}
12 changes: 12 additions & 0 deletions types/setting.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ const (
SettingNameDefaultInstanceManagerImage = SettingName("default-instance-manager-image")
SettingNameDefaultBackingImageManagerImage = SettingName("default-backing-image-manager-image")
SettingNameSupportBundleManagerImage = SettingName("support-bundle-manager-image")
SettingNameObjectEndpointImage = SettingName("object-endpoint-image")
SettingNameReplicaSoftAntiAffinity = SettingName("replica-soft-anti-affinity")
SettingNameReplicaAutoBalance = SettingName("replica-auto-balance")
SettingNameStorageOverProvisioningPercentage = SettingName("storage-over-provisioning-percentage")
Expand Down Expand Up @@ -124,6 +125,7 @@ var (
SettingNameDefaultInstanceManagerImage,
SettingNameDefaultBackingImageManagerImage,
SettingNameSupportBundleManagerImage,
SettingNameObjectEndpointImage,
SettingNameReplicaSoftAntiAffinity,
SettingNameReplicaAutoBalance,
SettingNameStorageOverProvisioningPercentage,
Expand Down Expand Up @@ -225,6 +227,7 @@ var (
SettingNameDefaultInstanceManagerImage: SettingDefinitionDefaultInstanceManagerImage,
SettingNameDefaultBackingImageManagerImage: SettingDefinitionDefaultBackingImageManagerImage,
SettingNameSupportBundleManagerImage: SettingDefinitionSupportBundleManagerImage,
SettingNameObjectEndpointImage: SettingDefinitionObjectEndpointImage,
SettingNameReplicaSoftAntiAffinity: SettingDefinitionReplicaSoftAntiAffinity,
SettingNameReplicaAutoBalance: SettingDefinitionReplicaAutoBalance,
SettingNameStorageOverProvisioningPercentage: SettingDefinitionStorageOverProvisioningPercentage,
Expand Down Expand Up @@ -415,6 +418,15 @@ var (
ReadOnly: false,
}

SettingDefinitionObjectEndpointImage = SettingDefinition{
DisplayName: "Object Endpoint Image",
Description: "The container image used by the manager when deploying an object storage gateway",
Category: SettingCategoryGeneral,
Type: SettingTypeString,
Required: true,
ReadOnly: false,
}

SettingDefinitionReplicaSoftAntiAffinity = SettingDefinition{
DisplayName: "Replica Node Level Soft Anti-Affinity",
Description: "Allow scheduling on nodes with existing healthy replicas of the same volume",
Expand Down
2 changes: 2 additions & 0 deletions types/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,8 @@ const (
LonghornLabelRecurringJob = "job"
LonghornLabelRecurringJobGroup = "job-group"
LonghornLabelRecurringJobSource = "source"
LonghornLabelObjectEndpoint = "object-endpoint"
LonghornLabelObjectEndpointImage = "object-endpoint-image"
LonghornLabelOrphan = "orphan"
LonghornLabelOrphanType = "orphan-type"
LonghornLabelRecoveryBackend = "recovery-backend"
Expand Down

0 comments on commit 18fa003

Please sign in to comment.