Documentation ¶
Overview ¶
Copyright 2016 The Rook Authors. All rights reserved.
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.
Copyright 2016 The Rook Authors. All rights reserved.
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.
Copyright 2016 The Rook Authors. All rights reserved.
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.
Copyright 2016 The Rook Authors. All rights reserved.
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.
Copyright 2016 The Rook Authors. All rights reserved.
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.
Copyright 2016 The Rook Authors. All rights reserved.
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.
Copyright 2016 The Rook Authors. All rights reserved.
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.
Some of the code below came from https://github.com/digitalocean/ceph_exporter which has the same license.
Copyright 2016 The Rook Authors. All rights reserved.
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.
Some of the code below came from https://github.com/digitalocean/ceph_exporter which has the same license.
Copyright 2016 The Rook Authors. All rights reserved.
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.
Some of the code below came from https://github.com/digitalocean/ceph_exporter which has the same license.
Copyright 2016 The Rook Authors. All rights reserved.
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.
Some of the code below came from https://github.com/digitalocean/ceph_exporter which has the same license.
Copyright 2016 The Rook Authors. All rights reserved.
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.
Some of the code below came from https://github.com/digitalocean/ceph_exporter which has the same license.
Index ¶
- Constants
- func AppendAdminConnectionArgs(args []string, configDir, clusterName string) []string
- func AuthAdd(context *clusterd.Context, clusterName, name, keyringPath string, ...) error
- func AuthDelete(context *clusterd.Context, clusterName, name string) error
- func AuthGetKey(context *clusterd.Context, clusterName, name string) (string, error)
- func AuthGetOrCreate(context *clusterd.Context, clusterName, name, keyringPath string, ...) error
- func AuthGetOrCreateKey(context *clusterd.Context, clusterName, name string, caps []string) (string, error)
- func CreateDefaultCrushMap(context *clusterd.Context, clusterName string) (string, error)
- func CreateErasureCodeProfile(context *clusterd.Context, clusterName string, ...) error
- func CreateFilesystem(context *clusterd.Context, clusterName, name, metadataPool string, ...) error
- func CreatePool(context *clusterd.Context, clusterName string, newPool CephStoragePoolDetails) error
- func CreatePoolForApp(context *clusterd.Context, clusterName string, newPool CephStoragePoolDetails, ...) error
- func CreatePoolWithProfile(context *clusterd.Context, clusterName string, newPoolReq model.Pool, ...) error
- func DeleteImage(context *clusterd.Context, clusterName, name, poolName string) error
- func DeletePool(context *clusterd.Context, clusterName string, name string) error
- func ExecuteCephCommand(context *clusterd.Context, clusterName string, args []string) ([]byte, error)
- func ExecuteCephCommandPlain(context *clusterd.Context, clusterName string, args []string) ([]byte, error)
- func ExecuteCephCommandPlainNoOutputFile(context *clusterd.Context, clusterName string, args []string) ([]byte, error)
- func ExecuteRBDCommand(context *clusterd.Context, clusterName string, args []string) ([]byte, error)
- func ExecuteRBDCommandNoFormat(context *clusterd.Context, clusterName string, args []string) ([]byte, error)
- func ExecuteRBDCommandWithTimeout(context *clusterd.Context, clusterName string, args []string) (string, error)
- func FailMDS(context *clusterd.Context, clusterName string, gid int) error
- func FormatLocation(location, hostName string) ([]string, error)
- func GetPoolNamesByID(context *clusterd.Context, clusterName string) (map[int]string, error)
- func GetPools(context *clusterd.Context, clusterName string) ([]model.Pool, error)
- func HealthToModelHealthStatus(cephHealth string) model.HealthStatus
- func ListErasureCodeProfiles(context *clusterd.Context, clusterName string) ([]string, error)
- func MapImage(context *clusterd.Context, ...) error
- func MarkFilesystemAsDown(context *clusterd.Context, clusterName string, fsName string) error
- func RemoveFilesystem(context *clusterd.Context, clusterName, fsName string) error
- func SetCrushMap(context *clusterd.Context, clusterName, compiledMap string) (string, error)
- func SetCrushTunables(context *clusterd.Context, clusterName, profile string) (string, error)
- func SetPoolProperty(context *clusterd.Context, clusterName, name, propName string, propVal string) error
- func StatusPlain(context *clusterd.Context, clusterName string) ([]byte, error)
- func UnMapImage(context *clusterd.Context, ...) error
- type CephBlockImage
- type CephErasureCodeProfile
- type CephFilesystem
- type CephFilesystemDetails
- type CephStatus
- type CephStoragePoolDetails
- type CephStoragePoolStats
- type CephStoragePoolSummary
- type CephUsage
- type CheckMessage
- type CrushMap
- type HealthStatus
- type MDSInfo
- type MDSMap
- type MgrMap
- type MgrStandby
- type MonMap
- type MonMapEntry
- type MonStats
- type MonStatusRequest
- type MonStatusResponse
- type MonTimeSkewStatus
- type MonTimeStatus
- type OSDDump
- type OSDPerfStats
- type OSDUsage
- type OsdMap
- type PgMap
- type PgStateEntry
Constants ¶
const ( AdminUsername = "client.admin" CephTool = "ceph" RBDTool = "rbd" CrushTool = "crushtool" )
const ( // CephHealthOK denotes the status of ceph cluster when healthy. CephHealthOK = "HEALTH_OK" // CephHealthWarn denotes the status of ceph cluster when unhealthy but recovering. CephHealthWarn = "HEALTH_WARN" // CephHealthErr denotes the status of ceph cluster when unhealthy but usually needs // manual intervention. CephHealthErr = "HEALTH_ERR" )
const (
ImageMinSize = uint64(1048576) // 1 MB
)
Variables ¶
This section is empty.
Functions ¶
func AuthAdd ¶ added in v0.6.0
AuthAdd will create a new user with the given capabilities and using the already generated keyring found at the given keyring path. This should not be used when the user may already exist.
func AuthDelete ¶
AuthDelete will delete the given user.
func AuthGetKey ¶
AuthGetKey gets the key for the given user.
func AuthGetOrCreate ¶ added in v0.6.0
func AuthGetOrCreate(context *clusterd.Context, clusterName, name, keyringPath string, caps []string) error
AuthGetOrCreate will either get or create a user with the given capabilities. The keyring for the user will be written to the given keyring path.
func AuthGetOrCreateKey ¶
func AuthGetOrCreateKey(context *clusterd.Context, clusterName, name string, caps []string) (string, error)
AuthGetOrCreateKey gets or creates the key for the given user.
func CreateDefaultCrushMap ¶
func CreateFilesystem ¶
func CreatePool ¶
func CreatePool(context *clusterd.Context, clusterName string, newPool CephStoragePoolDetails) error
func CreatePoolForApp ¶ added in v0.5.1
func CreatePoolWithProfile ¶ added in v0.6.0
func DeleteImage ¶
func DeletePool ¶ added in v0.6.0
func ExecuteCephCommand ¶
func ExecuteCephCommandPlain ¶
func ExecuteCephCommandPlainNoOutputFile ¶ added in v0.6.0
func ExecuteRBDCommand ¶
func ExecuteRBDCommandWithTimeout ¶ added in v0.6.0
func FormatLocation ¶
func GetPoolNamesByID ¶ added in v0.6.0
func HealthToModelHealthStatus ¶
func HealthToModelHealthStatus(cephHealth string) model.HealthStatus
func ListErasureCodeProfiles ¶
func MapImage ¶ added in v0.6.0
func MapImage(context *clusterd.Context, imageName, poolName, clusterName, keyring, monitors string) error
MapImage maps an RBD image using admin cephfx and returns the device path
func MarkFilesystemAsDown ¶
func RemoveFilesystem ¶
func SetCrushMap ¶
func SetCrushTunables ¶
func SetPoolProperty ¶
Types ¶
type CephBlockImage ¶
type CephBlockImage struct { Name string `json:"image"` Size uint64 `json:"size"` Format int `json:"format"` }
func CreateImage ¶
func ListImages ¶
func ListImages(context *clusterd.Context, clusterName, poolName string) ([]CephBlockImage, error)
type CephErasureCodeProfile ¶
type CephErasureCodeProfile struct { DataChunkCount uint `json:"k,string"` CodingChunkCount uint `json:"m,string"` Plugin string `json:"plugin"` Technique string `json:"technique"` FailureDomain string `json:"crush-failure-domain"` }
func GetErasureCodeProfileDetails ¶
func GetErasureCodeProfileDetails(context *clusterd.Context, clusterName, name string) (CephErasureCodeProfile, error)
type CephFilesystem ¶
type CephFilesystem struct { Name string `json:"name"` MetadataPool string `json:"metadata_pool"` MetadataPoolID int `json:"metadata_pool_id"` DataPools []string `json:"data_pools"` DataPoolIDs []int `json:"data_pool_ids"` }
func ListFilesystems ¶
func ListFilesystems(context *clusterd.Context, clusterName string) ([]CephFilesystem, error)
type CephFilesystemDetails ¶
func GetFilesystem ¶
type CephStatus ¶
type CephStatus struct { Health HealthStatus `json:"health"` FSID string `json:"fsid"` ElectionEpoch int `json:"election_epoch"` Quorum []int `json:"quorum"` QuorumNames []string `json:"quorum_names"` MonMap MonMap `json:"monmap"` OsdMap struct { OsdMap OsdMap `json:"osdmap"` } `json:"osdmap"` PgMap PgMap `json:"pgmap"` MgrMap MgrMap `json:"mgrmap"` }
type CephStoragePoolDetails ¶
type CephStoragePoolDetails struct { Name string `json:"pool"` Number int `json:"pool_id"` Size uint `json:"size"` ErasureCodeProfile string `json:"erasure_code_profile"` FailureDomain string }
func GetPoolDetails ¶
func GetPoolDetails(context *clusterd.Context, clusterName, name string) (CephStoragePoolDetails, error)
func ModelPoolToCephPool ¶ added in v0.6.0
func ModelPoolToCephPool(modelPool model.Pool) CephStoragePoolDetails
type CephStoragePoolStats ¶
type CephStoragePoolStats struct { Pools []struct { Name string `json:"name"` ID int `json:"id"` Stats struct { BytesUsed float64 `json:"bytes_used"` RawBytesUsed float64 `json:"raw_bytes_used"` MaxAvail float64 `json:"max_avail"` Objects float64 `json:"objects"` DirtyObjects float64 `json:"dirty"` ReadIO float64 `json:"rd"` ReadBytes float64 `json:"rd_bytes"` WriteIO float64 `json:"wr"` WriteBytes float64 `json:"wr_bytes"` } `json:"stats"` } `json:"pools"` }
func GetPoolStats ¶
func GetPoolStats(context *clusterd.Context, clusterName string) (*CephStoragePoolStats, error)
type CephStoragePoolSummary ¶
func ListPoolSummaries ¶
func ListPoolSummaries(context *clusterd.Context, clusterName string) ([]CephStoragePoolSummary, error)
type CephUsage ¶
type CheckMessage ¶
type CrushMap ¶ added in v0.6.0
type CrushMap struct { Devices []struct { ID int `json:"id"` Name string `json:"name"` Class string `json:"class"` } `json:"devices"` Types []struct { ID int `json:"type_id"` Name string `json:"name"` } `json:"types"` Buckets []struct { ID int `json:"id"` Name string `json:"name"` TypeID int `json:"type_id"` TypeName string `json:"type_name"` Weight int `json:"weight"` Alg string `json:"alg"` Hash string `json:"hash"` Items []struct { ID int `json:"id"` Weight int `json:"weight"` Pos int `json:"pos"` } `json:"items"` } Rules []struct { ID int `json:"rule_id"` Name string `json:"rule_name"` Ruleset int `json:"ruleset"` Type int `json:"type"` MinSize int `json:"min_size"` MaxSize int `json:"max_size"` Steps []struct { Operation string `json:"op"` Number int `json:"num"` Item int `json:"item"` ItemName string `json:"item_name"` Type string `json:"type"` } `json:"steps"` } Tunables struct { } `json:"tunables"` }
type HealthStatus ¶
type HealthStatus struct { Status string `json:"status"` Checks map[string]CheckMessage `json:"checks"` }
type MDSMap ¶
type MDSMap struct { FilesystemName string `json:"fs_name"` Enabled bool `json:"enabled"` Root int `json:"root"` TableServer int `json:"tableserver"` MaxMDS int `json:"max_mds"` In []int `json:"in"` Up map[string]int `json:"up"` MetadataPool int `json:"metadata_pool"` DataPools []int `json:"data_pools"` Failed []int `json:"failed"` Damaged []int `json:"damaged"` Stopped []int `json:"stopped"` Info map[string]MDSInfo `json:"info"` }
type MgrStandby ¶
type MonMap ¶
type MonMap struct { Epoch int `json:"epoch"` FSID string `json:"fsid"` CreatedTime string `json:"created"` ModifiedTime string `json:"modified"` Mons []MonMapEntry `json:"mons"` }
type MonMapEntry ¶
type MonMapEntry struct { Name string `json:"name"` Rank int `json:"rank"` Address string `json:"addr"` }
represents an entry in the monitor map
type MonStats ¶
type MonStats struct { Health struct { Status string `json:"status"` Checks map[string]CheckMessage `json:"checks"` } `json:"health"` Quorum []int `json:"quorum"` }
MonStats is a subset of fields on the response from the mon command "status". These fields are focused on monitor stats.
type MonStatusRequest ¶
type MonStatusRequest struct { Prefix string `json:"prefix"` Format string `json:"format"` ID int `json:"id"` Weight float32 `json:"weight"` Pool string `json:"pool"` Var string `json:"var"` Args []string `json:"args"` }
request to simplify deserialization of a test request
type MonStatusResponse ¶
type MonStatusResponse struct { Quorum []int `json:"quorum"` MonMap struct { Mons []MonMapEntry `json:"mons"` } `json:"monmap"` }
represents the response from a mon_status mon_command (subset of all available fields, only marshal ones we care about)
func GetMonStatus ¶
func GetMonStatus(context *clusterd.Context, clusterName string, debug bool) (MonStatusResponse, error)
calls mon_status mon_command
type MonTimeSkewStatus ¶
type MonTimeStatus ¶
type MonTimeStatus struct { Skew map[string]MonTimeSkewStatus `json:"time_skew_status"` Checks struct { Epoch int `json:"epoch"` Round int `json:"round"` RoundStatus string `json:"round_status"` } `json:"timechecks"` }
func GetMonTimeStatus ¶
func GetMonTimeStatus(context *clusterd.Context, clusterName string) (*MonTimeStatus, error)
type OSDDump ¶
type OSDPerfStats ¶
type OSDPerfStats struct { PerfInfo []struct { ID json.Number `json:"id"` Stats struct { CommitLatency json.Number `json:"commit_latency_ms"` ApplyLatency json.Number `json:"apply_latency_ms"` } `json:"perf_stats"` } `json:"osd_perf_infos"` }
func GetOSDPerfStats ¶
func GetOSDPerfStats(context *clusterd.Context, clusterName string) (*OSDPerfStats, error)
type OSDUsage ¶
type OSDUsage struct { OSDNodes []struct { Name string `json:"name"` CrushWeight json.Number `json:"crush_weight"` Depth json.Number `json:"depth"` Reweight json.Number `json:"reweight"` KB json.Number `json:"kb"` UsedKB json.Number `json:"kb_used"` AvailKB json.Number `json:"kb_avail"` Utilization json.Number `json:"utilization"` Variance json.Number `json:"var"` Pgs json.Number `json:"pgs"` } `json:"nodes"` Summary struct { TotalKB json.Number `json:"total_kb"` TotalUsedKB json.Number `json:"total_kb_used"` TotalAvailKB json.Number `json:"total_kb_avail"` AverageUtil json.Number `json:"average_utilization"` } `json:"summary"` }
type PgMap ¶
type PgMap struct { PgsByState []PgStateEntry `json:"pgs_by_state"` Version int `json:"version"` NumPgs int `json:"num_pgs"` DataBytes uint64 `json:"data_bytes"` UsedBytes uint64 `json:"bytes_used"` AvailableBytes uint64 `json:"bytes_avail"` TotalBytes uint64 `json:"bytes_total"` ReadBps uint64 `json:"read_bytes_sec"` WriteBps uint64 `json:"write_bytes_sec"` ReadOps uint64 `json:"read_op_per_sec"` WriteOps uint64 `json:"write_op_per_sec"` RecoveryBps uint64 `json:"recovering_bytes_per_sec"` RecoveryObjectsPerSec uint64 `json:"recovering_objects_per_sec"` RecoveryKeysPerSec uint64 `json:"recovering_keys_per_sec"` CacheFlushBps uint64 `json:"flush_bytes_sec"` CacheEvictBps uint64 `json:"evict_bytes_sec"` CachePromoteBps uint64 `json:"promote_op_per_sec"` }