Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions microceph/ceph/ceph_exporter.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package ceph

import (
"fmt"
"path/filepath"

"github.com/canonical/lxd/shared/logger"
)

func bootstrapCephExporter(hostname string, path string) error {
args := []string{
"auth",
"get-or-create",
fmt.Sprintf("client.ceph-exporter.%s", hostname),
"mon", "profile ceph-exporter",
"-o", filepath.Join(path, "keyring"),
}

_, err := cephRun(args...)
if err != nil {
logger.Errorf("failed to bootstrap ceph-exporter daemon: %s", err.Error())
return err
}

return nil
}
11 changes: 6 additions & 5 deletions microceph/ceph/services_placement.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,12 @@ type PlacementIntf interface {

func GetServicePlacementTable() map[string](PlacementIntf) {
return map[string](PlacementIntf){
"mon": &MonServicePlacement{"mon"},
"mgr": &GenericServicePlacement{"mgr"},
"mds": &GenericServicePlacement{"mds"},
"rgw": &RgwServicePlacement{},
"rbd-mirror": &ClientServicePlacement{"rbd-mirror"},
"mon": &MonServicePlacement{"mon"},
"mgr": &GenericServicePlacement{"mgr"},
"mds": &GenericServicePlacement{"mds"},
"rgw": &RgwServicePlacement{},
"rbd-mirror": &ClientServicePlacement{"rbd-mirror"},
"ceph-exporter": &ClientServicePlacement{"ceph-exporter"},
}
}

Expand Down
9 changes: 5 additions & 4 deletions microceph/ceph/services_placement_generic.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,11 @@ import (
// Maps the addService function to respective services.
func GetServiceKeyringTable() map[string](func(string, string) error) {
return map[string](func(string, string) error){
"mon": joinMon,
"mgr": bootstrapMgr,
"mds": bootstrapMds,
"rbd-mirror": bootstrapRbdMirror,
"mon": joinMon,
"mgr": bootstrapMgr,
"mds": bootstrapMds,
"rbd-mirror": bootstrapRbdMirror,
"ceph-exporter": bootstrapCephExporter,
// Add more services here, for using the generic Interface implementation.
}
}
Expand Down
2 changes: 2 additions & 0 deletions microceph/cmd/microceph/enable.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,14 @@ func (c *cmdEnable) Command() *cobra.Command {
enableMgrCmd := cmdEnableMGR{common: c.common}
enableMdsCmd := cmdEnableMDS{common: c.common}
enableRbdMirrorCmd := cmdEnableRBDMirror{common: c.common}
enableCephExporterCmd := cmdEnableCephExporter{common: c.common}

cmd.AddCommand(enableRGWCmd.Command())
cmd.AddCommand(enableMonCmd.Command())
cmd.AddCommand(enableMgrCmd.Command())
cmd.AddCommand(enableMdsCmd.Command())
cmd.AddCommand(enableRbdMirrorCmd.Command())
cmd.AddCommand(enableCephExporterCmd.Command())

// Workaround for subcommand usage errors. See: https://github.com/spf13/cobra/issues/706
cmd.Args = cobra.NoArgs
Expand Down
54 changes: 54 additions & 0 deletions microceph/cmd/microceph/enable_ceph_exporter.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package main

import (
"context"

"github.com/canonical/microcluster/v2/microcluster"
"github.com/spf13/cobra"

"github.com/canonical/microceph/microceph/api/types"
"github.com/canonical/microceph/microceph/client"
)

type cmdEnableCephExporter struct {
common *CmdControl
wait bool
flagTarget string
}

func (c *cmdEnableCephExporter) Command() *cobra.Command {
cmd := &cobra.Command{
Use: "ceph-exporter [--target <server>] [--wait <bool>]",
Short: "Enable the ceph exporter service on the --target server (default: this server)",
RunE: c.Run,
}
cmd.PersistentFlags().StringVar(&c.flagTarget, "target", "", "Server hostname (default: this server)")
cmd.Flags().BoolVar(&c.wait, "wait", true, "Wait for ceph-exporter service to be up.")
return cmd
}

// Run handles the enable mon command.
func (c *cmdEnableCephExporter) Run(cmd *cobra.Command, args []string) error {
m, err := microcluster.App(microcluster.Args{StateDir: c.common.FlagStateDir})
if err != nil {
return err
}

cli, err := m.LocalClient()
if err != nil {
return err
}
cli = cli.UseTarget(c.flagTarget)
req := &types.EnableService{
Name: "ceph-exporter",
Wait: c.wait,
Payload: "",
}

err = client.SendServicePlacementReq(context.Background(), cli, req, c.flagTarget)
if err != nil {
return err
}

return nil
}
16 changes: 16 additions & 0 deletions snap/snapcraft.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,11 @@ description: |-

confinement: strict

package-repositories:
- type: apt
ppa: lmlogiudice/ceph-1921-noble
priority: always

plugs:
load-rbd:
interface: kernel-module-load
Expand Down Expand Up @@ -132,6 +137,16 @@ apps:
- network
- network-bind
- process-control
"ceph-exporter":
command: commands/ceph-exporter.start
daemon: simple
install-mode: disable
after:
- daemon
plugs:
- network
- network-bind
- process-control
# Commands
ceph:
command: commands/ceph
Expand Down Expand Up @@ -198,6 +213,7 @@ parts:
- ceph-osd
- radosgw
- rbd-mirror
- ceph-exporter
# Utilities
- coreutils
- uuid-runtime
Expand Down
7 changes: 7 additions & 0 deletions snapcraft/commands/ceph-exporter.start
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#!/bin/bash

. "${SNAP}/commands/common"

limits

exec ceph-exporter -f --cluster ceph --id "ceph-exporter.$(hostname)"
Loading