Skip to content

Commit

Permalink
CRD: add new CRD LVMVolumeGroup
Browse files Browse the repository at this point in the history
  - Also move types.go to blockdevice.go
  - Add new field `spec.provisioned`

Signed-off-by: Vicente Cheng <vicente.cheng@suse.com>
  • Loading branch information
Vicente-Cheng committed Sep 5, 2024
1 parent b3d80cc commit caba1e3
Show file tree
Hide file tree
Showing 18 changed files with 958 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,9 @@ spec:
a string with the partition's mount point, or "" if no mount point was discovered
type: string
provisioned:
description: a bool indicating whether the filesystem can be provisioned
as a disk for the node to store data.
description: |-
a bool indicating whether the filesystem can be provisioned as a disk for the node to store data.
Deprecated: Replaced by field `spec.provisioned`
type: boolean
repaired:
description: a bool indicating whether the filesystem is manually
Expand All @@ -87,6 +88,10 @@ spec:
nodeName:
description: name of the node to which the block device is attached
type: string
provisioned:
default: false
description: a bool for the device to be provisioned
type: boolean
provisioner:
properties:
longhorn:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
{}
name: lvmvolumegroups.harvesterhci.io
spec:
group: harvesterhci.io
names:
kind: LVMVolumeGroup
listKind: LVMVolumeGroupList
plural: lvmvolumegroups
shortNames:
- lvmvg
- lvmvgs
singular: lvmvolumegroup
scope: Namespaced
versions:
- additionalPrinterColumns:
- jsonPath: .spec.parameters
name: Parameters
type: string
- jsonPath: .status.vgStatus
name: Status
type: string
- jsonPath: .spec.nodeName
name: Node
type: string
name: v1beta1
schema:
openAPIV3Schema:
properties:
apiVersion:
description: |-
APIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
type: string
kind:
description: |-
Kind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string
metadata:
type: object
spec:
properties:
desireState:
description: |-
DesireState is the desired state of the volume group
enabled means we will keep this vg active, disabled means we will keep this vg inactive
enum:
- Enabled
- Disabled
type: string
devices:
additionalProperties:
type: string
description: |-
The devices of the volume group
format: map[<bd Name>]=devPath"
type: object
nodeName:
description: NodeName is the name of the node where the volume group
is created
type: string
parameters:
description: Parameters is the parameters for creating the volume
group *optional*
type: string
vgName:
description: VGName is the name of the volume group
type: string
required:
- desireState
- nodeName
- vgName
type: object
status:
properties:
conditions:
description: The conditions of the volume group
items:
properties:
lastTransitionTime:
format: date-time
type: string
message:
type: string
reason:
type: string
status:
type: string
type:
type: string
required:
- lastTransitionTime
- status
- type
type: object
type: array
devices:
additionalProperties:
type: string
description: |-
The devices of the volume group
format: map[<bd Name>]=devPath"
type: object
parameters:
description: Parameters is the current parameters of the volume group
type: string
vgStatus:
default: Unknown
description: The status of the volume group
enum:
- Active
- Inactive
- Unknown
type: string
type: object
required:
- metadata
- spec
type: object
served: true
storage: true
subresources:
status: {}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ metadata:
name: {{ include "harvester-node-disk-manager.name" . }}
rules:
- apiGroups: [ "harvesterhci.io" ]
resources: [ "blockdevices" ]
resources: [ "blockdevices", "lvmvolumegroups", "lvmvolumegroups/status" ]
verbs: [ "*" ]
- apiGroups: [ "longhorn.io" ]
resources: [ "nodes" ]
Expand Down
9 changes: 7 additions & 2 deletions manifests/crds/harvesterhci.io_blockdevices.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,9 @@ spec:
a string with the partition's mount point, or "" if no mount point was discovered
type: string
provisioned:
description: a bool indicating whether the filesystem can be provisioned
as a disk for the node to store data.
description: |-
a bool indicating whether the filesystem can be provisioned as a disk for the node to store data.
Deprecated: Replaced by field `spec.provisioned`
type: boolean
repaired:
description: a bool indicating whether the filesystem is manually
Expand All @@ -87,6 +88,10 @@ spec:
nodeName:
description: name of the node to which the block device is attached
type: string
provisioned:
default: false
description: a bool for the device to be provisioned
type: boolean
provisioner:
properties:
longhorn:
Expand Down
137 changes: 137 additions & 0 deletions manifests/crds/harvesterhci.io_lvmvolumegroups.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
{}
name: lvmvolumegroups.harvesterhci.io
spec:
group: harvesterhci.io
names:
kind: LVMVolumeGroup
listKind: LVMVolumeGroupList
plural: lvmvolumegroups
shortNames:
- lvmvg
- lvmvgs
singular: lvmvolumegroup
scope: Namespaced
versions:
- additionalPrinterColumns:
- jsonPath: .spec.parameters
name: Parameters
type: string
- jsonPath: .status.vgStatus
name: Status
type: string
- jsonPath: .spec.nodeName
name: Node
type: string
name: v1beta1
schema:
openAPIV3Schema:
properties:
apiVersion:
description: |-
APIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
type: string
kind:
description: |-
Kind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string
metadata:
type: object
spec:
properties:
desireState:
description: |-
DesireState is the desired state of the volume group
enabled means we will keep this vg active, disabled means we will keep this vg inactive
enum:
- Enabled
- Disabled
type: string
devices:
additionalProperties:
type: string
description: |-
The devices of the volume group
format: map[<bd Name>]=devPath"
type: object
nodeName:
description: NodeName is the name of the node where the volume group
is created
type: string
parameters:
description: Parameters is the parameters for creating the volume
group *optional*
type: string
vgName:
description: VGName is the name of the volume group
type: string
required:
- desireState
- nodeName
- vgName
type: object
status:
properties:
conditions:
description: The conditions of the volume group
items:
properties:
lastTransitionTime:
format: date-time
type: string
message:
type: string
reason:
type: string
status:
type: string
type:
type: string
required:
- lastTransitionTime
- status
- type
type: object
type: array
devices:
additionalProperties:
type: string
description: |-
The devices of the volume group
format: map[<bd Name>]=devPath"
type: object
parameters:
description: Parameters is the current parameters of the volume group
type: string
vgStatus:
default: Unknown
description: The status of the volume group
enum:
- Active
- Inactive
- Unknown
type: string
vgTargetType:
description: VGTargetType is the target type of the volume group,
now only support stripe/dm-thin
type: string
type: object
required:
- metadata
- spec
type: object
served: true
storage: true
subresources:
status: {}
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ type BlockDeviceSpec struct {
Tags []string `json:"tags,omitempty"`

Provisioner *ProvisionerInfo `json:"provisioner,omitempty"`

// a bool for the device to be provisioned
// +kubebuilder:default:=false
Provisioned bool `json:"provisioned,omitempty"`
}

type BlockDeviceStatus struct {
Expand Down Expand Up @@ -102,6 +106,8 @@ type FilesystemInfo struct {
ForceFormatted bool `json:"forceFormatted,omitempty"`

// a bool indicating whether the filesystem can be provisioned as a disk for the node to store data.
// Deprecated: Replaced by field `spec.provisioned`
// +optional
Provisioned bool `json:"provisioned,omitempty"`

// a bool indicating whether the filesystem is manually repaired of not
Expand Down
Loading

0 comments on commit caba1e3

Please sign in to comment.