github.com/openebs/api@v1.12.0/pkg/apis/cstor/v1/cstorpoolinstance.go (about)

     1  /*
     2  Copyright 2020 The OpenEBS Authors
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package v1
    18  
    19  import (
    20  	corev1 "k8s.io/api/core/v1"
    21  	"k8s.io/apimachinery/pkg/api/resource"
    22  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    23  )
    24  
    25  // +genclient
    26  // +genclient:noStatus
    27  // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
    28  // +k8s:openapi-gen=true
    29  // +resource:path=cstorpoolinstance
    30  
    31  // CStorPoolInstance describes a cstor pool instance resource.
    32  type CStorPoolInstance struct {
    33  	metav1.TypeMeta   `json:",inline"`
    34  	metav1.ObjectMeta `json:"metadata,omitempty"`
    35  	// Spec is the specification of the cstorpoolinstance resource.
    36  	Spec CStorPoolInstanceSpec `json:"spec"`
    37  	// Status is the possible statuses of the cstorpoolinstance resource.
    38  	Status CStorPoolInstanceStatus `json:"status"`
    39  	// VersionDetails is the openebs version.
    40  	VersionDetails VersionDetails `json:"versionDetails"`
    41  }
    42  
    43  // CStorPoolInstanceSpec is the spec listing fields for a CStorPoolInstance resource.
    44  type CStorPoolInstanceSpec struct {
    45  	// HostName is the name of kubernetes node where the pool
    46  	// should be created.
    47  	HostName string `json:"hostName"`
    48  	// NodeSelector is the labels that will be used to select
    49  	// a node for pool provisioning.
    50  	// Required field
    51  	NodeSelector map[string]string `json:"nodeSelector"`
    52  	// PoolConfig is the default pool config that applies to the
    53  	// pool on node.
    54  	PoolConfig PoolConfig `json:"poolConfig"`
    55  	// DataRaidGroups is the raid group configuration for the given pool.
    56  	DataRaidGroups []RaidGroup `json:"dataRaidGroups"`
    57  	// WriteCacheRaidGroups is the write cache raid group.
    58  	WriteCacheRaidGroups []RaidGroup `json:"writeCacheRaidGroups"`
    59  }
    60  
    61  // CStorPoolInstancePhase is the phase for CStorPoolInstance resource.
    62  type CStorPoolInstancePhase string
    63  
    64  // Status written onto CStorPool and CStorVolumeReplica objects.
    65  // Resetting state to either Init or CreateFailed need to be done with care,
    66  // as, label clear and pool creation depends on this state.
    67  const (
    68  	// CStorPoolStatusEmpty ensures the create operation is to be done, if import fails.
    69  	CStorPoolStatusEmpty CStorPoolInstancePhase = ""
    70  	// CStorPoolStatusOnline signifies that the pool is online.
    71  	CStorPoolStatusOnline CStorPoolInstancePhase = "ONLINE"
    72  	// CStorPoolStatusOffline signifies that the pool is offline.
    73  	CStorPoolStatusOffline CStorPoolInstancePhase = "OFFLINE"
    74  	// CStorPoolStatusDegraded signifies that the pool is degraded.
    75  	CStorPoolStatusDegraded CStorPoolInstancePhase = "DEGRADED"
    76  	// CStorPoolStatusFaulted signifies that the pool is faulted.
    77  	CStorPoolStatusFaulted CStorPoolInstancePhase = "FAULTED"
    78  	// CStorPoolStatusRemoved signifies that the pool is removed.
    79  	CStorPoolStatusRemoved CStorPoolInstancePhase = "REMOVED"
    80  	// CStorPoolStatusUnavail signifies that the pool is not available.
    81  	CStorPoolStatusUnavail CStorPoolInstancePhase = "UNAVAIL"
    82  	// CStorPoolStatusError signifies that the pool status could not be fetched.
    83  	CStorPoolStatusError CStorPoolInstancePhase = "Error"
    84  	// CStorPoolStatusDeletionFailed ensures the resource deletion has failed.
    85  	CStorPoolStatusDeletionFailed CStorPoolInstancePhase = "DeletionFailed"
    86  	// CStorPoolStatusInvalid ensures invalid resource.
    87  	CStorPoolStatusInvalid CStorPoolInstancePhase = "Invalid"
    88  	// CStorPoolStatusErrorDuplicate ensures error due to duplicate resource.
    89  	CStorPoolStatusErrorDuplicate CStorPoolInstancePhase = "ErrorDuplicate"
    90  	// CStorPoolStatusPending ensures pending task for cstorpool.
    91  	CStorPoolStatusPending CStorPoolInstancePhase = "Pending"
    92  	// CStorPoolStatusInit is initial state of CSP, before pool creation.
    93  	CStorPoolStatusInit CStorPoolInstancePhase = "Init"
    94  	// CStorPoolStatusCreateFailed is state when pool creation failed
    95  	CStorPoolStatusCreateFailed CStorPoolInstancePhase = "PoolCreationFailed"
    96  )
    97  
    98  // CStorPoolInstanceStatus is for handling status of pool.
    99  type CStorPoolInstanceStatus struct {
   100  	// Current state of CSPI with details.
   101  	Conditions []CStorPoolInstanceCondition `json:"conditions,omitempty"`
   102  	//  The phase of a CStorPool is a simple, high-level summary of the pool state on the
   103  	//  node.
   104  	Phase CStorPoolInstancePhase `json:"phase"`
   105  	// Capacity describes the capacity details of a cstor pool
   106  	Capacity CStorPoolInstanceCapacity `json:"capacity"`
   107  	//ReadOnly if pool is readOnly or not
   108  	ReadOnly bool `json:"readOnly"`
   109  	// ProvisionedReplicas describes the total count of Volume Replicas
   110  	// present in the cstor pool
   111  	ProvisionedReplicas int32 `json:"provisionedReplicas"`
   112  	// HealthyReplicas describes the total count of healthy Volume Replicas
   113  	// in the cstor pool
   114  	HealthyReplicas int32 `json:"healthyReplicas"`
   115  }
   116  
   117  // CStorPoolInstanceCapacity stores the pool capacity related attributes.
   118  type CStorPoolInstanceCapacity struct {
   119  	// Amount of physical data (and its metadata) written to pool
   120  	// after applying compression, etc..,
   121  	Used resource.Quantity `json:"used"`
   122  	// Amount of usable space in the pool after excluding
   123  	// metadata and raid parity
   124  	Free resource.Quantity `json:"free"`
   125  	// Sum of usable capacity in all the data raidgroups
   126  	Total resource.Quantity `json:"total"`
   127  	// ZFSCapacityAttributes contains advanced information about pool capacity details
   128  	ZFS ZFSCapacityAttributes `json:"zfs"`
   129  }
   130  
   131  // ZFSCapacityAttributes stores the advanced information about pool capacity related
   132  // attributes
   133  type ZFSCapacityAttributes struct {
   134  	// LogicalUsed is the amount of space that is "logically" consumed
   135  	// by this pool and all its descendents. The logical space ignores
   136  	// the effect of the compression and copies properties, giving a
   137  	// quantity closer to the amount of data that applications see.
   138  	// However, it does include space consumed by metadata.
   139  	LogicalUsed resource.Quantity `json:"logicalUsed"`
   140  }
   141  
   142  type CStorPoolInstanceConditionType string
   143  
   144  const (
   145  	// CSPIPoolExpansion condition will be available when user triggers
   146  	// pool expansion by adding blockdevice/raidgroup (or) when underlying
   147  	// disk got expanded
   148  	CSPIPoolExpansion CStorPoolInstanceConditionType = "PoolExpansion"
   149  	// CSPIDiskReplacement condition will be available when user triggers
   150  	// disk replacement by replacing the blockdevice
   151  	CSPIDiskReplacement CStorPoolInstanceConditionType = "DiskReplacement"
   152  	// CSPIDiskUnavailable condition will be available when one (or) more
   153  	// disks were unavailable
   154  	CSPIDiskUnavailable CStorPoolInstanceConditionType = "DiskUnavailable"
   155  	// CSPIPoolLost condition will be available when unable to import the pool
   156  	CSPIPoolLost CStorPoolInstanceConditionType = "PoolLost"
   157  )
   158  
   159  // CSPIConditionType describes the state of a CSPI at a certain point.
   160  type CStorPoolInstanceCondition struct {
   161  	// Type of CSPC condition.
   162  	Type CStorPoolInstanceConditionType `json:"type"`
   163  	// Status of the condition, one of True, False, Unknown.
   164  	Status corev1.ConditionStatus `json:"status"`
   165  	// The last time this condition was updated.
   166  	LastUpdateTime metav1.Time `json:"lastUpdateTime,omitempty"`
   167  	// Last time the condition transitioned from one status to another.
   168  	LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"`
   169  	// The reason for the condition's last transition.
   170  	Reason string `json:"reason,omitempty"`
   171  	// A human readable message indicating details about the transition.
   172  	Message string `json:"message,omitempty"`
   173  }
   174  
   175  // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
   176  // +resource:path=cstorpoolinstance
   177  
   178  // CStorPoolInstanceList is a list of CStorPoolInstance resources
   179  type CStorPoolInstanceList struct {
   180  	metav1.TypeMeta `json:",inline"`
   181  	metav1.ListMeta `json:"metadata"`
   182  	Items           []CStorPoolInstance `json:"items"`
   183  }