capstrap 0.2.2 → 0.3.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.
- data/CHANGELOG.markdown +5 -0
- data/README.markdown +17 -0
- data/lib/capstrap.rb +1 -0
- data/lib/capstrap/cli.rb +91 -118
- data/lib/capstrap/version.rb +1 -1
- metadata +4 -4
data/CHANGELOG.markdown
CHANGED
data/README.markdown
CHANGED
@@ -39,6 +39,13 @@ To override the default cookbooks and configuration paths:
|
|
39
39
|
--config-repo=git://github.com/fnichol/chef-dna-spike.git \
|
40
40
|
--config-path=/opt/chef/config
|
41
41
|
|
42
|
+
To use a <code>rake update</code> instead of the default
|
43
|
+
<code>git submodule init && git submodule update</code> after a git update:
|
44
|
+
|
45
|
+
capstrap execute root@zland \
|
46
|
+
--cookbooks-rake-update \
|
47
|
+
--config-rake-update
|
48
|
+
|
42
49
|
To execute a chef configuration (the full monty):
|
43
50
|
|
44
51
|
capstrap execute root@zland \
|
@@ -58,6 +65,16 @@ To pull new cookbook/configuration updates and run chef-solo:
|
|
58
65
|
|
59
66
|
capstrap update root@zland
|
60
67
|
|
68
|
+
To save config options to a yaml file to be read by capstrap:
|
69
|
+
|
70
|
+
cat > "$HOME/.capstraprc" <<END_OF_CAPSTRAPRC
|
71
|
+
---
|
72
|
+
cookbooks-repo: git://github.com/fnichol/chef-repo.git
|
73
|
+
cookbooks-rake-update: true
|
74
|
+
config-repo: git://github.com/fnichol/chef-dna-spike.git
|
75
|
+
config-rake-update: true
|
76
|
+
END_OF_CAPSTRAPRC
|
77
|
+
|
61
78
|
To get more help:
|
62
79
|
|
63
80
|
capstrap help
|
data/lib/capstrap.rb
CHANGED
data/lib/capstrap/cli.rb
CHANGED
@@ -13,159 +13,124 @@ module Capstrap
|
|
13
13
|
end
|
14
14
|
|
15
15
|
desc "ruby HOST", "Install an RVM ruby on remote SSH host HOST"
|
16
|
-
method_option "ruby", :type => :string, :desc =>
|
17
|
-
"Version of ruby to install.", :default => "ree-1.8.7"
|
18
16
|
method_option "default", :type => :boolean, :desc =>
|
19
17
|
"Set this ruby to be RVM default."
|
20
18
|
def ruby(ssh_host)
|
21
19
|
@ssh_host = ssh_host
|
22
|
-
abort ">> HOST must be set" unless @ssh_host
|
23
|
-
|
24
20
|
setup_config options
|
25
|
-
|
26
|
-
config.find_and_execute_task "rvm:install:#{options[:ruby]}"
|
27
|
-
if options[:default]
|
28
|
-
config.find_and_execute_task "rvm:default:#{options[:ruby]}"
|
29
|
-
end
|
21
|
+
exec_ruby
|
30
22
|
end
|
31
23
|
|
32
24
|
desc "chef HOST", "Install chef gem on remote SSH host HOST"
|
33
|
-
method_option "ruby", :type => :string, :desc =>
|
34
|
-
"Version of ruby to install.", :default => "ree-1.8.7"
|
35
25
|
def chef(ssh_host)
|
36
26
|
@ssh_host = ssh_host
|
37
|
-
abort ">> HOST must be set" unless @ssh_host
|
38
|
-
|
39
27
|
setup_config options
|
40
|
-
|
41
|
-
invoke :ruby, [ssh_host], :ruby => options[:ruby], :default => true
|
42
|
-
config.find_and_execute_task "chef:install:lib"
|
28
|
+
exec_chef
|
43
29
|
end
|
44
30
|
|
45
31
|
desc "solo HOST", "Install chef cookbooks & config on remote SSH host HOST"
|
46
|
-
method_option "ruby", :type => :string,
|
47
|
-
:desc => "Version of ruby to install.",
|
48
|
-
:default => "ree-1.8.7",
|
49
|
-
:aliases => "-r"
|
50
|
-
method_option "cookbooks-repo", :type => :string,
|
51
|
-
:desc => "Chef cookbooks git repository URL.",
|
52
|
-
:aliases => "-c"
|
53
|
-
method_option "cookbooks-path", :type => :string,
|
54
|
-
:desc => "Install path to chef cookbooks git repository.",
|
55
|
-
:default => "/var/chef-solo",
|
56
|
-
:aliases => "-p"
|
57
|
-
method_option "cookbooks-rake-update", :type => :boolean, :desc =>
|
58
|
-
"Run rake update vs. git submodule init/update when updating cookbooks repo",
|
59
|
-
:default => false,
|
60
|
-
:aliases => "-u"
|
61
|
-
method_option "config-repo", :type => :string,
|
62
|
-
:desc => "Chef configuration git repository URL.",
|
63
|
-
:aliases => "-C"
|
64
|
-
method_option "config-path", :type => :string,
|
65
|
-
:desc => "Install path to chef configuration git repository.",
|
66
|
-
:default => "/etc/chef",
|
67
|
-
:aliases => "-P"
|
68
|
-
method_option "config-rake-update", :type => :boolean, :desc =>
|
69
|
-
"Run rake update vs. git submodule init/update when updating config repo",
|
70
|
-
:default => false,
|
71
|
-
:aliases => "-U"
|
72
32
|
def solo(ssh_host)
|
73
33
|
@ssh_host = ssh_host
|
74
|
-
abort ">> HOST must be set" unless @ssh_host
|
75
|
-
|
76
34
|
setup_config options
|
77
|
-
|
78
|
-
|
79
|
-
abort ">> --cookbooks-repo=<git_url> must be set"
|
80
|
-
end
|
81
|
-
unless options["config-repo"]
|
82
|
-
abort ">> --config-repo=<git_url> must be set"
|
83
|
-
end
|
84
|
-
|
85
|
-
invoke :chef, [ssh_host], :ruby => options[:ruby], :default => true
|
86
|
-
config.find_and_execute_task "chef:install:cookbooks"
|
87
|
-
config.find_and_execute_task "chef:install:config"
|
35
|
+
assert_repos_set
|
36
|
+
exec_solo
|
88
37
|
end
|
89
38
|
|
90
39
|
desc "execute HOST", "Executes chef solo config on remote SSH host HOST"
|
91
|
-
method_option "ruby", :type => :string,
|
92
|
-
:desc => "Version of ruby to install.",
|
93
|
-
:default => "ree-1.8.7",
|
94
|
-
:aliases => "-r"
|
95
|
-
method_option "cookbooks-repo", :type => :string,
|
96
|
-
:desc => "Chef cookbooks git repository URL.",
|
97
|
-
:aliases => "-c"
|
98
|
-
method_option "cookbooks-path", :type => :string,
|
99
|
-
:desc => "Install path to chef cookbooks git repository.",
|
100
|
-
:default => "/var/chef-solo",
|
101
|
-
:aliases => "-p"
|
102
|
-
method_option "cookbooks-rake-update", :type => :boolean, :desc =>
|
103
|
-
"Run rake update vs. git submodule init/update when updating cookbooks repo",
|
104
|
-
:default => false,
|
105
|
-
:aliases => "-u"
|
106
|
-
method_option "config-repo", :type => :string,
|
107
|
-
:desc => "Chef configuration git repository URL.",
|
108
|
-
:aliases => "-C"
|
109
|
-
method_option "config-path", :type => :string,
|
110
|
-
:desc => "Install path to chef configuration git repository.",
|
111
|
-
:default => "/etc/chef",
|
112
|
-
:aliases => "-P"
|
113
|
-
method_option "config-rake-update", :type => :boolean, :desc =>
|
114
|
-
"Run rake update vs. git submodule init/update when updating config repo",
|
115
|
-
:default => false,
|
116
|
-
:aliases => "-U"
|
117
40
|
def execute(ssh_host)
|
118
41
|
@ssh_host = ssh_host
|
119
|
-
|
42
|
+
setup_config options
|
43
|
+
assert_repos_set
|
44
|
+
exec_execute
|
45
|
+
end
|
120
46
|
|
47
|
+
desc "update HOST", "Updates and executes chef solo on remote SSH host HOST"
|
48
|
+
def update(ssh_host)
|
49
|
+
@ssh_host = ssh_host
|
121
50
|
setup_config options
|
51
|
+
exec_update
|
52
|
+
end
|
53
|
+
|
54
|
+
[:ruby, :chef, :solo, :execute, :update].each do |task|
|
55
|
+
method_option "config", :for => task, :type => :string,
|
56
|
+
:desc => "Read from alternative configuration.",
|
57
|
+
:default => File.join(ENV['HOME'], ".capstraprc"),
|
58
|
+
:aliases => "-f"
|
122
59
|
|
123
|
-
|
60
|
+
method_option "ruby", :for => task, :type => :string,
|
61
|
+
:desc => "Version of ruby to install.",
|
62
|
+
:default => "ree-1.8.7"
|
63
|
+
end
|
64
|
+
|
65
|
+
[:chef, :solo, :execute, :update].each do |task|
|
66
|
+
method_option "cookbooks-path", :for => task, :type => :string,
|
67
|
+
:desc => "Install path to chef cookbooks git repository.",
|
68
|
+
:default => "/var/chef-solo",
|
69
|
+
:aliases => "-p"
|
70
|
+
|
71
|
+
method_option "cookbooks-rake-update", :for => task, :type => :boolean,
|
72
|
+
:desc => "Run rake update vs. git submodule init/update when updating cookbooks repo",
|
73
|
+
:default => false,
|
74
|
+
:aliases => "-u"
|
75
|
+
|
76
|
+
method_option "config-path", :for => task, :type => :string,
|
77
|
+
:desc => "Install path to chef configuration git repository.",
|
78
|
+
:default => "/etc/chef",
|
79
|
+
:aliases => "-P"
|
80
|
+
|
81
|
+
method_option "config-rake-update", :for => task, :type => :boolean,
|
82
|
+
:desc => "Run rake update vs. git submodule init/update when updating config repo",
|
83
|
+
:default => false,
|
84
|
+
:aliases => "-U"
|
85
|
+
end
|
86
|
+
|
87
|
+
[:chef, :solo, :execute].each do |task|
|
88
|
+
method_option "cookbooks-repo", :for => task, :type => :string,
|
89
|
+
:desc => "Chef cookbooks git repository URL.",
|
90
|
+
:aliases => "-c"
|
91
|
+
|
92
|
+
method_option "config-repo", :for => task, :type => :string,
|
93
|
+
:desc => "Chef configuration git repository URL.",
|
94
|
+
:aliases => "-C"
|
95
|
+
end
|
96
|
+
|
97
|
+
private
|
98
|
+
|
99
|
+
def assert_repos_set
|
100
|
+
unless config.fetch(:cookbooks_repo)
|
124
101
|
abort ">> --cookbooks-repo=<git_url> must be set"
|
125
102
|
end
|
126
|
-
unless
|
103
|
+
unless config.fetch(:config_repo)
|
127
104
|
abort ">> --config-repo=<git_url> must be set"
|
128
105
|
end
|
106
|
+
end
|
129
107
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
config.find_and_execute_task "chef:execute:solo"
|
108
|
+
def exec_ruby
|
109
|
+
config.find_and_execute_task "rvm:install:#{config.fetch(:ruby)}"
|
110
|
+
if options[:default]
|
111
|
+
config.find_and_execute_task "rvm:default:#{config.fetch(:ruby)}"
|
112
|
+
end
|
136
113
|
end
|
137
114
|
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
:aliases => "-r"
|
143
|
-
method_option "cookbooks-path", :type => :string,
|
144
|
-
:desc => "Install path to chef cookbooks git repository.",
|
145
|
-
:default => "/var/chef-solo",
|
146
|
-
:aliases => "-p"
|
147
|
-
method_option "cookbooks-rake-update", :type => :boolean, :desc =>
|
148
|
-
"Run rake update vs. git submodule init/update when updating cookbooks repo",
|
149
|
-
:default => false,
|
150
|
-
:aliases => "-u"
|
151
|
-
method_option "config-path", :type => :string,
|
152
|
-
:desc => "Install path to chef configuration git repository.",
|
153
|
-
:default => "/etc/chef",
|
154
|
-
:aliases => "-P"
|
155
|
-
method_option "config-rake-update", :type => :boolean, :desc =>
|
156
|
-
"Run rake update vs. git submodule init/update when updating config repo",
|
157
|
-
:default => false,
|
158
|
-
:aliases => "-U"
|
159
|
-
def update(ssh_host)
|
160
|
-
@ssh_host = ssh_host
|
161
|
-
abort ">> HOST must be set" unless @ssh_host
|
115
|
+
def exec_chef
|
116
|
+
exec_ruby
|
117
|
+
config.find_and_execute_task "chef:install:lib"
|
118
|
+
end
|
162
119
|
|
163
|
-
|
120
|
+
def exec_solo
|
121
|
+
exec_chef
|
122
|
+
config.find_and_execute_task "chef:install:cookbooks"
|
123
|
+
config.find_and_execute_task "chef:install:config"
|
124
|
+
end
|
164
125
|
|
165
|
-
|
126
|
+
def exec_execute
|
127
|
+
exec_solo
|
128
|
+
config.find_and_execute_task "chef:execute:solo"
|
166
129
|
end
|
167
130
|
|
168
|
-
|
131
|
+
def exec_update
|
132
|
+
config.find_and_execute_task "chef:execute:update"
|
133
|
+
end
|
169
134
|
|
170
135
|
def config
|
171
136
|
@config ||= prep_config
|
@@ -184,7 +149,15 @@ module Capstrap
|
|
184
149
|
config
|
185
150
|
end
|
186
151
|
|
187
|
-
def setup_config(
|
152
|
+
def setup_config(cli_options)
|
153
|
+
abort ">> HOST must be set" unless @ssh_host
|
154
|
+
|
155
|
+
options = Hash.new
|
156
|
+
options.merge!(cli_options)
|
157
|
+
if File.exists?(options["config"])
|
158
|
+
options.merge!(YAML::load_file(options["config"]))
|
159
|
+
end
|
160
|
+
|
188
161
|
[
|
189
162
|
{:sym => :ruby, :opt => "ruby"},
|
190
163
|
{:sym => :cookbooks_repo, :opt => "cookbooks-repo"},
|
data/lib/capstrap/version.rb
CHANGED
metadata
CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 3
|
9
|
+
- 0
|
10
|
+
version: 0.3.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Fletcher Nichol
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-11-
|
18
|
+
date: 2010-11-21 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|