capstrap 0.4.0 → 0.4.1
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 +4 -0
- data/Gemfile.lock +1 -1
- data/README.markdown +2 -2
- data/lib/capistrano/ext/capstrap/core.rb +30 -1
- data/lib/capistrano/ext/capstrap/hostname.rb +39 -2
- data/lib/capstrap/cli.rb +26 -9
- data/lib/capstrap/version.rb +1 -1
- metadata +4 -4
data/CHANGELOG.markdown
CHANGED
data/Gemfile.lock
CHANGED
data/README.markdown
CHANGED
@@ -75,9 +75,9 @@ To save config options to a yaml file to be read by capstrap:
|
|
75
75
|
config-rake-update: true
|
76
76
|
END_OF_CAPSTRAPRC
|
77
77
|
|
78
|
-
To set the remote hostname, use the --hostname
|
78
|
+
To set the remote hostname and domain name, use the --hostname and --domainname flags:
|
79
79
|
|
80
|
-
capstrap solo root@zland --hostname=zland
|
80
|
+
capstrap solo root@zland --hostname=zland --hostname=example.com
|
81
81
|
|
82
82
|
To get more help:
|
83
83
|
|
@@ -83,7 +83,7 @@ end
|
|
83
83
|
# Checks if the chef gem is installed on the remote host.
|
84
84
|
#
|
85
85
|
def chef_installed?
|
86
|
-
cmd_if %{rvm use #{ruby}
|
86
|
+
cmd_if %{rvm use #{ruby} >/dev/null && gem list --no-versions | grep -q "^chef$" >/dev/null}, true
|
87
87
|
end
|
88
88
|
|
89
89
|
|
@@ -109,6 +109,35 @@ def hostname_correct?(host_name)
|
|
109
109
|
host_name == capture(%{hostname}).chomp
|
110
110
|
end
|
111
111
|
|
112
|
+
##
|
113
|
+
# Checks if the full qualified domain name is current and correct.
|
114
|
+
#
|
115
|
+
# @param [String] ip address of host
|
116
|
+
# @param [String] desired host name
|
117
|
+
# @param [String] desired domain name
|
118
|
+
def fqdn_correct?(host_name, domain_name, ip_addr)
|
119
|
+
cmd_if %{egrep -q '^#{ip_addr}[[:space:]]+#{host_name}.#{domain_name}' /etc/hosts >/dev/null}
|
120
|
+
end
|
121
|
+
|
122
|
+
##
|
123
|
+
# Retrieve the primary IP address of the host.
|
124
|
+
#
|
125
|
+
def fetch_primary_ip_address
|
126
|
+
capture(<<-GETADDR, :shell => "bash").chomp
|
127
|
+
_if="$(netstat -nr | grep ^0\.0\.0\.0 | awk '{print $8}')";
|
128
|
+
_ip="$(/sbin/ifconfig $_if | \
|
129
|
+
grep '^[[:space:]]*inet ' | awk '{print $2}' | \
|
130
|
+
awk -F':' '{print $2}')";
|
131
|
+
|
132
|
+
if [ -z "$_ip" -o "$_ip" == "" ] ; then
|
133
|
+
echo "";
|
134
|
+
return 10;
|
135
|
+
else
|
136
|
+
echo $_ip;
|
137
|
+
fi
|
138
|
+
GETADDR
|
139
|
+
end
|
140
|
+
|
112
141
|
def update_cmd
|
113
142
|
if cookbooks_rake_update
|
114
143
|
%{rake update}
|
@@ -8,9 +8,15 @@ module Capstrap
|
|
8
8
|
|
9
9
|
desc "Sets the hostname."
|
10
10
|
task :set_hostname do
|
11
|
-
|
11
|
+
if exists?(:host_name)
|
12
|
+
hname = fetch(:host_name)
|
13
|
+
else
|
14
|
+
hname = capture(%{hostname}).chomp
|
15
|
+
end
|
16
|
+
|
17
|
+
unless hostname_correct?(hname)
|
12
18
|
cmd = [
|
13
|
-
%{echo "#{
|
19
|
+
%{echo "#{hname}" > /etc/hostname},
|
14
20
|
%{chown root:root /etc/hostname},
|
15
21
|
%{chmod 0644 /etc/hostname},
|
16
22
|
%{start hostname}
|
@@ -18,6 +24,37 @@ module Capstrap
|
|
18
24
|
run cmd.join(" && ")
|
19
25
|
end
|
20
26
|
end
|
27
|
+
|
28
|
+
desc "Sets the full qualified domain name."
|
29
|
+
task :set_fqdn do
|
30
|
+
begin
|
31
|
+
current_fqdn = capture(%{hostname -f}).chomp
|
32
|
+
rescue
|
33
|
+
current_fqdn = "fubarname.fubardomain"
|
34
|
+
end
|
35
|
+
|
36
|
+
if exists?(:host_name)
|
37
|
+
hname = fetch(:host_name)
|
38
|
+
else
|
39
|
+
hname = current_fqdn.split('.').shift
|
40
|
+
end
|
41
|
+
|
42
|
+
if exists?(:domain_name)
|
43
|
+
dname = fetch(:domain_name)
|
44
|
+
else
|
45
|
+
dname = current_fqdn.split('.').drop(1).join('.')
|
46
|
+
end
|
47
|
+
|
48
|
+
unless fqdn_correct?(hname, dname, "127.0.1.1")
|
49
|
+
run <<-UPDATE_HOSTS
|
50
|
+
if egrep -q '^127.0.1.1[[:space:]]' /etc/hosts >/dev/null ; then
|
51
|
+
perl -pi -e 's|^(127.0.1.1[[:space:]]+).*$|\$1#{hname}.#{dname} #{hname}|' /etc/hosts;
|
52
|
+
else
|
53
|
+
perl -pi -e 's|^(127\.0\.0\.1[[:space:]]+.*)$|\$1\n127.0.1.1 #{hname}.#{dname} #{hname}|' /etc/hosts;
|
54
|
+
fi;
|
55
|
+
UPDATE_HOSTS
|
56
|
+
end
|
57
|
+
end
|
21
58
|
end
|
22
59
|
end
|
23
60
|
end
|
data/lib/capstrap/cli.rb
CHANGED
@@ -12,6 +12,15 @@ module Capstrap
|
|
12
12
|
puts "capstrap v#{Capstrap::VERSION}"
|
13
13
|
end
|
14
14
|
|
15
|
+
desc "hostname HOST", "Sets the FQDN on remote SSH host HOST"
|
16
|
+
def hostname(ssh_host)
|
17
|
+
track_time do
|
18
|
+
@ssh_host = ssh_host
|
19
|
+
setup_config options
|
20
|
+
exec_hostname
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
15
24
|
desc "ruby HOST", "Install an RVM ruby on remote SSH host HOST"
|
16
25
|
def ruby(ssh_host)
|
17
26
|
track_time do
|
@@ -59,7 +68,15 @@ module Capstrap
|
|
59
68
|
end
|
60
69
|
end
|
61
70
|
|
62
|
-
[:ruby, :chef, :solo, :execute, :update].each do |task|
|
71
|
+
[:hostname, :ruby, :chef, :solo, :execute, :update].each do |task|
|
72
|
+
method_option "hostname", :for => task, :type => :string,
|
73
|
+
:desc => "Desired name of host.",
|
74
|
+
:aliases => "-h"
|
75
|
+
|
76
|
+
method_option "domainname", :for => task, :type => :string,
|
77
|
+
:desc => "Desired domain name of host.",
|
78
|
+
:aliases => "-d"
|
79
|
+
|
63
80
|
method_option "config", :for => task, :type => :string,
|
64
81
|
:desc => "Read from alternative configuration.",
|
65
82
|
:default => File.join(ENV['HOME'], ".capstraprc"),
|
@@ -68,10 +85,6 @@ module Capstrap
|
|
68
85
|
method_option "ruby", :for => task, :type => :string,
|
69
86
|
:desc => "Version of ruby to install.",
|
70
87
|
:default => "ree-1.8.7"
|
71
|
-
|
72
|
-
method_option "hostname", :for => task, :type => :string,
|
73
|
-
:desc => "Desired name of host.",
|
74
|
-
:aliases => "-h"
|
75
88
|
end
|
76
89
|
|
77
90
|
[:chef, :solo, :execute, :update].each do |task|
|
@@ -148,12 +161,15 @@ module Capstrap
|
|
148
161
|
end
|
149
162
|
|
150
163
|
def exec_hostname
|
151
|
-
|
152
|
-
|
153
|
-
end
|
164
|
+
exec_fqdn
|
165
|
+
config.find_and_execute_task "hostname:set_hostname"
|
154
166
|
@ran_exec_hostname = true
|
155
167
|
end
|
156
168
|
|
169
|
+
def exec_fqdn
|
170
|
+
config.find_and_execute_task "hostname:set_fqdn"
|
171
|
+
end
|
172
|
+
|
157
173
|
def config
|
158
174
|
@config ||= prep_config
|
159
175
|
end
|
@@ -188,7 +204,8 @@ module Capstrap
|
|
188
204
|
{:sym => :cookbooks_path, :opt => "cookbooks-path"},
|
189
205
|
{:sym => :config_repo, :opt => "config-repo"},
|
190
206
|
{:sym => :config_path, :opt => "config-path"},
|
191
|
-
{:sym => :host_name, :opt => "hostname"}
|
207
|
+
{:sym => :host_name, :opt => "hostname"},
|
208
|
+
{:sym => :domain_name, :opt => "domainname"}
|
192
209
|
].each do |var|
|
193
210
|
config.set(var[:sym], options[var[:opt]]) if options[var[:opt]]
|
194
211
|
end
|
data/lib/capstrap/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capstrap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 13
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 4
|
9
|
-
-
|
10
|
-
version: 0.4.
|
9
|
+
- 1
|
10
|
+
version: 0.4.1
|
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: 2011-01-
|
18
|
+
date: 2011-01-23 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|