shafreeck / cetcd

Cetcd is a C client library for etcd with full features support
Apache License 2.0
69 stars 39 forks source link
c etcd

Cetcd is a C client for etcd

License Gitter Stories in Ready wercker status

Table of Contents generated with DocToc

Status

cetcd is on active development. It aims to be used in production environment and to supply full features of etcd. Any issues or pull requests are welcome!

Features

Deps

cetcd use sds as a dynamic string utility. It is licensed in sds/LICENSE. sds is interaged in cetcd's source code, so you don't have to install it before.

yajl is a powerful json stream parsing libaray. We use the stream apis to parse response from cetcd. It is already integrated as a third-party dependency, so you are not necessary to install it before.

curl is required to issue HTTP requests in cetcd

Install

Install curl if needed on Ubuntu

apt-get install libcurl4-openssl-dev

or on CentOS

yum install libcurl-devel

then

 make
 make install

It default installs to /usr/local.

Use

 make install prefix=/path

to specify your custom path.

Link

Use -lcetcd to link the library

Examples

Usage

cetcd_array is an expandable dynamic array. It is used to pass etcd cluster addresses, and return cetcd response nodes

Create an array to store the etcd addresses

    cetcd_array addrs;

    cetcd_array_init(&addrs, 3);
    cetcd_array_append(&addrs, "127.0.0.1:2379");
    cetcd_array_append(&addrs, "127.0.0.1:2378");
    cetcd_array_append(&addrs, "127.0.0.1:2377");

cetcd_client is a context cetcd uses to issue requests, you should init it with etcd addresses

Init the cetcd_client

    cetcd_client cli;
    cetcd_client_init(&cli, &addrs);

Then you can issue an cetcd request which reply with an cetcd response

Set a key

    cetcd_response *resp;
    resp = cetcd_set(&cli, "/service/redis", "hello cetcd", 0);
    if(resp->err) {
        printf("error :%d, %s (%s)\n", resp->err->ecode, resp->err->message, resp->err->cause);
    }
    cetcd_response_release(resp);

Get a key

    cetcd_response *resp;
    resp = cetcd_get(&cli, "/service/redis");
    if(resp->err) {
        printf("error :%d, %s (%s)\n", resp->err->ecode, resp->err->message, resp->err->cause);
    }
    cetcd_response_release(resp);

List a directory

    cetcd_response *resp;
    resp = cetcd_lsdir(&cli, "/service", 1, 1);
    if(resp->err) {
        printf("error :%d, %s (%s)\n", resp->err->ecode, resp->err->message, resp->err->cause);
    }
    cetcd_response_print(resp);
    cetcd_response_release(resp);

Clean all resources

    cetcd_array_destory(&addrs);
    cetcd_client_destroy(&cli);

See examples/cetcdget.c for more detailes