Go bindings for Ceph
Go to file
Niels de Vos 72c262c493 Docker: prevent blocking prompt with add-apt-repository
A blocking message is shown when running 'make test-docker':

    STEP 6: RUN add-apt-repository ppa:gophers/archive
     Co-installable packages of Go 1.4 through 1.11 for supported versions
    of Ubuntu -- currently Trusty, Xenial, Bionic, Cosmic and Disco.

    Installing golang-1.X installs the latest point release of Go 1.X. I add
    the odd patch to keep older versions of Go building with new toolchains,
    but I do *not* make any effort to backport security fixes to Go releases
    that are not supported by upstream. Buyer beware!

    I aim to start uploading a release when its first beta is released, so
    e.g. I uploaded a golang-1.7  package after 1.7 beta 1 was released. But
    I don't always keep up with this.

    So that these packages can be co-installable, they do not install
    anything to /usr/bin. Once you have installed the golang-1.X package,
    you will need to add /usr/lib/go-1.X/bin (or maybe /usr/lib/go-tip/bin)
    to your $PATH, or you can just invoke /usr/lib/go-1.X/bin/go directly.

    The packages all Recommend: appropriate versions of the runtime race
    detector support on amd64, which are also built in this PPA
    (eventually).
     More info: https://launchpad.net/~gophers/+archive/ubuntu/archive
    Press [ENTER] to continue or ctrl-c to cancel adding it

By passing the -y switch to add-apt-repository, this message is ignored
and the process continues.

Signed-off-by: Niels de Vos <ndevos@redhat.com>
2019-11-04 13:18:19 -05:00
cephfs cephfs: modified guard clauses + golint'd 2018-10-11 11:36:26 -07:00
rados Add GetPoolByID() for calling rados_pool_reverse_lookup() 2019-11-01 14:40:47 -04:00
rbd Drop unnecessary typecasts 2018-09-18 11:12:32 +02:00
.gitignore ci: update to luminous and dockerized setup 2018-07-07 13:20:41 -07:00
.travis.yml travis: add ceph nautilus to the test matrix 2019-11-04 13:15:30 -05:00
Dockerfile Docker: prevent blocking prompt with add-apt-repository 2019-11-04 13:18:19 -05:00
LICENSE license: add MIT license 2014-11-27 10:53:04 -08:00
Makefile makefile: rebuild test container as needed 2019-11-04 11:04:15 -05:00
README.md cephfs: add unmount, release, chmod, chown, etc 2018-10-11 11:09:16 -07:00
doc.go repo: update new repo path 2015-08-31 07:34:42 -07:00
entrypoint.sh tests: generate html coverage report 2019-11-04 11:04:15 -05:00
micro-osd.sh test: update micro-osd.sh to support nautilus 2019-11-04 13:15:30 -05: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.

On debian systems (apt):

libcephfs-dev librbd-dev librados-dev

On rpm based systems (dnf, yum, etc):

libcephfs-devel librbd-devel librados-devel

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
bytesIn := []byte("input data")
err = ioctx.Write("obj", bytesIn, 0)

// read the data back out
bytesOut := make([]byte, len(bytesIn))
_, err := ioctx.Read("obj", bytesOut, 0)

if !bytes.Equal(bytesIn, bytesOut) {
    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")

Development

docker run --rm -it --net=host \
  --device /dev/fuse --cap-add SYS_ADMIN --security-opt apparmor:unconfined \
  -v ${PWD}:/go/src/github.com/ceph/go-ceph:z \
  -v /home/nwatkins/src/ceph/build:/home/nwatkins/src/ceph/build:z \
  -e CEPH_CONF=/home/nwatkins/src/ceph/build/ceph.conf \
  ceph-golang

Run against a vstart.sh cluster without installing Ceph:

export CGO_CPPFLAGS="-I/ceph/src/include"
export CGO_LDFLAGS="-L/ceph/build/lib"
go build

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