consul-fs 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +32 -0
- data/bin/consul-fs +8 -0
- data/consul-fs.gemspec +29 -0
- data/lib/consul/fs.rb +46 -0
- metadata +78 -0
    
        checksums.yaml
    ADDED
    
    | @@ -0,0 +1,7 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            SHA1:
         | 
| 3 | 
            +
              metadata.gz: 2113b5a28d7f5250e4f85479ba646e4aa46bdd45
         | 
| 4 | 
            +
              data.tar.gz: 950efd79ce569f75b43671cf17b8b9c8ba2d47d8
         | 
| 5 | 
            +
            SHA512:
         | 
| 6 | 
            +
              metadata.gz: 95a9a28fe595e2f9a70db4d0a34dab19fe0e9f88a2a1315358671acc3b1af413c54b8e39d6ec3c444efce23f7280b171fae3268991144806f96d0bdc75088fe2
         | 
| 7 | 
            +
              data.tar.gz: ab0a5832485961a49b42b59094eb9ad6793d1c454c30879f0ec330dbfdfb6e6bf016964462e1ade9d6f25ffef173087f7d6f8fe42e01998fa5be8c59d0e935af
         | 
    
        data/README.md
    ADDED
    
    | @@ -0,0 +1,32 @@ | |
| 1 | 
            +
            Consul FS
         | 
| 2 | 
            +
            =========
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            Proof-of-concept fuse adapter for Consul KV store. Allows you to browse the
         | 
| 5 | 
            +
            store as a filesystem.
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            Only works on linux.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                apt-get install libfuse-dev
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                gem install consul-fs
         | 
| 12 | 
            +
                mkdir consul-kv
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                consul-fs consul-kv
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            That mounts a fuse system in the `consul-kv` directory.
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                > curl -X PUT --data "hello" localhost:8500/v1/kv/one
         | 
| 19 | 
            +
                > curl -X PUT --data "world" localhost:8500/v1/kv/two
         | 
| 20 | 
            +
                > curl -X PUT --data "!!!" localhost:8500/v1/kv/sub/three
         | 
| 21 | 
            +
                > ls consul-kv
         | 
| 22 | 
            +
                sub/ one two
         | 
| 23 | 
            +
                > ls consul-kv/sub
         | 
| 24 | 
            +
                three
         | 
| 25 | 
            +
                > cat consul-kv/one && echo
         | 
| 26 | 
            +
                hello
         | 
| 27 | 
            +
             | 
| 28 | 
            +
             | 
| 29 | 
            +
            Development
         | 
| 30 | 
            +
            -----------
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            A `Vagrantfile` is provided, so just `vagrant up` and you are on your way.
         | 
    
        data/bin/consul-fs
    ADDED
    
    
    
        data/consul-fs.gemspec
    ADDED
    
    | @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            # -*- encoding: utf-8 -*-
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Gem::Specification.new do |gem|
         | 
| 4 | 
            +
              gem.authors       = ["Xavier Shay"]
         | 
| 5 | 
            +
              gem.email         = ["contact@xaviershay.com"]
         | 
| 6 | 
            +
              gem.description   =
         | 
| 7 | 
            +
                %q{Mount the Consul KV store as a filesystem}
         | 
| 8 | 
            +
              gem.summary       = %q{
         | 
| 9 | 
            +
                Fuse adapter for Consul KV store.
         | 
| 10 | 
            +
              }
         | 
| 11 | 
            +
              gem.homepage      = "http://github.com/xaviershay/consul-fs"
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              gem.executables   = []
         | 
| 14 | 
            +
              gem.required_ruby_version = '>= 2.1.2'
         | 
| 15 | 
            +
              gem.files         = Dir.glob("{spec,lib}/**/*.rb") + %w(
         | 
| 16 | 
            +
                                    README.md
         | 
| 17 | 
            +
                                    consul-fs.gemspec
         | 
| 18 | 
            +
                                  )
         | 
| 19 | 
            +
              gem.test_files    = Dir.glob("spec/**/*.rb")
         | 
| 20 | 
            +
              gem.name          = "consul-fs"
         | 
| 21 | 
            +
              gem.require_paths = ["lib"]
         | 
| 22 | 
            +
              gem.bindir        = "bin"
         | 
| 23 | 
            +
              gem.executables  << "consul-fs"
         | 
| 24 | 
            +
              gem.license       = "Apache 2.0"
         | 
| 25 | 
            +
              gem.version       = '0.1.0'
         | 
| 26 | 
            +
              gem.has_rdoc      = false
         | 
| 27 | 
            +
              gem.add_dependency 'rfusefs'
         | 
| 28 | 
            +
              gem.add_dependency 'consul-client'
         | 
| 29 | 
            +
            end
         | 
    
        data/lib/consul/fs.rb
    ADDED
    
    | @@ -0,0 +1,46 @@ | |
| 1 | 
            +
            require 'rfusefs'
         | 
| 2 | 
            +
            require 'consul/client'
         | 
| 3 | 
            +
            require 'base64'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module Consul
         | 
| 6 | 
            +
              module FS
         | 
| 7 | 
            +
                class Dir
         | 
| 8 | 
            +
                  attr_reader :consul
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  def initialize
         | 
| 11 | 
            +
                    @consul = Consul::Client.v1.http
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  def contents(path)
         | 
| 15 | 
            +
                    path += "/" unless path.end_with?("/")
         | 
| 16 | 
            +
                    consul.get("/kv#{path}?recurse&separator=/&keys")
         | 
| 17 | 
            +
                      .map {|x| x[path.length-1..-1] }
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  def file?(path)
         | 
| 21 | 
            +
                    consul.get("/kv#{path}?keys")
         | 
| 22 | 
            +
                    true
         | 
| 23 | 
            +
                  rescue Consul::Client::ResponseException
         | 
| 24 | 
            +
                    false
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  def directory?(path)
         | 
| 28 | 
            +
                    consul.get("/kv#{path}?keys").any? {|x| x.include?("#{path[1..-1]}/") }
         | 
| 29 | 
            +
                  rescue Consul::Client::ResponseException
         | 
| 30 | 
            +
                    false
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  def read_file(path)
         | 
| 34 | 
            +
                    Base64.decode64(consul.get("/kv#{path}")[0]["Value"])
         | 
| 35 | 
            +
                  rescue Consul::Client::ResponseException
         | 
| 36 | 
            +
                    ""
         | 
| 37 | 
            +
                  end
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                def self.start
         | 
| 41 | 
            +
                  FuseFS.main do |options|
         | 
| 42 | 
            +
                    Dir.new
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
            end
         | 
    
        metadata
    ADDED
    
    | @@ -0,0 +1,78 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: consul-fs
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.1.0
         | 
| 5 | 
            +
            platform: ruby
         | 
| 6 | 
            +
            authors:
         | 
| 7 | 
            +
            - Xavier Shay
         | 
| 8 | 
            +
            autorequire: 
         | 
| 9 | 
            +
            bindir: bin
         | 
| 10 | 
            +
            cert_chain: []
         | 
| 11 | 
            +
            date: 2014-08-18 00:00:00.000000000 Z
         | 
| 12 | 
            +
            dependencies:
         | 
| 13 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            +
              name: rfusefs
         | 
| 15 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 | 
            +
                requirements:
         | 
| 17 | 
            +
                - - ">="
         | 
| 18 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            +
                    version: '0'
         | 
| 20 | 
            +
              type: :runtime
         | 
| 21 | 
            +
              prerelease: false
         | 
| 22 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 | 
            +
                requirements:
         | 
| 24 | 
            +
                - - ">="
         | 
| 25 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            +
                    version: '0'
         | 
| 27 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            +
              name: consul-client
         | 
| 29 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 | 
            +
                requirements:
         | 
| 31 | 
            +
                - - ">="
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            +
                    version: '0'
         | 
| 34 | 
            +
              type: :runtime
         | 
| 35 | 
            +
              prerelease: false
         | 
| 36 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 | 
            +
                requirements:
         | 
| 38 | 
            +
                - - ">="
         | 
| 39 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            +
                    version: '0'
         | 
| 41 | 
            +
            description: Mount the Consul KV store as a filesystem
         | 
| 42 | 
            +
            email:
         | 
| 43 | 
            +
            - contact@xaviershay.com
         | 
| 44 | 
            +
            executables:
         | 
| 45 | 
            +
            - consul-fs
         | 
| 46 | 
            +
            extensions: []
         | 
| 47 | 
            +
            extra_rdoc_files: []
         | 
| 48 | 
            +
            files:
         | 
| 49 | 
            +
            - README.md
         | 
| 50 | 
            +
            - bin/consul-fs
         | 
| 51 | 
            +
            - consul-fs.gemspec
         | 
| 52 | 
            +
            - lib/consul/fs.rb
         | 
| 53 | 
            +
            homepage: http://github.com/xaviershay/consul-fs
         | 
| 54 | 
            +
            licenses:
         | 
| 55 | 
            +
            - Apache 2.0
         | 
| 56 | 
            +
            metadata: {}
         | 
| 57 | 
            +
            post_install_message: 
         | 
| 58 | 
            +
            rdoc_options: []
         | 
| 59 | 
            +
            require_paths:
         | 
| 60 | 
            +
            - lib
         | 
| 61 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 62 | 
            +
              requirements:
         | 
| 63 | 
            +
              - - ">="
         | 
| 64 | 
            +
                - !ruby/object:Gem::Version
         | 
| 65 | 
            +
                  version: 2.1.2
         | 
| 66 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 67 | 
            +
              requirements:
         | 
| 68 | 
            +
              - - ">="
         | 
| 69 | 
            +
                - !ruby/object:Gem::Version
         | 
| 70 | 
            +
                  version: '0'
         | 
| 71 | 
            +
            requirements: []
         | 
| 72 | 
            +
            rubyforge_project: 
         | 
| 73 | 
            +
            rubygems_version: 2.2.2
         | 
| 74 | 
            +
            signing_key: 
         | 
| 75 | 
            +
            specification_version: 4
         | 
| 76 | 
            +
            summary: Fuse adapter for Consul KV store.
         | 
| 77 | 
            +
            test_files: []
         | 
| 78 | 
            +
            has_rdoc: false
         |