chef-fork 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/knife-and-fork.md +41 -0
- data/lib/chef/fork/commands.rb +6 -0
- data/lib/chef/fork/commands/cookbook.rb +30 -1
- data/lib/chef/fork/commands/data.rb +41 -0
- data/lib/chef/fork/commands/environment.rb +31 -0
- data/lib/chef/fork/commands/help.rb +20 -3
- data/lib/chef/fork/commands/node.rb +44 -0
- data/lib/chef/fork/commands/role.rb +32 -0
- data/lib/chef/fork/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 389fc33ea14f3940f41e337f0a43bb2acb33f524
|
4
|
+
data.tar.gz: 94fe767539b6be91ae9dacc76b2f92ec93a04771
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d0a2d1eba11e63465a0b7e9b7dc926c7d6c148dbe392ca82a4acb1c4a6c9d752ff3204c479b40ccb1bfaa20db0812ec81ffabe74daaed3c436d57b381bd1745
|
7
|
+
data.tar.gz: 8153a3af4141e0b145548a628afc61ab60a9321682a6b05a173fb64f19025c55bd3a8cef8381b3a79534c5ae3db4e6c52e81447ec70a591a804eec92017021fd
|
data/knife-and-fork.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# knife and fork
|
2
|
+
|
3
|
+
## Environment
|
4
|
+
|
5
|
+
```sh
|
6
|
+
$ knife environment from file environments/foo.rb
|
7
|
+
```
|
8
|
+
|
9
|
+
```sh
|
10
|
+
$ fork environment upload foo
|
11
|
+
```
|
12
|
+
|
13
|
+
## Role
|
14
|
+
|
15
|
+
```sh
|
16
|
+
$ knife role from file roles/foo.rb
|
17
|
+
```
|
18
|
+
|
19
|
+
```sh
|
20
|
+
$ fork role upload foo
|
21
|
+
```
|
22
|
+
|
23
|
+
## DataBag
|
24
|
+
|
25
|
+
```sh
|
26
|
+
$ knife data bag from file foo data_bags/foo/bar.json
|
27
|
+
```
|
28
|
+
|
29
|
+
```sh
|
30
|
+
$ fork databag upload foo bar
|
31
|
+
```
|
32
|
+
|
33
|
+
## Cookbook
|
34
|
+
|
35
|
+
```sh
|
36
|
+
$ knife cookbook upload foo
|
37
|
+
```
|
38
|
+
|
39
|
+
```sh
|
40
|
+
$ fork cookbook upload foo
|
41
|
+
```
|
data/lib/chef/fork/commands.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# -*- coding: utf-8 -*-
|
3
3
|
|
4
|
+
require "chef/rest"
|
5
|
+
|
4
6
|
class Chef
|
5
7
|
class Fork
|
6
8
|
module Commands
|
@@ -27,6 +29,10 @@ class Chef
|
|
27
29
|
def optparse()
|
28
30
|
@application.optparse
|
29
31
|
end
|
32
|
+
|
33
|
+
def rest()
|
34
|
+
@rest ||= Chef::REST.new(Chef::Config[:chef_server_url])
|
35
|
+
end
|
30
36
|
end
|
31
37
|
end
|
32
38
|
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
# -*- coding: utf-8 -*-
|
3
3
|
|
4
4
|
require "chef/fork/commands"
|
5
|
+
require "json"
|
5
6
|
|
6
7
|
class Chef
|
7
8
|
class Fork
|
@@ -10,6 +11,10 @@ class Chef
|
|
10
11
|
def run(args=[])
|
11
12
|
rest = optparse.order(args)
|
12
13
|
case rest.first
|
14
|
+
when "edit"
|
15
|
+
cookbook_edit(rest.slice(1..-1) || [])
|
16
|
+
when "list"
|
17
|
+
cookbook_list(rest.slice(1..-1) || [])
|
13
18
|
when "show"
|
14
19
|
cookbook_show(rest.slice(1..-1) || [])
|
15
20
|
when "upload"
|
@@ -20,11 +25,35 @@ class Chef
|
|
20
25
|
end
|
21
26
|
|
22
27
|
private
|
23
|
-
def
|
28
|
+
def cookbook_edit(args=[])
|
24
29
|
raise(NotImplementedError.new(args.inspect))
|
25
30
|
end
|
26
31
|
|
32
|
+
def cookbook_list(args=[])
|
33
|
+
raise(NotImplementedError.new(args.inspect))
|
34
|
+
end
|
35
|
+
|
36
|
+
def cookbook_show(args=[])
|
37
|
+
if cookbook_name = args.shift
|
38
|
+
if args.empty?
|
39
|
+
cookbook_version = "_latest"
|
40
|
+
STDOUT.puts(JSON.pretty_generate(rest.get_rest("cookbooks/#{cookbook_name}/#{cookbook_version}").to_hash()))
|
41
|
+
else
|
42
|
+
args.each do |cookbook_version|
|
43
|
+
STDOUT.puts(JSON.pretty_generate(rest.get_rest("cookbooks/#{cookbook_name}/#{cookbook_version}").to_hash()))
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
27
49
|
def cookbook_upload(args=[])
|
50
|
+
cookbook_paths = [ Chef::Config[:cookbook_path] ].flatten
|
51
|
+
args.each do |cookbook_name|
|
52
|
+
candidates = cookbook_paths.map { |path| File.join(path, cookbook_name) }
|
53
|
+
if file = candidates.select { |candidate| File.exist?(candidate) }.first
|
54
|
+
p([cookbook_name, file])
|
55
|
+
end
|
56
|
+
end
|
28
57
|
raise(NotImplementedError.new(args.inspect))
|
29
58
|
end
|
30
59
|
end
|
@@ -1,7 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# -*- coding: utf-8 -*-
|
3
3
|
|
4
|
+
require "chef/data_bag"
|
5
|
+
require "chef/data_bag_item"
|
4
6
|
require "chef/fork/commands"
|
7
|
+
require "json"
|
5
8
|
|
6
9
|
class Chef
|
7
10
|
class Fork
|
@@ -20,15 +23,25 @@ class Chef
|
|
20
23
|
private
|
21
24
|
def data_bag(args=[])
|
22
25
|
case args.first
|
26
|
+
when "edit"
|
27
|
+
data_bag_edit(args.slice(1..-1) || [])
|
23
28
|
when "from"
|
24
29
|
data_bag_from(args.slice(1..-1) || [])
|
30
|
+
when "list"
|
31
|
+
data_bag_list(args.slice(1..-1) || [])
|
25
32
|
when "show"
|
26
33
|
data_bag_show(args.slice(1..-1) || [])
|
34
|
+
when "upload"
|
35
|
+
data_bag_upload(args.slice(1..-1) || [])
|
27
36
|
else
|
28
37
|
raise(NameError.new(args.inspect))
|
29
38
|
end
|
30
39
|
end
|
31
40
|
|
41
|
+
def data_bag_edit(args=[])
|
42
|
+
raise(NotImplementedError.new(args.inspect))
|
43
|
+
end
|
44
|
+
|
32
45
|
def data_bag_from(args=[])
|
33
46
|
case args.first
|
34
47
|
when "file"
|
@@ -39,10 +52,38 @@ class Chef
|
|
39
52
|
end
|
40
53
|
|
41
54
|
def data_bag_from_file(args=[])
|
55
|
+
data_bag_uploda(args)
|
56
|
+
end
|
57
|
+
|
58
|
+
def data_bag_list(args=[])
|
42
59
|
raise(NotImplementedError.new(args.inspect))
|
43
60
|
end
|
44
61
|
|
45
62
|
def data_bag_show(args=[])
|
63
|
+
if data_bag_name = args.shift
|
64
|
+
if args.empty?
|
65
|
+
data_bag = Chef::DataBag.load(data_bag_name)
|
66
|
+
STDOUT.puts(JSON.pretty_generate(data_bag.to_hash()))
|
67
|
+
else
|
68
|
+
args.each do |data_bag_item_name|
|
69
|
+
data_bag_item = Chef::DataBagItem.load(data_bag_name, data_bag_item_name)
|
70
|
+
STDOUT.puts(JSON.pretty_generate(data_bag_item.to_hash()))
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def data_bag_upload(args=[])
|
77
|
+
data_bag_paths = [ Chef::Config[:data_bag_path] ].flatten
|
78
|
+
if data_bag_name = args.shift
|
79
|
+
args.each do |data_bag_item_name|
|
80
|
+
candidates = data_bag_paths.map { |path| File.join(path, data_bag_name, "#{data_bag_item_name}.json") }
|
81
|
+
if file = candidates.select { |candidate| File.exist?(candidate) }.first
|
82
|
+
data_bag_item = Chef::DataBagItem.from_hash(JSON.load(File.read(file)))
|
83
|
+
p(data_bag_item) # TODO: do upload
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
46
87
|
raise(NotImplementedError.new(args.inspect))
|
47
88
|
end
|
48
89
|
end
|
@@ -1,7 +1,9 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# -*- coding: utf-8 -*-
|
3
3
|
|
4
|
+
require "chef/environment"
|
4
5
|
require "chef/fork/commands"
|
6
|
+
require "json"
|
5
7
|
|
6
8
|
class Chef
|
7
9
|
class Fork
|
@@ -10,16 +12,26 @@ class Chef
|
|
10
12
|
def run(args=[])
|
11
13
|
rest = optparse.order(args)
|
12
14
|
case rest.first
|
15
|
+
when "edit"
|
16
|
+
environment_edit(rest.slice(1..-1) || [])
|
13
17
|
when "from"
|
14
18
|
environment_from(rest.slice(1..-1) || [])
|
19
|
+
when "list"
|
20
|
+
environment_list(rest.slice(1..-1) || [])
|
15
21
|
when "show"
|
16
22
|
environment_show(rest.slice(1..-1) || [])
|
23
|
+
when "upload"
|
24
|
+
environment_upload(rest.slice(1..-1) || [])
|
17
25
|
else
|
18
26
|
raise(NameError.new(rest.inspect))
|
19
27
|
end
|
20
28
|
end
|
21
29
|
|
22
30
|
private
|
31
|
+
def environment_edit(args=[])
|
32
|
+
raise(NotImplementedError.new(args.inspect))
|
33
|
+
end
|
34
|
+
|
23
35
|
def environment_from(args=[])
|
24
36
|
case args.first
|
25
37
|
when "file"
|
@@ -30,10 +42,29 @@ class Chef
|
|
30
42
|
end
|
31
43
|
|
32
44
|
def environment_from_file(args=[])
|
45
|
+
environment_upload(args)
|
46
|
+
end
|
47
|
+
|
48
|
+
def environment_list(args=[])
|
33
49
|
raise(NotImplementedError.new(args.inspect))
|
34
50
|
end
|
35
51
|
|
36
52
|
def environment_show(args=[])
|
53
|
+
args.each do |environment_name|
|
54
|
+
environment = Chef::Environment.load(environment_name)
|
55
|
+
STDOUT.puts(JSON.pretty_generate(environment_to_hash(environment.to_hash())))
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def environment_upload(args=[])
|
60
|
+
environment_paths = [ Chef::Config[:environment_path] ].flatten
|
61
|
+
args.each do |environment_name|
|
62
|
+
candidates = environment_paths.map { |path| File.join(path, "#{environment_name}.rb") }
|
63
|
+
if file = candidates.select { |candidate| File.exist?(candidate) }.first
|
64
|
+
environment = Chef::Environment.load_from_file(environment_name)
|
65
|
+
p(environment) # TODO: do upload
|
66
|
+
end
|
67
|
+
end
|
37
68
|
raise(NotImplementedError.new(args.inspect))
|
38
69
|
end
|
39
70
|
end
|
@@ -1,16 +1,33 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# -*- coding: utf-8 -*-
|
3
3
|
|
4
|
-
require "rbconfig"
|
5
4
|
require "chef/fork/commands"
|
5
|
+
require "json"
|
6
|
+
require "rbconfig"
|
6
7
|
|
7
8
|
class Chef
|
8
9
|
class Fork
|
9
10
|
module Commands
|
10
11
|
class Help < Noop
|
11
12
|
def run(args=[])
|
12
|
-
|
13
|
-
|
13
|
+
if command = args.shift
|
14
|
+
case command
|
15
|
+
when "commands"
|
16
|
+
paths = $LOAD_PATH.map { |path|
|
17
|
+
File.join(path, "chef", "fork", "commands")
|
18
|
+
}
|
19
|
+
commands = paths.map { |path|
|
20
|
+
Dir.glob(File.join(path, "*.rb")).map { |file| File.basename(file, ".rb") }
|
21
|
+
}.flatten
|
22
|
+
STDOUT.puts(JSON.pretty_generate(commands.sort.uniq))
|
23
|
+
else
|
24
|
+
raise(NotImplementedError.new(command.inspect))
|
25
|
+
end
|
26
|
+
else
|
27
|
+
ruby = File.join(RbConfig::CONFIG["bindir"], RbConfig::CONFIG["ruby_install_name"])
|
28
|
+
exec(ruby, $0, "--help")
|
29
|
+
exit(127)
|
30
|
+
end
|
14
31
|
end
|
15
32
|
end
|
16
33
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
|
4
|
+
require "chef/fork/commands"
|
5
|
+
require "chef/node"
|
6
|
+
require "json"
|
7
|
+
|
8
|
+
class Chef
|
9
|
+
class Fork
|
10
|
+
module Commands
|
11
|
+
class Node < Noop
|
12
|
+
def run(args=[])
|
13
|
+
rest = optparse.order(args)
|
14
|
+
case rest.first
|
15
|
+
when "edit"
|
16
|
+
node_edit(rest.slice(1..-1) || [])
|
17
|
+
when "list"
|
18
|
+
node_list(rest.slice(1..-1) || [])
|
19
|
+
when "show"
|
20
|
+
node_show(rest.slice(1..-1) || [])
|
21
|
+
else
|
22
|
+
raise(NameError.new(rest.inspect))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
def node_edit(args=[])
|
28
|
+
raise(NotImplementedError.new(args.inspect))
|
29
|
+
end
|
30
|
+
|
31
|
+
def node_list(args=[])
|
32
|
+
raise(NotImplementedError.new(args.inspect))
|
33
|
+
end
|
34
|
+
|
35
|
+
def node_show(args=[])
|
36
|
+
args.each do |node_name|
|
37
|
+
node = Chef::Node.load(node_name)
|
38
|
+
STDOUT.puts(JSON.pretty_generate(node.to_hash()))
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -2,6 +2,8 @@
|
|
2
2
|
# -*- coding: utf-8 -*-
|
3
3
|
|
4
4
|
require "chef/fork/commands"
|
5
|
+
require "chef/role"
|
6
|
+
require "json"
|
5
7
|
|
6
8
|
class Chef
|
7
9
|
class Fork
|
@@ -10,15 +12,26 @@ class Chef
|
|
10
12
|
def run(args=[])
|
11
13
|
rest = optparse.order(args)
|
12
14
|
case rest.first
|
15
|
+
when "edit"
|
16
|
+
role_edit(rest.slice(1..-1) || [])
|
13
17
|
when "from"
|
14
18
|
role_from(rest.slice(1..-1) || [])
|
19
|
+
when "list"
|
20
|
+
role_list(rest.slice(1..-1) || [])
|
15
21
|
when "show"
|
16
22
|
role_show(rest.slice(1..-1) || [])
|
23
|
+
when "upload"
|
24
|
+
role_upload(rest.slice(1..-1) || [])
|
17
25
|
else
|
18
26
|
raise(NameError.new(rest.inspect))
|
19
27
|
end
|
20
28
|
end
|
21
29
|
|
30
|
+
private
|
31
|
+
def role_edit(args=[])
|
32
|
+
raise(NotImplementedError.new(args.inspect))
|
33
|
+
end
|
34
|
+
|
22
35
|
def role_from(args=[])
|
23
36
|
case args.shift
|
24
37
|
when "file"
|
@@ -29,10 +42,29 @@ class Chef
|
|
29
42
|
end
|
30
43
|
|
31
44
|
def role_from_file(args=[])
|
45
|
+
role_upload(args)
|
46
|
+
end
|
47
|
+
|
48
|
+
def role_list(args=[])
|
32
49
|
raise(NotImplementedError.new(args.inspect))
|
33
50
|
end
|
34
51
|
|
35
52
|
def role_show(args=[])
|
53
|
+
args.each do |role_name|
|
54
|
+
role = Chef::Role.load(role_name)
|
55
|
+
STDOUT.puts(JSON.pretty_generate(role_to_hash(role.to_hash())))
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def role_upload(args=[])
|
60
|
+
role_paths = [ Chef::Config[:role_path] ].flatten
|
61
|
+
args.each do |role_name|
|
62
|
+
candidates = role_paths.map { |path| File.join(path, "#{role_name}.rb") }
|
63
|
+
if file = candidates.select { |candidate| File.exist?(candidate) }.first
|
64
|
+
role = Chef::Role.from_disk(role_name)
|
65
|
+
p(role) # TODO: do upload
|
66
|
+
end
|
67
|
+
end
|
36
68
|
raise(NotImplementedError.new(args.inspect))
|
37
69
|
end
|
38
70
|
end
|
data/lib/chef/fork/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chef-fork
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yamashita Yuu
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-06-
|
11
|
+
date: 2015-06-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -81,6 +81,7 @@ files:
|
|
81
81
|
- Rakefile
|
82
82
|
- bin/fork
|
83
83
|
- chef-fork.gemspec
|
84
|
+
- knife-and-fork.md
|
84
85
|
- lib/chef/fork.rb
|
85
86
|
- lib/chef/fork/application.rb
|
86
87
|
- lib/chef/fork/commands.rb
|
@@ -90,6 +91,7 @@ files:
|
|
90
91
|
- lib/chef/fork/commands/databag.rb
|
91
92
|
- lib/chef/fork/commands/environment.rb
|
92
93
|
- lib/chef/fork/commands/help.rb
|
94
|
+
- lib/chef/fork/commands/node.rb
|
93
95
|
- lib/chef/fork/commands/role.rb
|
94
96
|
- lib/chef/fork/commands/ssh.rb
|
95
97
|
- lib/chef/fork/version.rb
|