Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/square/libcrange
The libcrange cluster metadata library.
https://github.com/square/libcrange
Last synced: 8 days ago
JSON representation
The libcrange cluster metadata library.
- Host: GitHub
- URL: https://github.com/square/libcrange
- Owner: square
- License: bsd-3-clause
- Created: 2013-08-21T20:47:25.000Z (about 11 years ago)
- Default Branch: master
- Last Pushed: 2018-12-17T17:57:42.000Z (almost 6 years ago)
- Last Synced: 2024-07-31T22:57:01.270Z (3 months ago)
- Language: C
- Homepage:
- Size: 323 KB
- Stars: 27
- Watchers: 17
- Forks: 15
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
libcrange
=========A library for parsing and generating range expressions.
## Description
A library for parsing and generating range expressions. libcrange for modules to add symbolic name lookup features as well as functions to retreive additional data.
##Requirements
### Red Hat / Scientific / CentOS
* apr apr-devel flex pcre pcre-devel sqlite sqlite-devel libyaml libyaml-devel perl-YAML-Syck perl perl-core perl-devel perl-libs python-devel### Ubuntu / Debian
* libapr1 libapr1-dev flex libpcre3 libpcre3-dev sqlite3 libsqlite3-dev libsqlite3-0 libyaml-0-2 libyaml-dev libyaml-syck-perl perl-base libperl5.14 libperl-dev## Range Syntax
### Simple ranges:
* node1,node2,node3,node4 == node1..node4 == node1..4
* node1000..1099 == node1000..99 # auto pads digits to the end of the range
* 1..100 # numeric only ranges
* foo1-2.domain.com == foo1.domain.com-foo2.domain.com # domain support
* 209.131.40.1-209.131.40.255 == 209.131.40.1-255 # IP ranges
### Clusters:
A cluster is a way to store node membership into groups. Depending on your backend module how this is stored may vary. In the case of the YAML module, a cluster is defined by the membership of the CLUSTER key
* %cluster101 == nodes defined in /var/range/cluster101.yaml - Default key CLUSTER
* %cluster101:ALL or %cluster101:FOO == nodes defined in a specific key of ks301/nodes.cf
* %%all == assuming %all is a lust of clusters, the additional % will expand the list of clusters to node list that is their membership
* *node == returns the cluster(s) that node is a member of
### Operatons:
* range1,range2 == union
* range1,-range2 == set difference
* range1,&range2 == intersection
* ^range1 == admins for the nodes in range1
* range1,-(range2,range3) == () can be used for grouping
* range1,&/regex/ # all nodes in range1 that match regex
* range1,-/regex/ # all nodes in range1 that do not match regex
### Advanced ranges:
* foo{1,3,5} == foo1,foo3,foo5
* %cluster30{1,3} == %cluster301,%cluster303
* %cluster301-7 == nodes in clusters cluster301 to cluster307
* %all:KEYS == all defined sections in cluster all
* %{%all} == expands all clusters in %all
* %all:dc1,-({f,k}s301-7) == names for clusters in dc1 except ks301-7,fs301-7
* %all:dc1,-|ks| == clusters in dc1, except those matching ks
### Functions:libcrange modules can define certain functions to look up data about hosts or clusters The yaml module for instance implements some of the following functions.
* has(KEY;value) - looks for a cluster that has a key with some certain value
* allclusters() - returns a range of all clusters
* * and get_clusters(node) - return the first cluster a node is a member of
* clusters(node) - return all clusters a node is a member of
* has(ENVIRONMENT; production) would return any clusters with the a key called ENVIRONMENT set to production
* mem(CLUSTER; foo.example.com) => which keys under CLUSTER is foo.example.com a member ofOther functions can be added via modules that provide useful insight into your environment
* vlan(host) - return vlan for this host
* dc(host) - return datacenter for this host
* drac(host) - might do an API call on backend to central host db to look up a drac IP for a host## Install
### Ubuntu
#### Build and install mdbm:
* sudo apt-get update
* sudo apt-get install --yes build-essential git
* sudo apt-get install --yes openssl libssl-dev libcppunit-dev libreadline-dev
* git clone https://github.com/yahoo/mdbm.git
* cd mdbm && sudo make install PREFIX=/usr
* cd /usr/lib && sudo ln ../lib64/libmdbm.so.4#### Build and install libcrange
* sudo apt-get install -qq libapr1 libapr1-dev flex libpcre3 libpcre3-dev sqlite3 libsqlite3-dev \
libsqlite3-0 libyaml-0-2 libyaml-dev libyaml-syck-perl perl-base libperl5.18 libperl-dev \
rubygems-integration ruby-ffi
* sudo apt-get install -qq automake autoconf m4 flex libfl-dev bison libbison-dev bison-doc libtool
* sudo apt-get install -qq python-pip python-dev libffi-dev
* sudo pip install cffi
* git clone https://github.com/square/libcrange.git
* cd libcrange/source && bash doit.sh && bash testit.sh && sudo make install