bcome 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a686ef98d2ed392ebea901a998bb508e5647f1c6
4
- data.tar.gz: 1d45c2e23a9c47e7668ec5d5bc13840c2ac1ee52
3
+ metadata.gz: 182bfab8bb82f233dc36d0997b8b04d5c338fdbc
4
+ data.tar.gz: 05f502b57479254e9f8242105950e11cae9a890b
5
5
  SHA512:
6
- metadata.gz: 36293dd728003d7c64b5355578dfec7d33d00a7e8ab240feb898a6f16d42ab83f1bac9c08b72ba812d813409a3074d8c64302147cbd1ca8b5745956380f8660d
7
- data.tar.gz: c6ef2b507110c1ae8222c1b011befa04578b1661053df02c3184ffb028f584e187bc54cd2b2e3857f48d4ca2c8eac6a8190a95416263df38d21c91e441f34cbf
6
+ metadata.gz: 44c5de8e693ea1a1d7ede4eb64ece7ba5d388a6f3de742fbf234c1a4a17a5bd6845467060084ce019f439cef9e3c7b01fd19e343c56c8abb294598f452b162e5
7
+ data.tar.gz: 7269b4533caae53f815e80ceb40ac6ca3c4f071a3ea537752b9a5ee9850c7efac12c88d38c101a4c28d5e48c1d16bc48d7cadeb326b3e4bd43a7933bec005861
data/bin/bcome-setup CHANGED
@@ -26,7 +26,7 @@ gem_install_path = File.dirname(__FILE__)
26
26
  conf_example_path = "#{gem_install_path}/../documentation/examples"
27
27
  application_path = Dir.pwd
28
28
 
29
- ["platform.yml-example","network.yml-example"].each do |example_conf|
29
+ ["platform.yml-example","network.yml-example", "functions.yml-example"].each do |example_conf|
30
30
  transfer_cmd = "rsync -aq #{conf_example_path}/#{example_conf} #{application_path}/#{config_dir}/#{example_conf}"
31
31
  system(transfer_cmd)
32
32
  end
@@ -0,0 +1,21 @@
1
+ ---
2
+ :single_functions:
3
+ - :description: "Find open files that are open, but have been deleted"
4
+ :ref: "openfiles"
5
+ :command: "lsof -nP +L1"
6
+
7
+ - :description: "Show free disk space"
8
+ :ref: "space"
9
+ :command: "df -h"
10
+
11
+ - :description: "Free system memory"
12
+ :ref: "mem"
13
+ :command: "free -m"
14
+
15
+ - :description: "Find large files in /var"
16
+ :ref: "large"
17
+ :command: "du -a /var | sort -n -r | head -n 10"
18
+
19
+ - :description: "CPU usage as a percentage"
20
+ :ref: "cpu"
21
+ :command: "cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS=\"\" '{print ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'"
@@ -0,0 +1,28 @@
1
+ ## Functions
2
+
3
+ Functions are shortcuts to SSH commands accessible from the shell that can be executed in sequence over a selection of instances (if you're at the environment level), or on a specific instance, if you're at a node level.
4
+
5
+ An example functions config can be found in bcome/config/functions.yml-example. Rename this file to functions.yml and you will have access to the functions within from the shell.
6
+
7
+ ### Example usage
8
+
9
+ Define the function in the functions.yml config
10
+
11
+ ```
12
+ [...]
13
+
14
+ - :description: "Free system memory"
15
+ :ref: "mem"
16
+ :command: "free -m"
17
+
18
+ [...]
19
+ ```
20
+
21
+ Then enter the shell, navigate to an environment level, select the nodes you wish to work on (those on which the function command will be executed), and invoke it:
22
+
23
+ ```
24
+ bcome> F 'mem'
25
+
26
+ ```
27
+
28
+ The command will then be invoked on every selected node with the output returned to the shell.
@@ -36,9 +36,9 @@ or, if with bundler
36
36
  > describe
37
37
  - Describe the resource object at the current context.
38
38
 
39
- > workon / w
39
+ > workon / w / cd
40
40
  - Select a resource object, and switch to its context.
41
- e.g. workon 'identifier'
41
+ e.g. cd 'identifier'
42
42
 
43
43
  > exit
44
44
  - Close the current context
@@ -62,9 +62,9 @@ e.g. local "command"
62
62
  > describe
63
63
  - Describe the resource object at the current context.
64
64
 
65
- > workon / w
65
+ > workon / w / cd
66
66
  - Select a resource object, and switch to its context.
67
- e.g. workon 'identifier' OR w 'identifier'
67
+ e.g. cd 'identifier' OR workon 'identifier' OR w 'identifier'
68
68
 
69
69
  > exit
70
70
  - Close the current context
@@ -88,9 +88,9 @@ e.g. local "command"
88
88
  > describe
89
89
  - Describe the resource object at the current context.
90
90
 
91
- > workon / w
91
+ > cd / workon / w
92
92
  - Select a resource object, and switch to its context.
93
- e.g. workon 'identifier'
93
+ e.g. cd 'identifier' OR w 'identifier' OR workon 'identifier'
94
94
 
95
95
  > exit
96
96
  - Close the current context
data/lib/bcome/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Bcome
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
data/lib/functions.rb ADDED
@@ -0,0 +1,70 @@
1
+ module Bcome::Functions
2
+
3
+ CONFIGS_PATH = "bcome/config"
4
+
5
+ def functions
6
+ unless cmd_functions
7
+ puts "You don't yet have any custom functions defined. Have a read of the docs and define some. They're pretty useful.".informational
8
+ else
9
+ puts
10
+ cmd_functions.each_with_index do |cmd_function, i|
11
+ puts "#{cmd_function[:ref].informational}"
12
+ puts "Description: " + cmd_function[:description]
13
+ puts "Command: > " + cmd_function[:command]
14
+ puts "USAGE: > F \"#{cmd_function[:ref]}\""
15
+ puts
16
+ end
17
+ end
18
+ return
19
+ end
20
+
21
+ def F(reference)
22
+ if self.is_a?(Bcome::Stack::Environment) && no_selections?
23
+ puts "You are an an Environment level, and have not selected any nodes to workon.".failure
24
+ else
25
+ command = cmd_for_ref(reference)
26
+ if command
27
+ puts "#{"Executing command '#{command[:ref]}': ".informational} > #{command[:command].command}"
28
+ puts run command[:command]
29
+ end
30
+ end
31
+ end
32
+
33
+ def cmd_for_ref(reference)
34
+ commands = cmd_functions.select{|command| command[:ref].to_s == reference.to_s }
35
+ raise "Multiple commands found for reference '#{reference}'. Your functions list is ambiguous.".failure if commands.size > 1
36
+ unless commands.any?
37
+ puts "No command found for reference '#{reference}'".failure
38
+ return nil
39
+ end
40
+ return commands.first
41
+ end
42
+
43
+ def cmd_functions
44
+ return unless has_functions_config?
45
+ @cmd_functions ||= load_cmd_functions
46
+ end
47
+
48
+ def has_cmd_functions?
49
+ !cmd_functions.nil?
50
+ end
51
+
52
+ def load_cmd_functions
53
+ configs = YAML.load_file(cmd_config_path)
54
+ unless configs.has_key?(:single_functions)
55
+ raise "Invalid functions configuration. Please check your yaml".failure
56
+ else
57
+ return configs[:single_functions]
58
+ end
59
+ end
60
+
61
+ def cmd_config_path
62
+ "#{CONFIGS_PATH}/functions.yml"
63
+ end
64
+
65
+ def has_functions_config?
66
+ File.exist?(cmd_config_path)
67
+ end
68
+
69
+
70
+ end
@@ -40,7 +40,7 @@ module ::Bcome::InstanceSsh
40
40
  end
41
41
 
42
42
  def ssh_key_path
43
- "~/.ssh/id_rsa"
43
+ return @environment.ssh_key_path ? @environment.ssh_key_path : "~/.ssh/id_rsa"
44
44
  end
45
45
 
46
46
  def keys
@@ -22,8 +22,12 @@ module ::Bcome::Selections
22
22
  return
23
23
  end
24
24
 
25
+ def no_selections?
26
+ !@objects || @objects.empty?
27
+ end
28
+
25
29
  def put(local_path, remote_path)
26
- if !@objects || @objects.empty?
30
+ if no_selections?
27
31
  no_selections_error
28
32
  return
29
33
  end
@@ -35,7 +39,7 @@ module ::Bcome::Selections
35
39
  end
36
40
 
37
41
  def get(remote_path)
38
- if !@objects || @objects.empty?
42
+ if no_selections?
39
43
  no_selections_error
40
44
  return
41
45
  end
@@ -90,7 +94,7 @@ module ::Bcome::Selections
90
94
  end
91
95
 
92
96
  def remove_object(object)
93
- return if !@objects || @objects.empty?
97
+ return if no_selections?
94
98
  unless object_in_selections?(object)
95
99
  print "\n#{object.identifier} is not within selections\n".headsup
96
100
  else
@@ -105,7 +109,7 @@ module ::Bcome::Selections
105
109
  end
106
110
 
107
111
  def selections
108
- if !@objects || @objects.empty?
112
+ if no_selections?
109
113
  print "\nNo added nodes.\n".headsup
110
114
  else
111
115
  print "\nAdded nodes: #{@objects.collect(&:identifier).join(", ")}\n".headsup
data/lib/object.rb CHANGED
@@ -40,12 +40,13 @@ class Object
40
40
  end
41
41
  end
42
42
  alias :w :workon
43
+ alias :cd :workon
43
44
 
44
45
  def menu_items
45
46
  [
46
47
  { :command => "list / ls", :description => "List all available resources at the current context." },
47
48
  { :command => "describe", :description => "Describe the resource object at the current context." },
48
- { :command => "workon' / w", :description => "Select a resource object, and switch to its context.", :usage => "workon 'identifier'" },
49
+ { :command => "cd / workon / w", :description => "Select a resource object, and switch to its context.", :usage => "cd 'identifier'" },
49
50
  { :command => "exit", :description => "Return to the previous context" },
50
51
  { :command => "exit!", :description => "Close all contexts, and exit Become."},
51
52
  { :command => "local", :description => "Execute a shell command on your local machine.", :usage => 'local "command"'}
@@ -5,6 +5,7 @@ module ::Bcome::Stack
5
5
  include ::Bcome::Selections
6
6
  include ::Bcome::FogHelper
7
7
  include ::Bcome::EnvironmentSSH
8
+ include ::Bcome::Functions
8
9
 
9
10
  class << self
10
11
  def collection_from_config(parent, configuration)
@@ -34,7 +35,8 @@ module ::Bcome::Stack
34
35
  { :command => "run", :description => "Execute a command on all selected resources", :usage => "run 'command'" },
35
36
  { :command => "get", :description => "Download from remote from all selected resources (recursive - uses rsync)", :usage => "get 'remote_path'" },
36
37
  { :command => "put", :description => "Copy files up to all selected resources (recursive - uses rsync)", :usage => "put 'local_path', 'remote_path'" },
37
- { :command => "sudo", :description => "Run 'get' and 'put' in sudo mode (assumes you have passwordless sudo setup)" }
38
+ { :command => "sudo", :description => "Run 'get' and 'put' in sudo mode (assumes you have passwordless sudo setup)" },
39
+ { :command => 'functions', :description => "List all available custom functions" }
38
40
  ]
39
41
  end
40
42
 
@@ -55,6 +57,10 @@ module ::Bcome::Stack
55
57
  def ssh_nat_user
56
58
  return @meta_data[:ssh_mode][:nat_user]
57
59
  end
60
+
61
+ def ssh_key_path
62
+ return @meta_data[:ssh_mode][:ssh_key_path]
63
+ end
58
64
 
59
65
  def sudo
60
66
  toggle_sudo
@@ -4,6 +4,7 @@ module ::Bcome::Stack
4
4
  include ::Bcome::BecomeObject
5
5
  include ::Bcome::InstanceSsh
6
6
  include ::Bcome::InstanceCommand
7
+ include ::Bcome::Functions
7
8
 
8
9
  class << self
9
10
  def collection_from_fog_data(parent, fog_instances)
@@ -44,7 +45,8 @@ module ::Bcome::Stack
44
45
  { :command => "put", :description => "Copy files to remote (recursive - uses rsync)", :usage => "put 'local_path', 'remote_path'" },
45
46
  { :command => "get", :description => "Download from remote (recursive - uses rsync).", :usage => "get 'remote_path'"},
46
47
  { :command => "ssh", :description => "Initiate an SSH connection." },
47
- { :command => "sudo", :description => "Run 'get' and 'put' in sudo mode (assumes you have passwordless sudo setup)" }
48
+ { :command => "sudo", :description => "Run 'get' and 'put' in sudo mode (assumes you have passwordless sudo setup)" },
49
+ { :command => 'functions', :description => "List all available custom functions" }
48
50
  ]
49
51
  end
50
52
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bcome
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guillaume Roderick (Webzakimbo)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-11 00:00:00.000000000 Z
11
+ date: 2015-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aws-sdk
@@ -115,8 +115,10 @@ files:
115
115
  - bin/bcome
116
116
  - bin/bcome-setup
117
117
  - documentation/configuration.md
118
+ - documentation/examples/functions.yml-example
118
119
  - documentation/examples/network.yml-example
119
120
  - documentation/examples/platform.yml-example
121
+ - documentation/functions.md
120
122
  - documentation/installation.md
121
123
  - documentation/usage.md
122
124
  - filters/ec2_filter.rb
@@ -127,6 +129,7 @@ files:
127
129
  - lib/command.rb
128
130
  - lib/filters/base.rb
129
131
  - lib/filters/ec2_filter.rb
132
+ - lib/functions.rb
130
133
  - lib/helpers/command_helper.rb
131
134
  - lib/helpers/environment_ssh.rb
132
135
  - lib/helpers/fog_helper.rb