Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/foostan/fileconsul
Sharing files in a consul cluster.
https://github.com/foostan/fileconsul
Last synced: about 1 month ago
JSON representation
Sharing files in a consul cluster.
- Host: GitHub
- URL: https://github.com/foostan/fileconsul
- Owner: foostan
- License: mit
- Created: 2014-09-02T15:13:01.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2014-09-29T16:38:56.000Z (about 10 years ago)
- Last Synced: 2024-11-05T03:37:10.997Z (about 1 month ago)
- Language: Go
- Homepage:
- Size: 3.94 MB
- Stars: 32
- Watchers: 4
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-consul - fileconsul: Share files stored in a consul cluster
README
# Fileconsul
[ ![Download](https://api.bintray.com/packages/foostan/fileconsul/fileconsul/images/download.png) ](https://bintray.com/foostan/fileconsul/fileconsul/_latestVersion)Fileconsul is sharing files(configuration file, Service/Check definition scripts, handler scripts and more) in a consul cluster.
## Usage
Run `fileconsul -h` to see the usage help:```
$ fileconsul -h
NAME:
fileconsul - Sharing files in a consul cluster.USAGE:
fileconsul [global options] command [command options] [arguments...]VERSION:
0.1.0COMMANDS:
status Show status of local files
pull Pull files from a consul cluster
push Push file to a consul cluster
help, h Shows a list of commands or help for one commandGLOBAL OPTIONS:
--version, -v print the version
--help, -h show help
```### Status Command
Run `fileconsul status -h` to see the usage help:```
$ fileconsul status -h
NAME:
status - Show status of local filesUSAGE:
command status [command options] [arguments...]DESCRIPTION:
Show the difference between local files and remote files that is stored in K/V Store of a consul cluster.OPTIONS:
--addr 'localhost:8500' consul HTTP API address with port
--dc 'dc1' consul datacenter, uses local if blank
--prefix 'fileconsul' reading file status from Consul's K/V store with the given prefix
--basepath '.' base directory path of target files
```### Pull Command
Run `fileconsul pull -h` to see the usage help:```
$ fileconsul pull -h
NAME:
pull - Pull files from a consul clusterUSAGE:
command pull [command options] [arguments...]DESCRIPTION:
Pull remote files from K/V Store of a consul cluster.OPTIONS:
--addr 'localhost:8500' consul HTTP API address with port
--dc 'dc1' consul datacenter, uses local if blank
--prefix 'fileconsul' reading file status from Consul's K/V store with the given prefix
--basepath '.' base directory path of target files
```### Push Command
Run `fileconsul push -h` to see the usage help:```
$ fileconsul push -h
NAME:
push - Push file to a consul clusterUSAGE:
command push [command options] [arguments...]DESCRIPTION:
Push remote files to K/V Store of a consul cluster.OPTIONS:
--addr 'localhost:8500' consul HTTP API address with port
--dc 'dc1' consul datacenter, uses local if blank
--prefix 'fileconsul' reading file status from Consul's K/V store with the given prefix
--basepath '.' base directory path of target files
```## Example
Use the demo environment for fileconsul
### Setup the demo environment used by Docker
```
$ git clone https://github.com/foostan/fileconsul.git
$ cd fileconsul/demo
$ docker build -t fileconsul .
```### Run containers and a consul agent
#### Consul server```
$ docker run -h server -i -t fileconsul
root@server:/# consul agent -data-dir=/tmp/consul -server -bootstrap-expect 1 &
==> WARNING: BootstrapExpect Mode is specified as 1; this is the same as Bootstrap mode.
==> WARNING: Bootstrap mode enabled! Do not enable unless necessary
==> WARNING: It is highly recommended to set GOMAXPROCS higher than 1
==> Starting Consul agent...
==> Starting Consul agent RPC...
==> Consul agent running!
Node name: 'server'
Datacenter: 'dc1'
Server: true (bootstrap: true)
Client Addr: 127.0.0.1 (HTTP: 8500, DNS: 8600, RPC: 8400)
Cluster Addr: 172.17.0.6 (LAN: 8301, WAN: 8302)
Gossip encrypt: false, RPC-TLS: false, TLS-Incoming: false--- omitted below ---
```#### Consul client
```
$ docker run -h client -i -t fileconsul
root@client:/# consul agent -data-dir=/tmp/consul -join 172.17.0.6 &
==> WARNING: It is highly recommended to set GOMAXPROCS higher than 1
==> Starting Consul agent...
==> Starting Consul agent RPC...
==> Joining cluster...
Join completed. Synced with 1 initial agents
==> Consul agent running!
Node name: 'client'
Datacenter: 'dc1'
Server: false (bootstrap: false)
Client Addr: 127.0.0.1 (HTTP: 8500, DNS: 8600, RPC: 8400)
Cluster Addr: 172.17.0.5 (LAN: 8301, WAN: 8302)
Gossip encrypt: false, RPC-TLS: false, TLS-Incoming: false--- omitted below ---
```### Use fileconsul
#### Check status and push on the consul server
```
root@server:/# cd /consul/share/
root@server:/consul/share# fileconsul status
Changes to be pushed:
(use "fileconsul push [command options]" to synchronize local files)
add remote file: bin/ntp
add remote file: bin/apache2
add remote file: bin/loadavg
add remote file: config/service/apache2.json
add remote file: config/service/ntp.json
add remote file: config/template/server/check_loadavg.json
add remote file: config/template/server/service_apache2.json
add remote file: config/template/server/agent_server.json
add remote file: config/template/server/service_ntp.json
add remote file: config/template/client/check_loadavg.json
add remote file: config/template/client/agent_client.json
add remote file: config/template/client/service_ntp.json
add remote file: config/check/loadavg.json
root@server:/consul/share# fileconsul push
push new file: bin/ntp
push new file: bin/apache2
push new file: bin/loadavg
push new file: config/service/apache2.json
push new file: config/service/ntp.json
push new file: config/template/server/check_loadavg.json
push new file: config/template/server/service_apache2.json
push new file: config/template/server/agent_server.json
push new file: config/template/server/service_ntp.json
push new file: config/template/client/check_loadavg.json
push new file: config/template/client/agent_client.json
push new file: config/template/client/service_ntp.json
push new file: config/check/loadavg.json
```#### Edit a file and push on the consul client
```
root@server:/# cd /consul/share/
root@client:/consul/share# vi bin/apache2 # edit a file
root@client:/consul/share# fileconsul status
Changes to be pushed:
(use "fileconsul push [command options]" to synchronize local files)
modify remote file: bin/apache2
Changes to be pulled:
(use "fileconsul pull [command options]" to synchronize remote files)
modify local file: bin/apache2
root@client:/consul/share# fileconsul push
push modified file: bin/apache2
```#### Check status and pull on the consul server
```
root@server:/consul/share# fileconsul status
Changes to be pushed:
(use "fileconsul push [command options]" to synchronize local files)
modify remote file: bin/apache2
Changes to be pulled:
(use "fileconsul pull [command options]" to synchronize remote files)
modify local file: bin/apache2
root@server:/consul/share# fileconsul pull
Synchronize remote files:
modified: bin/apache2
Already up-to-date.
```## Contributing
1. Fork it ( https://github.com/[my-github-username]/fileconsul/fork )
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request