cloudstack-cli 0.7.4 → 0.8.0

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: 6f2298c84a2760737a6a3b3e7b3a8104f3fe383e
4
- data.tar.gz: c3eba72da15dd9fbcf61a162dfd723330ceabdee
3
+ metadata.gz: f42a25136394a7e73e0d22f3a9a0bd83d60a73eb
4
+ data.tar.gz: 709963bf4063b0554ac1822c5825df8661e18c0a
5
5
  SHA512:
6
- metadata.gz: 26f8de3dec1b5f9f937cc2dabc8d1b189e43439ccff01e47a504f4fac8b393f97814a49fe7acafa86d5a4b8d2643e7f703e6f97169a4df6ef4453b4d92818765
7
- data.tar.gz: 7cc8fa873dc54a6962b9a63b9bb05d36af7c05b69ad349189a24ae29ee369a70ec75ec5309bcdb84c1869ba1a97dab4fd8ce55584d15f5511b8960feab9f8acf
6
+ metadata.gz: 057b1a7111b838b0a94b08230496a50d0485b5ae36b4ab7b9e024e6e980ac06f7d7e7624623160218043412c3980dba22a260d37460995b86beaea56f259f8f1
7
+ data.tar.gz: 26a448beb6dcaee8f7512a30f3bd47f71c0681d305db5ec3e09be6f53b43963d9a2ff90f181de88f1e0c233183426975f718a136b7b14e94402ee9db6c94c61a
data/CHANGELOG.md ADDED
@@ -0,0 +1,2 @@
1
+ ## v0.8, release 24.02.2014
2
+ * Added support for bash auto-completion
data/Gemfile CHANGED
@@ -3,4 +3,5 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in cloudstack-cli.gemspec
4
4
  gemspec
5
5
 
6
- gem 'cloudstack_client', git: 'git@github.com:niwo/cloudstack_client.git', branch: 'master'
6
+ gem 'cloudstack_client', git: 'git@github.com:niwo/cloudstack_client.git', branch: 'master'
7
+ gem 'thor', git: 'git@github.com:erikhuda/thor.git', branch: 'master'
data/Gemfile.lock CHANGED
@@ -1,6 +1,13 @@
1
+ GIT
2
+ remote: git@github.com:erikhuda/thor.git
3
+ revision: 2c6e4fe957efa63cdd7edc61e3fd166d5e8409f2
4
+ branch: master
5
+ specs:
6
+ thor (0.18.1)
7
+
1
8
  GIT
2
9
  remote: git@github.com:niwo/cloudstack_client.git
3
- revision: 0421f2e3f58e726099d99d98898f48a6be7183a7
10
+ revision: 5547d67014571b3818e0a695604207a10c7d6cf4
4
11
  branch: master
5
12
  specs:
6
13
  cloudstack_client (0.4.4)
@@ -8,7 +15,7 @@ GIT
8
15
  PATH
9
16
  remote: .
10
17
  specs:
11
- cloudstack-cli (0.7.3)
18
+ cloudstack-cli (0.7.4)
12
19
  cloudstack_client (~> 0.4, >= 0.4.4)
13
20
  thor (~> 0.18)
14
21
 
@@ -19,7 +26,6 @@ GEM
19
26
  rake (10.1.1)
20
27
  rdoc (4.1.1)
21
28
  json (~> 1.4)
22
- thor (0.18.1)
23
29
 
24
30
  PLATFORMS
25
31
  ruby
@@ -29,3 +35,4 @@ DEPENDENCIES
29
35
  cloudstack_client!
30
36
  rake (~> 10.1)
31
37
  rdoc (~> 4.1)
38
+ thor!
data/README.md CHANGED
@@ -9,28 +9,49 @@ cloudstack-cli uses the [cloudstack_client](https://github.com/niwo/cloudstack_c
9
9
 
10
10
  Install the cloudstack-cli gem:
11
11
 
12
- $ gem install cloudstack-cli
12
+ ```sh
13
+ $ gem install cloudstack-cli
14
+ ```
13
15
 
14
16
  ## Setup
15
17
 
16
- Create the initial configuration:
18
+ ### Create a cloudstack-cli environmet
17
19
 
18
- $ cs setup
20
+ Create your first environment, which defines your connection options:
21
+
22
+ ```sh
23
+ $ cs environment add [environment-name]
24
+ ```
19
25
 
20
26
  cloudstack-cli expects to find a configuartion file with the API URL and your CloudStack credentials in your home directory named .cloudstack-cli.yml. If the file is located elsewhere you can specify the loaction using the --config option.
21
27
 
22
28
  cloudstack-cli supports multiple environments using the --environment option.
23
29
 
30
+ see `cs help environment` for more options.
31
+
24
32
  Example content of the configuration file:
25
33
 
26
- :url: "https://my-cloudstack-server/client/api/"
27
- :api_key: "cloudstack-api-key"
28
- :secret_key: "cloudstack-api-secret"
34
+ ```yaml
35
+ :url: "https://my-cloudstack-server/client/api/"
36
+ :api_key: "cloudstack-api-key"
37
+ :secret_key: "cloudstack-api-secret"
38
+
39
+ test:
40
+ :url: "http://my-cloudstack-testserver/client/api/"
41
+ :api_key: "cloudstack-api-key"
42
+ :secret_key: "cloudstack-api-secret"
43
+ ```
44
+
45
+ ### Shell tab auto-completion
46
+
47
+ To enable tab auto-completion for cloudstack-cli, add the following lines to your ~/.bash_profile file.
48
+
49
+ ```sh
50
+ # Bash, ~/.bash_profile
51
+ eval "$(cs completion --shell=bash)"
52
+ ```
29
53
 
30
- test:
31
- :url: "http://my-cloudstack-testserver/client/api/"
32
- :api_key: "cloudstack-api-key"
33
- :secret_key: "cloudstack-api-secret"
54
+ __Note__: use `~/.bashrc` on Ubuntu
34
55
 
35
56
  ## Usage
36
57
 
@@ -38,75 +59,91 @@ For additional documentation find the RubyDoc [here](http://rubydoc.info/gems/cl
38
59
 
39
60
  See the help screen:
40
61
 
41
- $ cs
62
+ ```sh
63
+ $ cs
64
+ ```
42
65
 
43
66
  ### Example: Bootsrapping a server
44
67
 
45
68
  Bootsraps a server using a template and creating port-forwarding rules for port 22 and 80.
46
69
 
47
- $ cs server create server-01 --template CentOS-6.4-x64-v1.4 --zone DC1 --offering 1cpu_1gb --port-rules :22 :80
70
+ ```sh
71
+ $ cs server create server-01 --template CentOS-6.4-x64-v1.4 --zone DC1 --offering 1cpu_1gb --port-rules :22 :80
72
+ ```
48
73
 
49
74
  ### Example: Run a any custom API command
50
75
 
51
76
  Run the "listAlerts" command against the Cloudstack API with an argument of type=8:
52
77
 
53
- $ cs command listAlerts type=8
78
+ ```sh
79
+ $ cs command listAlerts type=8
80
+ ```
54
81
 
55
82
  ### Example: Creating a complete stack of servers
56
83
 
57
84
  An example stackfile looks like this (my_stackfile.json)
58
85
 
59
- {
60
- "name": "web_stack-a",
61
- "description": "Web Application Stack",
62
- "version": "1.0",
63
- "zone": "DC-BIE-1",
64
- "group": "my_web_stack",
65
- "keypair": "mykeypair",
66
- "servers": [
86
+ ```json
87
+ {
88
+ "name": "web_stack-a",
89
+ "description": "Web Application Stack",
90
+ "version": "1.0",
91
+ "zone": "DC-BIE-1",
92
+ "group": "my_web_stack",
93
+ "keypair": "mykeypair",
94
+ "servers": [
67
95
  {
68
- "name": "web-d1, web-d2",
69
- "description": "Web nodes",
70
- "template": "CentOS-6.4-x64-v1.2",
71
- "offering": "1cpu_1gb",
72
- "networks": "server_network",
73
- "port_rules": ":80, :443"
96
+ "name": "web-d1, web-d2",
97
+ "description": "Web nodes",
98
+ "template": "CentOS-6.4-x64-v1.2",
99
+ "offering": "1cpu_1gb",
100
+ "networks": "server_network",
101
+ "port_rules": ":80, :443"
74
102
  },
75
103
  {
76
- "name": "db-01",
77
- "description": "PostgreSQL Master",
78
- "iso": "CentOS-6.4-x86_64-swisstxt-v15",
79
- "disk_offering": "Perf Storage",
80
- "disk_size": "5",
81
- "offering": "2cpu_4gb",
82
- "networks": [
83
- "server_network",
84
- "storage_network"
85
- ]
104
+ "name": "db-01",
105
+ "description": "PostgreSQL Master",
106
+ "iso": "CentOS-6.4-x86_64-swisstxt-v15",
107
+ "disk_offering": "Perf Storage",
108
+ "disk_size": "5",
109
+ "offering": "2cpu_4gb",
110
+ "networks": [
111
+ "server_network",
112
+ "storage_network"
113
+ ]
86
114
  }
87
- ]
88
- }
115
+ ]
116
+ }
117
+ ```
89
118
 
90
119
  Create the stack of servers from above:
91
120
 
92
- $ cs stack create my_stackfile.json
121
+ ```sh
122
+ $ cs stack create my_stackfile.json
123
+ ```
93
124
 
94
125
  ### Example: Sort computing offerings
95
126
 
96
127
  Sort all computing offerings by CPU and Memory grouped my Domain:
97
128
 
98
- $ cs offering sort
129
+ ```sh
130
+ $ cs offering sort
131
+ ```
99
132
 
100
133
  ### Example: Stop all backup routers of a given project
101
134
 
102
135
  Stop all virtual routers of project Demo (you could filter by zone too):
103
136
  (This command is helpful if you have to deploy new versions of Cloudstack when using redundant routers)
104
137
 
105
- $ cs router list --project Demo --status running --redundant-state BACKUP --command stop
138
+ ```sh
139
+ $ cs router list --project Demo --status running --redundant-state BACKUP --command stop
140
+ ````
106
141
 
107
142
  Hint: You can watch the status of the command with watch.
108
143
 
109
- $ watch -n cs router list --project Demo
144
+ ```sh
145
+ $ watch -n cs router list --project Demo
146
+ ```
110
147
 
111
148
 
112
149
  ## References
@@ -0,0 +1,38 @@
1
+ #!/bin/bash
2
+
3
+ # cloudstack-cli
4
+ # https://github.com/niwo/cloudstack-cli
5
+ #
6
+ # Copyright (c) 2014 Nik Wolfgramm
7
+ # Licensed under the MIT license.
8
+ # https://raw.github.com/niwo/cloudstack-cli/master/LICENSE.txt
9
+
10
+ # Usage:
11
+ #
12
+ # To enable bash <tab> completion for cloudstack-cli, add the following line (minus the
13
+ # leading #, which is the bash comment character) to your ~/.bash_profile file (use ~/.bashrc on Ubuntu):
14
+ #
15
+ # eval "$(cs completion --shell=bash)"
16
+
17
+ _cs() {
18
+ COMPREPLY=()
19
+ local word="${COMP_WORDS[COMP_CWORD]}"
20
+ if [ "$COMP_CWORD" -eq 1 ]; then
21
+ COMPREPLY=( $(compgen -W "$(cs help | grep cs | cut -d ' ' -f4)" -- "$word") )
22
+ else
23
+ local words=("${COMP_WORDS[@]}")
24
+ if [ $(echo ${words[@]} | wc -w) -eq 2 ]; then
25
+ COMPREPLY=( $(compgen -W "$(${words[@]} help | grep cs | cut -d ' ' -f5)" -- "$word") )
26
+ fi
27
+ if [ $(echo ${words[@]} | wc -w) -ge 3 ]; then
28
+ local cp1=$(echo ${words[@]} | cut -d ' ' -f1-2)
29
+ local cp2=$(echo ${words[@]} | cut -d ' ' -f3)
30
+ if [ "$cp2" != "help" ]; then
31
+ local cp3=$($cp1 help $cp2)
32
+ COMPREPLY=( $(compgen -W "$(echo $cp3 | awk 'NR>1{print $1}' RS=[ FS='\=')" -- "$word") )
33
+ fi
34
+ fi
35
+ fi
36
+ }
37
+
38
+ complete -F _cs cs
@@ -51,6 +51,12 @@ module CloudstackCli
51
51
  exit 1
52
52
  end
53
53
  end
54
+
55
+ unless config.key?(:url) && config.key?(:api_key) && config.key?(:secret_key)
56
+ say "The environment #{env || '\'-\''} contains no valid data.", :red
57
+ say "Please check with 'cs environment list' and set a valid default environment."
58
+ exit 1
59
+ end
54
60
  config
55
61
  end
56
62
 
@@ -29,6 +29,20 @@ module CloudstackCli
29
29
  :config_file => options[:config_file]
30
30
  end
31
31
 
32
+ desc "completion", "loads the shell scripts for tab auto-completion"
33
+ option :shell, default: 'bash'
34
+ def completion
35
+ shell_script = File.join(
36
+ File.dirname(__FILE__), '..', '..',
37
+ 'completions', "cs.#{options[:shell]}"
38
+ )
39
+ unless File.file? shell_script
40
+ say "Specified cloudstack-cli shell auto-completion rules for #{options[:shell]} not found.", :red
41
+ exit 1
42
+ end
43
+ puts File.read shell_script
44
+ end
45
+
32
46
  desc "command COMMAND [arg1=val1 arg2=val2...]", "run a custom api command"
33
47
  def command(command, *args)
34
48
  params = {'command' => command}
@@ -4,7 +4,7 @@ class Environment < CloudstackCli::Base
4
4
  def list
5
5
  config = parse_config_file
6
6
  table = [%w(Name URL Default)]
7
- table << ['-', config[:url], !config[:default]]
7
+ table << ['-', config[:url], !config[:default]] if config.key?(:url)
8
8
  config.each_key do |key|
9
9
  unless key.class == Symbol
10
10
  table << [key, config[key][:url], key == config[:default]]
@@ -64,14 +64,26 @@ class Environment < CloudstackCli::Base
64
64
  desc "delete", "delete a Cloudstack connection"
65
65
  def delete(env)
66
66
  config = parse_config_file
67
- if config.delete(env)
68
- exit unless yes?("Do you really want to delete environment #{env}? [y/N]", :yellow)
69
- config.delete :default if config[:default] == env
70
- write_config_file(config)
71
- say "OK.", :green
67
+ if env == '-'
68
+ config.delete(:url)
69
+ config.delete(:api_key)
70
+ config.delete(:secret_key)
71
+ # check if the config file is empty, delete it if true
72
+ if config.keys.select { |key| !key.is_a? Symbol}.size == 0
73
+ exit unless yes?("Do you really want to delete environment #{env}? [y/N]", :yellow)
74
+ File.delete(options[:config_file])
75
+ say "OK.", :green
76
+ exit
77
+ end
78
+ elsif config.delete(env)
72
79
  else
73
80
  say "Environment #{env} does not exist.", :red
81
+ exit 1
74
82
  end
83
+ exit unless yes?("Do you really want to delete environment #{env}? [y/N]", :yellow)
84
+ config.delete :default if config[:default] == env
85
+ write_config_file(config)
86
+ say "OK.", :green
75
87
  end
76
88
 
77
89
  desc "default [ENV]", "show or set the default environment"
@@ -84,7 +96,7 @@ class Environment < CloudstackCli::Base
84
96
  exit 0
85
97
  end
86
98
 
87
- if env == '-'
99
+ if env == '-' && config.key?(:url)
88
100
  config.delete :default
89
101
  else
90
102
  unless config.has_key?(env)
@@ -1,3 +1,3 @@
1
1
  module CloudstackCli
2
- VERSION = "0.7.4"
2
+ VERSION = "0.8.0"
3
3
  end
metadata CHANGED
@@ -1,75 +1,75 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cloudstack-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.4
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nik Wolfgramm
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-20 00:00:00.000000000 Z
11
+ date: 2014-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rdoc
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '4.1'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10.1'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.1'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: thor
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0.18'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.18'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: cloudstack_client
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0.4'
62
- - - '>='
62
+ - - ">="
63
63
  - !ruby/object:Gem::Version
64
64
  version: 0.4.4
65
65
  type: :runtime
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
- - - ~>
69
+ - - "~>"
70
70
  - !ruby/object:Gem::Version
71
71
  version: '0.4'
72
- - - '>='
72
+ - - ">="
73
73
  - !ruby/object:Gem::Version
74
74
  version: 0.4.4
75
75
  description: cloudstack-cli is a CloudStack API command line client written in Ruby.
@@ -80,13 +80,15 @@ executables:
80
80
  extensions: []
81
81
  extra_rdoc_files: []
82
82
  files:
83
- - .gitignore
83
+ - ".gitignore"
84
+ - CHANGELOG.md
84
85
  - Gemfile
85
86
  - Gemfile.lock
86
87
  - LICENSE.txt
87
88
  - README.md
88
89
  - bin/cs
89
90
  - cloudstack-cli.gemspec
91
+ - completions/cs.bash
90
92
  - lib/cloudstack-cli.rb
91
93
  - lib/cloudstack-cli/base.rb
92
94
  - lib/cloudstack-cli/cli.rb
@@ -128,23 +130,23 @@ licenses:
128
130
  metadata: {}
129
131
  post_install_message:
130
132
  rdoc_options:
131
- - --line-numbers
132
- - --inline-source
133
+ - "--line-numbers"
134
+ - "--inline-source"
133
135
  require_paths:
134
136
  - lib
135
137
  required_ruby_version: !ruby/object:Gem::Requirement
136
138
  requirements:
137
- - - '>='
139
+ - - ">="
138
140
  - !ruby/object:Gem::Version
139
141
  version: 1.9.3
140
142
  required_rubygems_version: !ruby/object:Gem::Requirement
141
143
  requirements:
142
- - - '>='
144
+ - - ">="
143
145
  - !ruby/object:Gem::Version
144
146
  version: '0'
145
147
  requirements: []
146
148
  rubyforge_project:
147
- rubygems_version: 2.0.3
149
+ rubygems_version: 2.2.0
148
150
  signing_key:
149
151
  specification_version: 4
150
152
  summary: cloudstack-cli CloudStack API client