knife-joyent 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +36 -11
- data/lib/knife-joyent/joyent_flavor_list.rb +2 -1
- data/lib/knife-joyent/joyent_image_list.rb +1 -1
- data/lib/knife-joyent/joyent_key_list.rb +1 -1
- data/lib/knife-joyent/joyent_server_list.rb +16 -6
- data/lib/knife-joyent/joyent_snapshot_list.rb +1 -1
- data/lib/knife-joyent/joyent_tag_create.rb +38 -0
- data/lib/knife-joyent/joyent_tag_delete.rb +62 -0
- data/lib/knife-joyent/joyent_tag_list.rb +35 -0
- data/lib/knife-joyent/version.rb +1 -1
- metadata +6 -3
data/README.md
CHANGED
@@ -1,27 +1,50 @@
|
|
1
1
|
Knife Joyent
|
2
2
|
===
|
3
3
|
|
4
|
-
This is a Knife plugin for Joyent CloudAPI. This plugin gives knife
|
5
|
-
the ability to create, bootstrap, and manage servers on the Joyent Public Cloud
|
6
|
-
|
4
|
+
This is a [Knife](http://wiki.opscode.com/display/chef/Knife) plugin for Joyent CloudAPI. This plugin gives knife
|
5
|
+
the ability to create, bootstrap, and manage servers on the [Joyent Public Cloud](http://www.joyentcloud.com/) as well as Cloud providers powered by Joyent's [SmartDataCenter](http://www.joyent.com/products/smartdatacenter/) product offering.
|
6
|
+
|
7
|
+
For more information on Joyent CloudAPI, see: [CloudAPI Documentation](api.joyentcloud.com/docs)
|
7
8
|
|
8
9
|
## Installation
|
9
10
|
|
10
|
-
With chef already installed (> 0.10.0)
|
11
|
+
With chef already installed ``(> 0.10.0)``:
|
11
12
|
|
12
13
|
gem install knife-joyent
|
13
14
|
|
14
15
|
## Usage
|
15
16
|
|
16
|
-
For
|
17
|
+
For a list of commands:
|
17
18
|
|
18
19
|
knife joyent --help
|
19
20
|
|
21
|
+
Currently available commands:
|
22
|
+
|
23
|
+
knife joyent flavor list <options>
|
24
|
+
knife joyent image list <options>
|
25
|
+
knife joyent key add -f <keyfile> -k <name>
|
26
|
+
knife joyent key delete <name>
|
27
|
+
knife joyent key list
|
28
|
+
knife joyent server create (options)
|
29
|
+
knife joyent server list <options>
|
30
|
+
knife joyent server reboot <server_id>
|
31
|
+
knife joyent server resize <server_id> -f <flavor>
|
32
|
+
knife joyent server start <server_id>
|
33
|
+
knife joyent server stop <server_id>
|
34
|
+
knife joyent snapshot create <server> <snapshot_name>
|
35
|
+
knife joyent snapshot delete <server> <snapshot_name>
|
36
|
+
knife joyent snapshot list <server_id>
|
37
|
+
knife joyent tag create <server_id> <tag> <value>
|
38
|
+
knife joyent tag delete <server_id> <tag>
|
39
|
+
knife joyent tag delete <server_id> -A
|
40
|
+
knife joyent tag list <server>
|
41
|
+
|
20
42
|
## Configuration
|
21
43
|
|
22
44
|
The following options can be specified in your knife configuration file
|
45
|
+
``knife.rb``
|
23
46
|
|
24
|
-
|
47
|
+
#### Required
|
25
48
|
|
26
49
|
You can authenticate against CloudAPI using either:
|
27
50
|
|
@@ -36,12 +59,14 @@ or, your ssh key
|
|
36
59
|
knife[:joyent_keyname] = "Name of key stored on Joyent"
|
37
60
|
knife[:joyent_keyfile] = "/path/to/your/private/key"
|
38
61
|
|
39
|
-
|
62
|
+
#### Optional
|
63
|
+
|
64
|
+
**joyent_api_url**
|
40
65
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
66
|
+
Specify a custom API endpoint, this is required if you want to specify
|
67
|
+
where you want to provision your machines, or if you are using knife with a
|
68
|
+
provider powered by [SmartDataCenter](http://www.joyent.com/products/smartdatacenter/).
|
69
|
+
|
45
70
|
# Defaults to https://us-west-1.api.joyentcloud.com/
|
46
71
|
knife[:joyent_api_url] = "https://us-sw-1.api.joyentcloud.com/"
|
47
72
|
|
@@ -14,24 +14,34 @@ module KnifeJoyent
|
|
14
14
|
ui.color('Name', :bold),
|
15
15
|
ui.color('State', :bold),
|
16
16
|
ui.color('Type', :bold),
|
17
|
-
ui.color('
|
17
|
+
ui.color('Image', :bold),
|
18
18
|
ui.color('IPs', :bold),
|
19
|
-
ui.color('
|
19
|
+
ui.color('RAM', :bold),
|
20
20
|
ui.color('Disk', :bold),
|
21
21
|
]
|
22
22
|
|
23
23
|
self.connection.servers.sort_by(&:name).each do |s|
|
24
24
|
servers << s.id.to_s
|
25
25
|
servers << s.name
|
26
|
-
|
26
|
+
|
27
|
+
servers << case s.state
|
28
|
+
when 'running'
|
29
|
+
ui.color(s.state, :green)
|
30
|
+
when 'stopping'
|
31
|
+
when 'provisioning'
|
32
|
+
ui.color(s.state, :yellow)
|
33
|
+
when 'stopped'
|
34
|
+
ui.color(s.state, :red)
|
35
|
+
end
|
36
|
+
|
27
37
|
servers << s.type
|
28
38
|
servers << s.dataset
|
29
39
|
servers << s.ips.join(" ")
|
30
|
-
servers << s.memory.to_s
|
31
|
-
servers << s.disk.to_s
|
40
|
+
servers << "#{s.memory/1024} GB".to_s
|
41
|
+
servers << "#{s.disk/1024} GB".to_s
|
32
42
|
end
|
33
43
|
|
34
|
-
puts ui.list(servers, :
|
44
|
+
puts ui.list(servers, :uneven_columns_across, 8)
|
35
45
|
end
|
36
46
|
end
|
37
47
|
end
|
@@ -36,7 +36,7 @@ module KnifeJoyent
|
|
36
36
|
snapshots << s.created.to_s
|
37
37
|
end
|
38
38
|
|
39
|
-
puts ui.list(snapshots, :
|
39
|
+
puts ui.list(snapshots, :uneven_columns_across, 3)
|
40
40
|
rescue Fog::Compute::Joyent::Errors::NotFound
|
41
41
|
puts ui.error("Server #{server} not found.")
|
42
42
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/base')
|
2
|
+
|
3
|
+
module KnifeJoyent
|
4
|
+
class JoyentTagCreate < Chef::Knife
|
5
|
+
|
6
|
+
include KnifeJoyent::Base
|
7
|
+
|
8
|
+
banner "knife joyent tag create <server_id> <tag> <value>"
|
9
|
+
|
10
|
+
def run
|
11
|
+
server = name_args[0]
|
12
|
+
tagkey = name_args[1]
|
13
|
+
tagvalue = name_args[2]
|
14
|
+
|
15
|
+
unless server || tagkey || tagvalue
|
16
|
+
show_usage
|
17
|
+
exit 1
|
18
|
+
end
|
19
|
+
|
20
|
+
tags = [
|
21
|
+
ui.color('Name', :bold),
|
22
|
+
ui.color('Value', :bold),
|
23
|
+
]
|
24
|
+
|
25
|
+
self.connection.servers.get(server).add_tags({tagkey => tagvalue}).each do |k, v|
|
26
|
+
tags << k
|
27
|
+
tags << v
|
28
|
+
end
|
29
|
+
|
30
|
+
puts ui.color("Updated tags for #{server}", :cyan)
|
31
|
+
puts ui.list(tags, :uneven_columns_across, 2)
|
32
|
+
exit 0
|
33
|
+
rescue Excon::Errors::NotFound => e
|
34
|
+
puts ui.error("Server #{server} not found")
|
35
|
+
exit 1
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/base')
|
2
|
+
|
3
|
+
module KnifeJoyent
|
4
|
+
class JoyentTagDelete < Chef::Knife
|
5
|
+
|
6
|
+
include KnifeJoyent::Base
|
7
|
+
|
8
|
+
banner ["knife joyent tag delete <server_id> <tag>",
|
9
|
+
"knife joyent tag delete <server_id> -A"].join("\n")
|
10
|
+
|
11
|
+
|
12
|
+
option :all,
|
13
|
+
:short => "-A",
|
14
|
+
:long => "--all",
|
15
|
+
:boolean => true,
|
16
|
+
:description => "delete all tags on the machine"
|
17
|
+
|
18
|
+
def run
|
19
|
+
server_id = name_args[0]
|
20
|
+
tagname = name_args[1]
|
21
|
+
all = config[:all]
|
22
|
+
|
23
|
+
if !server_id || (all == false && !tagname) || (all && tagname)
|
24
|
+
show_usage
|
25
|
+
exit 1
|
26
|
+
end
|
27
|
+
|
28
|
+
begin
|
29
|
+
server = self.connection.servers.get(server_id)
|
30
|
+
rescue Excon::Errors::NotFound => e
|
31
|
+
puts ui.error("Server #{server_id} not found")
|
32
|
+
exit 1
|
33
|
+
end
|
34
|
+
|
35
|
+
if all
|
36
|
+
server.delete_all_tags
|
37
|
+
puts ui.color("Deleted all tags for #{server_id}", :cyan)
|
38
|
+
exit 0
|
39
|
+
else
|
40
|
+
begin
|
41
|
+
server.delete_tag(tagname)
|
42
|
+
rescue Excon::Errors::NotFound => e
|
43
|
+
puts ui.error("Tag #{tagname} on server #{server_id} not found")
|
44
|
+
exit 1
|
45
|
+
end
|
46
|
+
|
47
|
+
tags = [
|
48
|
+
ui.color('Name', :bold),
|
49
|
+
ui.color('Value', :bold),
|
50
|
+
]
|
51
|
+
|
52
|
+
server.reload.tags.each do |k, v|
|
53
|
+
tags << k
|
54
|
+
tags << v
|
55
|
+
end
|
56
|
+
puts ui.color("Deleted tag #{tagname} for #{server_id}", :cyan)
|
57
|
+
puts ui.list(tags, :uneven_columns_across, 2)
|
58
|
+
end
|
59
|
+
exit 0
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/base')
|
2
|
+
|
3
|
+
module KnifeJoyent
|
4
|
+
class JoyentTagList < Chef::Knife
|
5
|
+
|
6
|
+
include KnifeJoyent::Base
|
7
|
+
|
8
|
+
banner "knife joyent tag list <server>"
|
9
|
+
|
10
|
+
def run
|
11
|
+
server = name_args.first
|
12
|
+
|
13
|
+
unless server
|
14
|
+
show_usage
|
15
|
+
exit 1
|
16
|
+
end
|
17
|
+
|
18
|
+
tags = [
|
19
|
+
ui.color('Name', :bold),
|
20
|
+
ui.color('Value', :bold),
|
21
|
+
]
|
22
|
+
|
23
|
+
self.connection.servers.get(server).tags.each do |k, v|
|
24
|
+
tags << k
|
25
|
+
tags << v
|
26
|
+
end
|
27
|
+
|
28
|
+
puts ui.list(tags, :uneven_columns_across, 2)
|
29
|
+
exit 0
|
30
|
+
rescue Excon::Errors::NotFound => e
|
31
|
+
puts ui.error("Server #{server} not found")
|
32
|
+
exit 1
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/knife-joyent/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: knife-joyent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Kevin Chan
|
@@ -67,6 +67,9 @@ files:
|
|
67
67
|
- lib/knife-joyent/joyent_snapshot_create.rb
|
68
68
|
- lib/knife-joyent/joyent_snapshot_delete.rb
|
69
69
|
- lib/knife-joyent/joyent_snapshot_list.rb
|
70
|
+
- lib/knife-joyent/joyent_tag_create.rb
|
71
|
+
- lib/knife-joyent/joyent_tag_delete.rb
|
72
|
+
- lib/knife-joyent/joyent_tag_list.rb
|
70
73
|
- lib/knife-joyent/version.rb
|
71
74
|
has_rdoc: true
|
72
75
|
homepage: http://wiki.opscode.com/display/chef
|