Go bindings for Ceph
Go to file
Noah Watkins e57e53d585
Merge pull request #31 from Vicente-Cheng/minor-fixed-rbd-go
rbd: the length of args on create_v3 should be 3 instead of 2
2018-07-07 12:26:02 -07:00
cephfs repo: update new repo path 2015-08-31 07:34:42 -07:00
ci ci: set mon allow pool delete 2017-01-12 15:19:14 -08:00
rados Merge pull request #51 from nanjekyejoannah/add_go_vet 2018-07-07 11:12:38 -07:00
rbd rbd: add test cases about create image for rbd_create, rbd_create2, rbd_create3 2016-12-23 00:24:13 +08:00
.gitignore Add support for mon_command input buffer 2016-07-21 13:07:30 -07:00
.travis.yml Add go vet to Travis 2018-01-30 21:12:42 +03:00
Dockerfile Update Dockerfile to Go 1.7.1 and Ceph Jewel 2016-10-04 15:00:34 -07:00
LICENSE license: add MIT license 2014-11-27 10:53:04 -08:00
Makefile repo: update new repo path 2015-08-31 07:34:42 -07:00
README.md doc: update readme 2017-01-20 09:47:55 -08:00
doc.go repo: update new repo path 2015-08-31 07:34:42 -07:00
package_test.go run gofmt on all sources 2015-02-11 22:21:05 +01:00

README.md

go-ceph - Go bindings for Ceph APIs

Build Status Godoc license

Installation

go get github.com/ceph/go-ceph

The native RADOS library and development headers are expected to be installed.

Documentation

Detailed documentation is available at http://godoc.org/github.com/ceph/go-ceph.

Connecting to a cluster

Connect to a Ceph cluster using a configuration file located in the default search paths.

conn, _ := rados.NewConn()
conn.ReadDefaultConfigFile()
conn.Connect()

A connection can be shutdown by calling the Shutdown method on the connection object (e.g. conn.Shutdown()). There are also other methods for configuring the connection. Specific configuration options can be set:

conn.SetConfigOption("log_file", "/dev/null")

and command line options can also be used using the ParseCmdLineArgs method.

args := []string{ "--mon-host", "1.1.1.1" }
err := conn.ParseCmdLineArgs(args)

For other configuration options see the full documentation.

Object I/O

Object in RADOS can be written to and read from with through an interface very similar to a standard file I/O interface:

// open a pool handle
ioctx, err := conn.OpenIOContext("mypool")

// write some data
bytes_in := []byte("input data")
err = ioctx.Write("obj", bytes_in, 0)

// read the data back out
bytes_out := make([]byte, len(bytes_in))
n_out, err := ioctx.Read("obj", bytes_out, 0)

if bytes_in != bytes_out {
    fmt.Println("Output is not input!")
}

Pool maintenance

The list of pools in a cluster can be retreived using the ListPools method on the connection object. On a new cluster the following code snippet:

pools, _ := conn.ListPools()
fmt.Println(pools)

will produce the output [data metadata rbd], along with any other pools that might exist in your cluster. Pools can also be created and destroyed. The following creates a new, empty pool with default settings.

conn.MakePool("new_pool")

Deleting a pool is also easy. Call DeletePool(name string) on a connection object to delete a pool with the given name. The following will delete the pool named new_pool and remove all of the pool's data.

conn.DeletePool("new_pool")

Contributing

Contributions are welcome & greatly appreciated, every little bit helps. Make code changes via Github pull requests:

  • Fork the repo and create a topic branch for every feature/fix. Avoid making changes directly on master branch.
  • All incoming features should be accompanied with tests.
  • Make sure that you run go fmt before submitting a change set. Alternatively the Makefile has a flag for this, so you can call make fmt as well.
  • The integration tests can be run in a docker container, for this run:
make test-docker