Skip to content

Commit

Permalink
csi: add rbd ls option
Browse files Browse the repository at this point in the history
This commit adds the ability to list RBD images.

Signed-off-by: Oded Viner <[email protected]>
  • Loading branch information
OdedViner committed Oct 28, 2024
1 parent e710bd2 commit 0e5c199
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 0 deletions.
6 changes: 6 additions & 0 deletions .github/workflows/go-test-config/action.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,12 @@ runs:
tests/github-action-helper.sh create_stale_subvolume
subVol=$(kubectl rook-ceph ${NS_OPT} subvolume ls --stale | awk '{print $2}' | grep csi-vol)
kubectl rook_ceph ${NS_OPT} subvolume delete myfs $subVol
- name: Get Rbd list
shell: bash --noprofile --norc -eo pipefail -x {0}
run: |
set -ex
kubectl rook-ceph ${NS_OPT} rbd ls
- name: Get mon endpoints
shell: bash --noprofile --norc -eo pipefail -x {0}
Expand Down
15 changes: 15 additions & 0 deletions cmd/commands/rbd.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@ limitations under the License.
package command

import (
rbd "github.com/rook/kubectl-rook-ceph/pkg/rbd"

"github.com/rook/kubectl-rook-ceph/pkg/exec"
"github.com/rook/kubectl-rook-ceph/pkg/logging"
"github.com/spf13/cobra"
Expand All @@ -38,3 +40,16 @@ var RbdCmd = &cobra.Command{
}
},
}

var listCmdRbd = &cobra.Command{
Use: "ls",
Short: "Print the list of subvolumes.",
Run: func(cmd *cobra.Command, args []string) {
ctx := cmd.Context()
rbd.List(ctx, clientSets, cephClusterNamespace)
},
}

func init() {
RbdCmd.AddCommand(listCmdRbd)
}
57 changes: 57 additions & 0 deletions pkg/rbd/rbd.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package rbd

import (
"context"
"fmt"
"os"
"strings"
"text/tabwriter"

"github.com/rook/kubectl-rook-ceph/pkg/exec"
"github.com/rook/kubectl-rook-ceph/pkg/k8sutil"
"github.com/rook/kubectl-rook-ceph/pkg/logging"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// List retrieves and displays the Ceph block pools and their associated images.
func List(ctx context.Context, clientsets *k8sutil.Clientsets, clusterNamespace string) {
blockPoolList, err := clientsets.Rook.CephV1().CephBlockPools(clusterNamespace).List(ctx, v1.ListOptions{})
if err != nil {
logging.Fatal(err)
}
// var blockPoolNames []string
var blockPoolNames map[string]string
blockPoolNames = make(map[string]string)

for _, blockPool := range blockPoolList.Items {
// blockPoolNames = append(blockPoolNames, blockPool.Name)
blockPoolNames[blockPool.Name] = "--"
}

cmd := "rbd"
for poolName, _ := range blockPoolNames {
args := []string{"ls", "--pool=" + poolName}
list, err := exec.RunCommandInOperatorPod(ctx, clientsets, cmd, args, clusterNamespace, clusterNamespace, true)
if err == nil && len(list) > 0 {
blockPoolNames[poolName] = strings.ReplaceAll(list, "\n", "")
}
}
PrintBlockPoolNames(blockPoolNames)
}

// PrintBlockPoolNames takes a map of block pool names to image names and prints them in a tabular format.
func PrintBlockPoolNames(blockPoolNames map[string]string) {
writer := tabwriter.NewWriter(os.Stdout, 0, 0, 2, ' ', 0)

// Print header with column names
fmt.Fprintln(writer, "poolName\timageName\t")
fmt.Fprintln(writer, "--------\t---------\t")

// Print each row from the map
for poolName, imageName := range blockPoolNames {
fmt.Fprintf(writer, "%s\t%s\t\n", poolName, imageName)
}

// Flush the writer
writer.Flush()
}

0 comments on commit 0e5c199

Please sign in to comment.