stacksondeck 0.0.1 → 1.0.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 +4 -4
 - data/.gitignore +2 -0
 - data/Gemfile +1 -0
 - data/Rakefile +1 -1
 - data/Readme.md +29 -3
 - data/VERSION +1 -1
 - data/lib/stacksondeck/app.rb +141 -0
 - data/lib/stacksondeck/main.rb +72 -5
 - data/lib/stacksondeck/metadata.rb +1 -1
 - data/lib/stacksondeck/mjolnir.rb +77 -0
 - data/stacksondeck.gemspec +4 -0
 - metadata +62 -5
 - data/lib/stacksondeck/helpers.rb +0 -28
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: eaba33fcc27c4639f0795e308e59f00e995b3220
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: ba4961ed10eac27f86da17fbe529982006fdafff
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 06056d91ffa4d8204c12a25ac40de9f95e33719b1ee78fe74b4f6b660aa035e01f72313b8bcbb5e4d30011210896983757368a7270e86913c865b9182b7812e9
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 1a0ac276bd06bfc68599a7a4ccae1aec1d5fdb14c37c0a6631b1a93d3f117ccfafc5348c16c25a3ac8435e8e13572bad70aa87ea1426727f15aac2886d02bee2
         
     | 
    
        data/.gitignore
    CHANGED
    
    
    
        data/Gemfile
    CHANGED
    
    
    
        data/Rakefile
    CHANGED
    
    
    
        data/Readme.md
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # Stacks  
     | 
| 
      
 1 
     | 
    
         
            +
            # Stacks on Deck 
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
      
 3 
     | 
    
         
            +
            Stupid simple Chef-Rundeck integration.
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
            ## Usage
         
     | 
| 
         @@ -9,6 +9,32 @@ Helpful stuff for OpenStack. 
     | 
|
| 
       9 
9 
     | 
    
         
             
                Commands:
         
     | 
| 
       10 
10 
     | 
    
         
             
                  sod art             # View the application art
         
     | 
| 
       11 
11 
     | 
    
         
             
                  sod help [COMMAND]  # Describe available commands or one specific command
         
     | 
| 
      
 12 
     | 
    
         
            +
                  sod server          # Start application web server
         
     | 
| 
       12 
13 
     | 
    
         
             
                  sod version         # Echo the application version
         
     | 
| 
       13 
14 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
      
 15 
     | 
    
         
            +
            You're most likely inteterested in `server`:
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                $ sod help server
         
     | 
| 
      
 18 
     | 
    
         
            +
                Usage:
         
     | 
| 
      
 19 
     | 
    
         
            +
                  sod server
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                Options:
         
     | 
| 
      
 22 
     | 
    
         
            +
                  -b, [--bind=BIND]                # Set Sinatra interface
         
     | 
| 
      
 23 
     | 
    
         
            +
                                                   # Default: 0.0.0.0
         
     | 
| 
      
 24 
     | 
    
         
            +
                  -p, [--port=N]                   # Set Sinatra port
         
     | 
| 
      
 25 
     | 
    
         
            +
                                                   # Default: 4567
         
     | 
| 
      
 26 
     | 
    
         
            +
                  -e, [--environment=ENVIRONMENT]  # Set Sinatra environment
         
     | 
| 
      
 27 
     | 
    
         
            +
                                                   # Default: development
         
     | 
| 
      
 28 
     | 
    
         
            +
                  -c, [--config=CONFIG]            # Location of Chef configuration
         
     | 
| 
      
 29 
     | 
    
         
            +
                                                   # Default: /etc/chef/knife.rb
         
     | 
| 
      
 30 
     | 
    
         
            +
                  -d, [--database=DATABASE]        # Location of state database
         
     | 
| 
      
 31 
     | 
    
         
            +
                                                   # Default: /etc/sod.db
         
     | 
| 
      
 32 
     | 
    
         
            +
                  -u, [--username=USERNAME]        # Username value for Rundeck node
         
     | 
| 
      
 33 
     | 
    
         
            +
                                                   # Default: ${job.username}
         
     | 
| 
      
 34 
     | 
    
         
            +
                  -r, [--refresh=N]                # Refresh interval in seconds
         
     | 
| 
      
 35 
     | 
    
         
            +
                                                   # Default: 900
         
     | 
| 
      
 36 
     | 
    
         
            +
                  -l, [--log=LOG]                  # Log to file instead of STDOUT
         
     | 
| 
      
 37 
     | 
    
         
            +
                  -v, [--debug], [--no-debug]      # Enable DEBUG-level logging
         
     | 
| 
      
 38 
     | 
    
         
            +
                  -z, [--trace], [--no-trace]      # Enable TRACE-level logging
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                Start application web server
         
     | 
    
        data/VERSION
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            0.0 
     | 
| 
      
 1 
     | 
    
         
            +
            1.0.0
         
     | 
| 
         @@ -0,0 +1,141 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'pathname'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'thread'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'json'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'yaml'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            require 'ridley'
         
     | 
| 
      
 7 
     | 
    
         
            +
            require 'daybreak'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require 'sinatra/base'
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            module StacksOnDeck
         
     | 
| 
      
 13 
     | 
    
         
            +
              class App < Sinatra::Application
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                def self.run!
         
     | 
| 
      
 16 
     | 
    
         
            +
                  open!
         
     | 
| 
      
 17 
     | 
    
         
            +
                  at_exit { close! }
         
     | 
| 
      
 18 
     | 
    
         
            +
                  Thread.new do
         
     | 
| 
      
 19 
     | 
    
         
            +
                    loop do
         
     | 
| 
      
 20 
     | 
    
         
            +
                      refresh!
         
     | 
| 
      
 21 
     | 
    
         
            +
                      sleep settings.refresh
         
     | 
| 
      
 22 
     | 
    
         
            +
                    end
         
     | 
| 
      
 23 
     | 
    
         
            +
                  end
         
     | 
| 
      
 24 
     | 
    
         
            +
                  super
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                get '/' do
         
     | 
| 
      
 29 
     | 
    
         
            +
                  content_type :yaml
         
     | 
| 
      
 30 
     | 
    
         
            +
                  @@db_dump
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              private
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                def self.log ; settings.log end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                def log ; settings.log end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                def self.db_copy
         
     | 
| 
      
 44 
     | 
    
         
            +
                  @@db.lock do
         
     | 
| 
      
 45 
     | 
    
         
            +
                    @@db.map { |_,v| v }
         
     | 
| 
      
 46 
     | 
    
         
            +
                  end
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                def self.open!
         
     | 
| 
      
 51 
     | 
    
         
            +
                  reopen!
         
     | 
| 
      
 52 
     | 
    
         
            +
                  log.debug event: 'open!', db: settings.database
         
     | 
| 
      
 53 
     | 
    
         
            +
                  @@db_dump = YAML.dump db_copy
         
     | 
| 
      
 54 
     | 
    
         
            +
                end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                def self.reopen!
         
     | 
| 
      
 58 
     | 
    
         
            +
                  old_db = @@db if defined? @@db
         
     | 
| 
      
 59 
     | 
    
         
            +
                  @@db = Daybreak::DB.new settings.database
         
     | 
| 
      
 60 
     | 
    
         
            +
                  old_db.close if old_db
         
     | 
| 
      
 61 
     | 
    
         
            +
                end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                def self.close!
         
     | 
| 
      
 65 
     | 
    
         
            +
                  log.debug event: 'close!', db: settings.database
         
     | 
| 
      
 66 
     | 
    
         
            +
                  @@db.close
         
     | 
| 
      
 67 
     | 
    
         
            +
                end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                def self.refresh!
         
     | 
| 
      
 71 
     | 
    
         
            +
                  log.debug event: 'refresh!', config: settings.config
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                  started = Time.now
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                  ridley = Ridley.from_chef_config settings.config
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                  chef_server_url = ridley.server_url
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                  nodes = ridley.partial_search :node, 'name:*', %w[
         
     | 
| 
      
 80 
     | 
    
         
            +
                    name
         
     | 
| 
      
 81 
     | 
    
         
            +
                    hostname
         
     | 
| 
      
 82 
     | 
    
         
            +
                    fqdn
         
     | 
| 
      
 83 
     | 
    
         
            +
                    roles
         
     | 
| 
      
 84 
     | 
    
         
            +
                    chef_environment
         
     | 
| 
      
 85 
     | 
    
         
            +
                    tags
         
     | 
| 
      
 86 
     | 
    
         
            +
                    kernel.machine
         
     | 
| 
      
 87 
     | 
    
         
            +
                    platform_version
         
     | 
| 
      
 88 
     | 
    
         
            +
                    platform_family
         
     | 
| 
      
 89 
     | 
    
         
            +
                    platform
         
     | 
| 
      
 90 
     | 
    
         
            +
                  ]
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                  node_resources = {}
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                  nodes.each do |n|
         
     | 
| 
      
 95 
     | 
    
         
            +
                    name = n.name
         
     | 
| 
      
 96 
     | 
    
         
            +
                    n = n.automatic
         
     | 
| 
      
 97 
     | 
    
         
            +
                    username = settings.username
         
     | 
| 
      
 98 
     | 
    
         
            +
                    remoteUrl = File.join chef_server_url, 'nodes', name
         
     | 
| 
      
 99 
     | 
    
         
            +
                    editUrl = File.join remoteUrl, 'edit'
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                    tags  = n.tags  || []
         
     | 
| 
      
 102 
     | 
    
         
            +
                    tags += n.roles || []
         
     | 
| 
      
 103 
     | 
    
         
            +
                    tags << n.chef_environment
         
     | 
| 
      
 104 
     | 
    
         
            +
                    tags.compact!
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
                    node_resources[name] = {
         
     | 
| 
      
 107 
     | 
    
         
            +
                      'nodename' => name,
         
     | 
| 
      
 108 
     | 
    
         
            +
                      'hostname' => n.hostname,
         
     | 
| 
      
 109 
     | 
    
         
            +
                      'description' => n.fqdn,
         
     | 
| 
      
 110 
     | 
    
         
            +
                      'osArch' => n.kernel.machine,
         
     | 
| 
      
 111 
     | 
    
         
            +
                      'osVersion' => n.platform_version,
         
     | 
| 
      
 112 
     | 
    
         
            +
                      'osFamily' => n.platform_family,
         
     | 
| 
      
 113 
     | 
    
         
            +
                      'osName' => n.platform,
         
     | 
| 
      
 114 
     | 
    
         
            +
                      'username' => username,
         
     | 
| 
      
 115 
     | 
    
         
            +
                      'remoteUrl' => remoteUrl,
         
     | 
| 
      
 116 
     | 
    
         
            +
                      'editUrl' => editUrl,
         
     | 
| 
      
 117 
     | 
    
         
            +
                      'tags' => tags
         
     | 
| 
      
 118 
     | 
    
         
            +
                    }
         
     | 
| 
      
 119 
     | 
    
         
            +
                  end
         
     | 
| 
      
 120 
     | 
    
         
            +
             
     | 
| 
      
 121 
     | 
    
         
            +
                  @@db.lock do
         
     | 
| 
      
 122 
     | 
    
         
            +
                    @@db.clear
         
     | 
| 
      
 123 
     | 
    
         
            +
                    @@db.update! node_resources
         
     | 
| 
      
 124 
     | 
    
         
            +
                  end
         
     | 
| 
      
 125 
     | 
    
         
            +
             
     | 
| 
      
 126 
     | 
    
         
            +
                  reopen!
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
                  @@db_dump = YAML.dump node_resources.values
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
                  log.debug event: 'refreshed!', elapsed: (Time.now - started)
         
     | 
| 
      
 131 
     | 
    
         
            +
             
     | 
| 
      
 132 
     | 
    
         
            +
                  return node_resources
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
                rescue Celluloid::Task::TerminatedError
         
     | 
| 
      
 136 
     | 
    
         
            +
                  # nop
         
     | 
| 
      
 137 
     | 
    
         
            +
                end
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
              end
         
     | 
| 
      
 141 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/stacksondeck/main.rb
    CHANGED
    
    | 
         @@ -1,15 +1,15 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require ' 
     | 
| 
       2 
     | 
    
         
            -
            require ' 
     | 
| 
      
 1 
     | 
    
         
            +
            require 'logger'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rack'
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
       4 
     | 
    
         
            -
            require_relative ' 
     | 
| 
      
 4 
     | 
    
         
            +
            require_relative 'app'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require_relative 'mjolnir'
         
     | 
| 
       5 
6 
     | 
    
         
             
            require_relative 'metadata'
         
     | 
| 
       6 
7 
     | 
    
         | 
| 
       7 
8 
     | 
    
         | 
| 
       8 
9 
     | 
    
         
             
            module StacksOnDeck
         
     | 
| 
       9 
10 
     | 
    
         | 
| 
       10 
11 
     | 
    
         
             
              # StacksOnDeck's entrypoint.
         
     | 
| 
       11 
     | 
    
         
            -
              class Main <  
     | 
| 
       12 
     | 
    
         
            -
                include StacksOnDeck::Helpers
         
     | 
| 
      
 12 
     | 
    
         
            +
              class Main < Mjolnir
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
14 
     | 
    
         | 
| 
       15 
15 
     | 
    
         
             
                desc 'version', 'Echo the application version'
         
     | 
| 
         @@ -23,5 +23,72 @@ module StacksOnDeck 
     | 
|
| 
       23 
23 
     | 
    
         
             
                  puts "\n%s\n" % ART
         
     | 
| 
       24 
24 
     | 
    
         
             
                end
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                desc 'server', 'Start application web server'
         
     | 
| 
      
 28 
     | 
    
         
            +
                option :bind, \
         
     | 
| 
      
 29 
     | 
    
         
            +
                  type: :string,
         
     | 
| 
      
 30 
     | 
    
         
            +
                  aliases: %w[ -b ],
         
     | 
| 
      
 31 
     | 
    
         
            +
                  desc: 'Set Sinatra interface',
         
     | 
| 
      
 32 
     | 
    
         
            +
                  default: '0.0.0.0'
         
     | 
| 
      
 33 
     | 
    
         
            +
                option :port, \
         
     | 
| 
      
 34 
     | 
    
         
            +
                  type: :numeric,
         
     | 
| 
      
 35 
     | 
    
         
            +
                  aliases: %w[ -p ],
         
     | 
| 
      
 36 
     | 
    
         
            +
                  desc: 'Set Sinatra port',
         
     | 
| 
      
 37 
     | 
    
         
            +
                  default: 4567
         
     | 
| 
      
 38 
     | 
    
         
            +
                option :environment, \
         
     | 
| 
      
 39 
     | 
    
         
            +
                  type: :string,
         
     | 
| 
      
 40 
     | 
    
         
            +
                  aliases: %w[ -e ],
         
     | 
| 
      
 41 
     | 
    
         
            +
                  desc: 'Set Sinatra environment',
         
     | 
| 
      
 42 
     | 
    
         
            +
                  default: 'development'
         
     | 
| 
      
 43 
     | 
    
         
            +
                option :config, \
         
     | 
| 
      
 44 
     | 
    
         
            +
                  type: :string,
         
     | 
| 
      
 45 
     | 
    
         
            +
                  aliases: %w[ -c ],
         
     | 
| 
      
 46 
     | 
    
         
            +
                  desc: 'Location of Chef configuration',
         
     | 
| 
      
 47 
     | 
    
         
            +
                  default: '/etc/chef/knife.rb'
         
     | 
| 
      
 48 
     | 
    
         
            +
                option :database, \
         
     | 
| 
      
 49 
     | 
    
         
            +
                  type: :string,
         
     | 
| 
      
 50 
     | 
    
         
            +
                  aliases: %w[ -d ],
         
     | 
| 
      
 51 
     | 
    
         
            +
                  desc: 'Location of state database',
         
     | 
| 
      
 52 
     | 
    
         
            +
                  default: '/etc/sod.db'
         
     | 
| 
      
 53 
     | 
    
         
            +
                option :username, \
         
     | 
| 
      
 54 
     | 
    
         
            +
                  type: :string,
         
     | 
| 
      
 55 
     | 
    
         
            +
                  aliases: %w[ -u ],
         
     | 
| 
      
 56 
     | 
    
         
            +
                  desc: 'Username value for Rundeck node',
         
     | 
| 
      
 57 
     | 
    
         
            +
                  default: '${job.username}'
         
     | 
| 
      
 58 
     | 
    
         
            +
                option :refresh, \
         
     | 
| 
      
 59 
     | 
    
         
            +
                  type: :numeric,
         
     | 
| 
      
 60 
     | 
    
         
            +
                  aliases: %w[ -r ],
         
     | 
| 
      
 61 
     | 
    
         
            +
                  desc: 'Refresh interval in seconds',
         
     | 
| 
      
 62 
     | 
    
         
            +
                  default: 900
         
     | 
| 
      
 63 
     | 
    
         
            +
                include_common_options
         
     | 
| 
      
 64 
     | 
    
         
            +
                def server
         
     | 
| 
      
 65 
     | 
    
         
            +
                  App.set :log, log
         
     | 
| 
      
 66 
     | 
    
         
            +
                  App.set :bind, options.bind
         
     | 
| 
      
 67 
     | 
    
         
            +
                  App.set :port, options.port
         
     | 
| 
      
 68 
     | 
    
         
            +
                  App.set :config, options.config
         
     | 
| 
      
 69 
     | 
    
         
            +
                  App.set :refresh, options.refresh
         
     | 
| 
      
 70 
     | 
    
         
            +
                  App.set :database, options.database
         
     | 
| 
      
 71 
     | 
    
         
            +
                  App.set :username, options.username
         
     | 
| 
      
 72 
     | 
    
         
            +
                  App.set :environment, options.environment
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                  if options.debug?
         
     | 
| 
      
 75 
     | 
    
         
            +
                    App.set :raise_errors, true
         
     | 
| 
      
 76 
     | 
    
         
            +
                    App.set :dump_errors, true
         
     | 
| 
      
 77 
     | 
    
         
            +
                    App.set :show_exceptions, true
         
     | 
| 
      
 78 
     | 
    
         
            +
                    App.set :logging, ::Logger::DEBUG
         
     | 
| 
      
 79 
     | 
    
         
            +
                  end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                  Celluloid.logger = nil
         
     | 
| 
      
 82 
     | 
    
         
            +
                  Thread.abort_on_exception = false
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                  if options.trace?
         
     | 
| 
      
 85 
     | 
    
         
            +
                    Celluloid.logger = log
         
     | 
| 
      
 86 
     | 
    
         
            +
                    Thread.abort_on_exception = true
         
     | 
| 
      
 87 
     | 
    
         
            +
                  end
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
                  log.debug event: 'server starting', options: options
         
     | 
| 
      
 90 
     | 
    
         
            +
                  App.run!
         
     | 
| 
      
 91 
     | 
    
         
            +
                end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
       26 
93 
     | 
    
         
             
              end
         
     | 
| 
       27 
94 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,77 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'slog'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'thor'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module StacksOnDeck
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              # Thor's hammer! Like Thor with better logging
         
     | 
| 
      
 8 
     | 
    
         
            +
              class Mjolnir < Thor
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                # Common options for Thor commands
         
     | 
| 
      
 11 
     | 
    
         
            +
                COMMON_OPTIONS = {
         
     | 
| 
      
 12 
     | 
    
         
            +
                  log: {
         
     | 
| 
      
 13 
     | 
    
         
            +
                    type: :string,
         
     | 
| 
      
 14 
     | 
    
         
            +
                    aliases: %w[ -l ],
         
     | 
| 
      
 15 
     | 
    
         
            +
                    desc: 'Log to file instead of STDOUT',
         
     | 
| 
      
 16 
     | 
    
         
            +
                    default: ENV['SOD_LOG'] || nil
         
     | 
| 
      
 17 
     | 
    
         
            +
                  },
         
     | 
| 
      
 18 
     | 
    
         
            +
                  debug: {
         
     | 
| 
      
 19 
     | 
    
         
            +
                    type: :boolean,
         
     | 
| 
      
 20 
     | 
    
         
            +
                    aliases: %w[ -v ],
         
     | 
| 
      
 21 
     | 
    
         
            +
                    desc: 'Enable DEBUG-level logging',
         
     | 
| 
      
 22 
     | 
    
         
            +
                    default: ENV['SOD_DEBUG'] || false
         
     | 
| 
      
 23 
     | 
    
         
            +
                  },
         
     | 
| 
      
 24 
     | 
    
         
            +
                  trace: {
         
     | 
| 
      
 25 
     | 
    
         
            +
                    type: :boolean,
         
     | 
| 
      
 26 
     | 
    
         
            +
                    aliases: %w[ -z ],
         
     | 
| 
      
 27 
     | 
    
         
            +
                    desc: 'Enable TRACE-level logging',
         
     | 
| 
      
 28 
     | 
    
         
            +
                    default: ENV['SOD_TRACE'] || false
         
     | 
| 
      
 29 
     | 
    
         
            +
                  }
         
     | 
| 
      
 30 
     | 
    
         
            +
                }
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                # Decorate Thor commands with the options above
         
     | 
| 
      
 33 
     | 
    
         
            +
                def self.include_common_options
         
     | 
| 
      
 34 
     | 
    
         
            +
                  COMMON_OPTIONS.each do |name, spec|
         
     | 
| 
      
 35 
     | 
    
         
            +
                    option name, spec
         
     | 
| 
      
 36 
     | 
    
         
            +
                  end
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                no_commands do
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                  # Return a connection to the given OpenStack service
         
     | 
| 
      
 43 
     | 
    
         
            +
                  def os service
         
     | 
| 
      
 44 
     | 
    
         
            +
                    @os ||= {}
         
     | 
| 
      
 45 
     | 
    
         
            +
                    return @os[service] if @os.has_key? service
         
     | 
| 
      
 46 
     | 
    
         
            +
                    @os[service] = OpenStack::Connection.create \
         
     | 
| 
      
 47 
     | 
    
         
            +
                      auth_url: options.auth_url,
         
     | 
| 
      
 48 
     | 
    
         
            +
                      auth_method: options.auth_method,
         
     | 
| 
      
 49 
     | 
    
         
            +
                      authtenant_id: options.auth_tenant,
         
     | 
| 
      
 50 
     | 
    
         
            +
                      username: options.auth_user,
         
     | 
| 
      
 51 
     | 
    
         
            +
                      api_key: options.auth_pass,
         
     | 
| 
      
 52 
     | 
    
         
            +
                      service_type: service
         
     | 
| 
      
 53 
     | 
    
         
            +
                    log.trace \
         
     | 
| 
      
 54 
     | 
    
         
            +
                      event: 'OpenStack connection',
         
     | 
| 
      
 55 
     | 
    
         
            +
                      service: service
         
     | 
| 
      
 56 
     | 
    
         
            +
                    return @os[service]
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                  # Construct a Logger given the command-line options
         
     | 
| 
      
 61 
     | 
    
         
            +
                  def log
         
     | 
| 
      
 62 
     | 
    
         
            +
                    return @logger if defined? @logger
         
     | 
| 
      
 63 
     | 
    
         
            +
                    level = :info
         
     | 
| 
      
 64 
     | 
    
         
            +
                    level = :debug if options.debug?
         
     | 
| 
      
 65 
     | 
    
         
            +
                    level = :trace if options.trace?
         
     | 
| 
      
 66 
     | 
    
         
            +
                    device = options.log || $stderr
         
     | 
| 
      
 67 
     | 
    
         
            +
                    pretty = device.tty? rescue false
         
     | 
| 
      
 68 
     | 
    
         
            +
                    @logger = Slog.new \
         
     | 
| 
      
 69 
     | 
    
         
            +
                      out: device,
         
     | 
| 
      
 70 
     | 
    
         
            +
                      level: level,
         
     | 
| 
      
 71 
     | 
    
         
            +
                      colorize: pretty,
         
     | 
| 
      
 72 
     | 
    
         
            +
                      prettify: pretty
         
     | 
| 
      
 73 
     | 
    
         
            +
                  end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                end
         
     | 
| 
      
 76 
     | 
    
         
            +
              end
         
     | 
| 
      
 77 
     | 
    
         
            +
            end
         
     | 
    
        data/stacksondeck.gemspec
    CHANGED
    
    | 
         @@ -15,6 +15,10 @@ Gem::Specification.new do |s| 
     | 
|
| 
       15 
15 
     | 
    
         | 
| 
       16 
16 
     | 
    
         
             
              s.add_runtime_dependency 'thor', '~> 0'
         
     | 
| 
       17 
17 
     | 
    
         
             
              s.add_runtime_dependency 'slog', '~> 1'
         
     | 
| 
      
 18 
     | 
    
         
            +
              s.add_runtime_dependency 'hashie', '~> 2'
         
     | 
| 
      
 19 
     | 
    
         
            +
              s.add_runtime_dependency 'sinatra', '~> 1.4'
         
     | 
| 
      
 20 
     | 
    
         
            +
              s.add_runtime_dependency 'daybreak', '~> 0.3'
         
     | 
| 
      
 21 
     | 
    
         
            +
              s.add_runtime_dependency 'ridley', '~> 4.1'
         
     | 
| 
       18 
22 
     | 
    
         | 
| 
       19 
23 
     | 
    
         
             
              s.files         = `git ls-files`.split("\n")
         
     | 
| 
       20 
24 
     | 
    
         
             
              s.test_files    = `git ls-files -- test/*`.split("\n")
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: stacksondeck
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.0.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Sean Clemmer
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2015- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2015-03-02 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: thor
         
     | 
| 
         @@ -38,7 +38,63 @@ dependencies: 
     | 
|
| 
       38 
38 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       39 
39 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       40 
40 
     | 
    
         
             
                    version: '1'
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
      
 41 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 42 
     | 
    
         
            +
              name: hashie
         
     | 
| 
      
 43 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 44 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 45 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 46 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 47 
     | 
    
         
            +
                    version: '2'
         
     | 
| 
      
 48 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 49 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 50 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 51 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 52 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 53 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 54 
     | 
    
         
            +
                    version: '2'
         
     | 
| 
      
 55 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 56 
     | 
    
         
            +
              name: sinatra
         
     | 
| 
      
 57 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 58 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 59 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 60 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 61 
     | 
    
         
            +
                    version: '1.4'
         
     | 
| 
      
 62 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 63 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 64 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 65 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 66 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 67 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 68 
     | 
    
         
            +
                    version: '1.4'
         
     | 
| 
      
 69 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 70 
     | 
    
         
            +
              name: daybreak
         
     | 
| 
      
 71 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 72 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 73 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 74 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 75 
     | 
    
         
            +
                    version: '0.3'
         
     | 
| 
      
 76 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 77 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 78 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 79 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 80 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 81 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 82 
     | 
    
         
            +
                    version: '0.3'
         
     | 
| 
      
 83 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 84 
     | 
    
         
            +
              name: ridley
         
     | 
| 
      
 85 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 86 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 87 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 88 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 89 
     | 
    
         
            +
                    version: '4.1'
         
     | 
| 
      
 90 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 91 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 92 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 93 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 94 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 95 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 96 
     | 
    
         
            +
                    version: '4.1'
         
     | 
| 
      
 97 
     | 
    
         
            +
            description: Stupid simple Chef-Rundeck integration.
         
     | 
| 
       42 
98 
     | 
    
         
             
            email: sczizzo@gmail.com
         
     | 
| 
       43 
99 
     | 
    
         
             
            executables:
         
     | 
| 
       44 
100 
     | 
    
         
             
            - sod
         
     | 
| 
         @@ -53,9 +109,10 @@ files: 
     | 
|
| 
       53 
109 
     | 
    
         
             
            - VERSION
         
     | 
| 
       54 
110 
     | 
    
         
             
            - bin/sod
         
     | 
| 
       55 
111 
     | 
    
         
             
            - lib/stacksondeck.rb
         
     | 
| 
       56 
     | 
    
         
            -
            - lib/stacksondeck/ 
     | 
| 
      
 112 
     | 
    
         
            +
            - lib/stacksondeck/app.rb
         
     | 
| 
       57 
113 
     | 
    
         
             
            - lib/stacksondeck/main.rb
         
     | 
| 
       58 
114 
     | 
    
         
             
            - lib/stacksondeck/metadata.rb
         
     | 
| 
      
 115 
     | 
    
         
            +
            - lib/stacksondeck/mjolnir.rb
         
     | 
| 
       59 
116 
     | 
    
         
             
            - stacksondeck.gemspec
         
     | 
| 
       60 
117 
     | 
    
         
             
            - test/test_stacksondeck.rb
         
     | 
| 
       61 
118 
     | 
    
         
             
            homepage: https://github.com/sczizzo/stacksondeck
         
     | 
| 
         @@ -81,6 +138,6 @@ rubyforge_project: 
     | 
|
| 
       81 
138 
     | 
    
         
             
            rubygems_version: 2.2.2
         
     | 
| 
       82 
139 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       83 
140 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       84 
     | 
    
         
            -
            summary:  
     | 
| 
      
 141 
     | 
    
         
            +
            summary: Stupid simple Chef-Rundeck integration
         
     | 
| 
       85 
142 
     | 
    
         
             
            test_files:
         
     | 
| 
       86 
143 
     | 
    
         
             
            - test/test_stacksondeck.rb
         
     | 
    
        data/lib/stacksondeck/helpers.rb
    DELETED
    
    | 
         @@ -1,28 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'thor/util'
         
     | 
| 
       2 
     | 
    
         
            -
            require 'thor/actions'
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            module StacksOnDeck
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
              # Mixins for StacksOnDeck's Thor subclasses.
         
     | 
| 
       8 
     | 
    
         
            -
              module Helpers
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
                # Save the canonical implementation of "puts"
         
     | 
| 
       11 
     | 
    
         
            -
                alias_method :old_puts, :puts
         
     | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
       13 
     | 
    
         
            -
                # Monkeypatch puts to support Thor::Shell::Color.
         
     | 
| 
       14 
     | 
    
         
            -
                def puts *args
         
     | 
| 
       15 
     | 
    
         
            -
                  return old_puts if args.empty?
         
     | 
| 
       16 
     | 
    
         
            -
                  old_puts shell.set_color(*args)
         
     | 
| 
       17 
     | 
    
         
            -
                end
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
                # Shortcut for Thor::Util.
         
     | 
| 
       21 
     | 
    
         
            -
                def util ; Thor::Util end
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                # Shortcut for Thor::Actions.
         
     | 
| 
       25 
     | 
    
         
            -
                def actions ; Thor::Actions end
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
              end
         
     | 
| 
       28 
     | 
    
         
            -
            end
         
     |