os-brick-rbd

module
v1.0.13 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 31, 2022 License: Apache-2.0

README

golang-os-brick

Implement a golang library for managing local volume attaches, refer to openstack os-brick.

Demo

  • 调用 openstack go gophercloud 创建一个volume
  • 调用 getConnectionInfo 获取 volume 的初始化信息
  • 有了信息之后就执行连接卷、卸载卷等操作
package main

import (
        "fmt"
        "github.com/gophercloud/gophercloud"
        "github.com/gophercloud/gophercloud/openstack"
        "github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions"
        "github.com/gophercloud/gophercloud/openstack/blockstorage/v3/volumes"
        "github.com/fightdou/os-brick-rbd/connectors"
        "time"
)

func getConnectionInfo(blockstorageClient *gophercloud.ServiceClient, volumeID string) map[string]interface{} {
        options := &volumeactions.InitializeConnectionOpts{}
        connInfo := volumeactions.InitializeConnection(blockstorageClient, volumeID, options)
        res, _ := connInfo.Extract()
        return res
}

func main() {
        opts := gophercloud.AuthOptions{
                IdentityEndpoint: "http://keystone.openstack.svc.cluster.local",
                Username:         "admin",
                Password:         "password",
                TenantName:       "admin",
                DomainName:       "Default",
        }

        provider, err := openstack.AuthenticatedClient(opts)
        if err != nil {
                fmt.Println(err)
        }
        opt := gophercloud.EndpointOpts{Region: "RegionOne"}

        blockstorageClient, err := openstack.NewBlockStorageV3(provider, opt)
        if err != nil {
                fmt.Println(err)
        }

        volume_opts := &volumes.CreateOpts{
                Name:             "os-brick1",
                Size:             1,
                AvailabilityZone: "nova",
        }
        _, err = volumes.Create(blockstorageClient, volume_opts).Extract()

        time.Sleep(5 * time.Second)

        allPages, err := volumes.List(blockstorageClient, &volumes.ListOpts{Name: "os-brick1"}).AllPages()
        actual, err := volumes.ExtractVolumes(allPages)
        var volumeId string

        for _, volume := range actual {
                if volume.Name == "os-brick1" {
                        volumeId = volume.ID
                }
        }

        err = volumeactions.Attach(blockstorageClient, volumeId, &volumeactions.AttachOpts{
                MountPoint: "None",
                HostName:   "None",
        }).ExtractErr()

        if err != nil {
                fmt.Println(err)
        }
        result := getConnectionInfo(blockstorageClient, volumeId)
        protocol := result["driver_volume_type"]
        strProtocol := fmt.Sprint(protocol)
        // 连接卷
        conn := connectors.NewConnector(strProtocol, result)
        conn.ConnectVolume()
        // 卸载卷
        conn.DisConnectVolume()
}


执行结果

openstack volume list
+--------------------------------------+--------+-----------+------+------------------------------+
| ID                                   | Name   | Status    | Size | Attached to                  |
+--------------------------------------+--------+-----------+------+------------------------------+
| 002e5f6f-6daf-4f58-9b82-69c598c9da34 | brick1 | in-use    |    1 | Attached to None on None     |
+--------------------------------------+--------+-----------+------+------------------------------+

lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
rbd0   251:0    0  256M  0 disk /var/lib/kubelet/pods/a40baddd-1672-4f17-ba65-45693c4482dd/volumes/kubernetes.io~csi/pvc-01c42bd3-a46a-4b08-97f1-4cde7e32729c/mount
rbd1   251:16   0    5G  0 disk /var/lib/kubelet/pods/05687bec-854a-40f0-9a4f-d79c4a277157/volumes/kubernetes.io~csi/pvc-978da417-53e4-42e0-82d8-84b22615d4fc/mount
rbd2   251:32   0    1G  0 disk

Directories

Path Synopsis
pkg

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL