ironfan 6.1.6 → 6.1.7
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/lib/chef/knife/bootstrap/{rhel6.3-ironfan.erb → centos6.5-ironfan.erb} +104 -67
- data/lib/chef/knife/bootstrap/rhel6.5-ironfan.erb +240 -0
- data/lib/ironfan/broker/computer.rb +16 -1
- data/lib/ironfan/dsl/ec2.rb +5 -0
- data/lib/ironfan/dsl/volume.rb +0 -11
- data/lib/ironfan/provider.rb +24 -12
- data/lib/ironfan/provider/ec2/machine.rb +7 -2
- data/lib/ironfan/version.rb +1 -1
- metadata +6 -6
- data/lib/chef/knife/bootstrap/centos6.2-ironfan.erb +0 -158
@@ -1,6 +1,6 @@
|
|
1
1
|
bash <<'EOF' || echo "Chef bootstrap failed!"
|
2
2
|
|
3
|
-
# This is the
|
3
|
+
# This is the ubuntu natty bootstrap script from infochimps' ironfan. It is
|
4
4
|
# based on opscode's bootstrap script, with the following important differences:
|
5
5
|
#
|
6
6
|
# * installs ruby 1.9.2 (not 1.8.7) from source
|
@@ -12,68 +12,88 @@ set -e
|
|
12
12
|
|
13
13
|
<%= (@config[:verbosity].to_i > 1 ? 'set -v' : '') %>
|
14
14
|
|
15
|
-
RUBY_VERSION=1.9.
|
16
|
-
CHEF_VERSION
|
15
|
+
RUBY_VERSION=1.9.3-p545
|
16
|
+
CHEF_VERSION=11.12.4
|
17
17
|
|
18
18
|
mkdir -p /tmp/knife-bootstrap
|
19
19
|
chmod 700 /tmp/knife-bootstrap
|
20
20
|
cd /tmp/knife-bootstrap
|
21
21
|
|
22
22
|
<%= "export http_proxy=\"#{knife_config[:bootstrap_proxy]}\"" if knife_config[:bootstrap_proxy] -%>
|
23
|
-
cat /etc/redhat-release
|
24
|
-
|
25
23
|
date > /etc/box_build_time
|
26
24
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
echo -e "`date` \n\n**** \n****
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
25
|
+
function print_header() {
|
26
|
+
local message
|
27
|
+
message="$1"
|
28
|
+
echo -e "`date` \n\n**** \n**** ${message}\n****\n"
|
29
|
+
}
|
30
|
+
|
31
|
+
print_header "Creating infochimps yum repository"
|
32
|
+
cat >/etc/yum.repos.d/srp-rhel.repo <<EOP
|
33
|
+
[dev]
|
34
|
+
name=Infochimps Platform - dev
|
35
|
+
baseurl=https://s3.amazonaws.com/srp-rhel.chimpy.us/dev/
|
36
|
+
gpgcheck=0
|
37
|
+
EOP
|
38
|
+
|
39
|
+
print_header "yum upgrade"
|
40
|
+
# Exclude the kernel, otherwise the initramfs will be replaced,
|
41
|
+
# which has a custom, partition-growing feature
|
42
|
+
yum upgrade --assumeyes --exclude kernel
|
43
|
+
|
44
|
+
print_header "Installing base packages"
|
45
|
+
yum install --assumeyes \
|
46
|
+
autoconf \
|
47
|
+
automake \
|
48
|
+
bison \
|
49
|
+
bzip2 \
|
50
|
+
gcc \
|
51
|
+
gcc-c++ \
|
52
|
+
git \
|
53
|
+
glibc \
|
54
|
+
glibc-static \
|
55
|
+
libffi-devel \
|
56
|
+
libtool \
|
57
|
+
libxml2-devel \
|
58
|
+
libxslt-devel \
|
59
|
+
libyaml-devel \
|
60
|
+
make \
|
61
|
+
openssl-devel \
|
62
|
+
patch \
|
63
|
+
qt-all \
|
64
|
+
readline \
|
65
|
+
readline-devel \
|
66
|
+
rpm-build \
|
67
|
+
rpmdevtools \
|
68
|
+
wget \
|
69
|
+
zlib \
|
70
|
+
zlib-devel
|
71
|
+
|
72
|
+
# Grr, prevent 'prelink' from mangling our binaries
|
73
|
+
# http://www.tsheffler.com/blog/?p=491
|
74
|
+
grep ruby /etc/prelink.conf || echo '-b /usr/bin/ruby*' >>/etc/prelink.conf
|
75
|
+
|
76
|
+
print_header "Installing ruby version ${RUBY_VERSION}"
|
77
|
+
yum install --assumeyes ruby-1.9.3.p545
|
78
|
+
|
39
79
|
yum clean all
|
40
80
|
|
41
81
|
if [ ! -f /usr/bin/chef-client ]; then
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
make install
|
50
|
-
|
51
|
-
alternatives \
|
52
|
-
--install /usr/bin/ruby ruby /usr/bin/ruby${RUBY_VERSION} 400 \
|
53
|
-
--slave /usr/bin/ri ri /usr/bin/ri${RUBY_VERSION} \
|
54
|
-
--slave /usr/bin/irb irb /usr/bin/irb${RUBY_VERSION} \
|
55
|
-
--slave /usr/bin/erb erb /usr/bin/erb${RUBY_VERSION} \
|
56
|
-
--slave /usr/bin/gem gem /usr/bin/gem${RUBY_VERSION} \
|
57
|
-
--slave /usr/share/man/man1/ruby.1.gz ruby.1.gz \
|
58
|
-
/usr/share/man/man1/ruby${RUBY_VERSION}.1
|
59
|
-
|
60
|
-
echo -e "`date` \n\n**** \n**** Updating rubygems:\n****\n"
|
61
|
-
gem install rubygems-update -v 1.8.5
|
62
|
-
|
63
|
-
echo -e "`date` \n\n**** \n**** Installing chef:\n****\n"
|
64
|
-
gem install net-ssh --no-rdoc --no-ri --version 2.2.2
|
65
|
-
gem install net-ssh-gateway --no-rdoc --no-ri --version 1.1.0
|
66
|
-
gem install net-ssh-multi --no-rdoc --no-ri --version 1.1
|
67
|
-
gem install ohai --no-rdoc --no-ri --version 6.14.0
|
68
|
-
gem install chef --no-rdoc --no-ri --version 10.16.4
|
82
|
+
|
83
|
+
print_header "Updating gems"
|
84
|
+
gem update --system
|
85
|
+
|
86
|
+
print_header "Installing chef"
|
87
|
+
gem install ohai --no-rdoc --no-ri
|
88
|
+
gem install chef --no-rdoc --no-ri --version "$CHEF_VERSION"
|
69
89
|
# gems needed for the client.rb or so generically useful you want them at hand
|
70
90
|
gem install --no-rdoc --no-ri extlib bundler json right_aws pry fog
|
71
91
|
|
72
92
|
else # no chef-client
|
73
|
-
|
93
|
+
print_header "Chef is present -- skipping apt/ruby/chef installation"
|
74
94
|
fi # end ruby+chef install
|
75
95
|
|
76
|
-
|
96
|
+
print_header "Writing chef client config files"
|
77
97
|
mkdir -p /etc/chef
|
78
98
|
|
79
99
|
<%- if @config[:client_key] %>
|
@@ -102,12 +122,11 @@ awk NF /tmp/encrypted_data_bag_secret > /etc/chef/encrypted_data_bag_secret
|
|
102
122
|
rm /tmp/encrypted_data_bag_secret
|
103
123
|
<% end -%>
|
104
124
|
|
105
|
-
|
106
|
-
|
125
|
+
print_header "Deleting temp files"
|
107
126
|
cd /tmp
|
108
127
|
rm -rf /tmp/knife-bootstrap
|
109
128
|
|
110
|
-
|
129
|
+
print_header "Creating chef client script"
|
111
130
|
|
112
131
|
(
|
113
132
|
cat <<'EOP'
|
@@ -126,8 +145,22 @@ EOP
|
|
126
145
|
mkdir -p /etc/chef/ohai/hints/
|
127
146
|
touch /etc/chef/ohai/hints/ec2.json
|
128
147
|
|
148
|
+
print_header "Misc chef-client preparation"
|
149
|
+
( service chef-client stop >/dev/null 2>&1 ; sleep 1 ; killall chef-client 2>/dev/null ) || true
|
150
|
+
mkdir -p /var/log/chef /var/chef /etc/service /etc/sv
|
129
151
|
|
130
|
-
|
152
|
+
<%- if (@config[:bootstrap_runs_chef_client].to_s == 'true') || (@chef_config.knife[:bootstrap_runs_chef_client].to_s == 'true') %>
|
153
|
+
print_header "First run of chef"
|
154
|
+
set -e
|
155
|
+
<%= start_chef %>
|
156
|
+
set +e
|
157
|
+
<%- end %>
|
158
|
+
|
159
|
+
print_header "Clean up"
|
160
|
+
# make locate work good
|
161
|
+
updatedb
|
162
|
+
|
163
|
+
print_header "Adding chef-client-nonce script"
|
131
164
|
|
132
165
|
cat > /etc/init.d/chef-client-nonce <<'EOP'
|
133
166
|
#! /bin/sh
|
@@ -159,21 +192,25 @@ esac
|
|
159
192
|
EOP
|
160
193
|
|
161
194
|
mkdir -p /var/log/chef
|
162
|
-
mkdir -p /etc/sv
|
163
195
|
chmod +x /etc/init.d/chef-client-nonce
|
164
|
-
chkconfig --
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
196
|
+
chkconfig --level 2345 chef-client-nonce on
|
197
|
+
|
198
|
+
print_header "Ensure 'user' user has sudo"
|
199
|
+
sed -i -e 's/name: root/name: user/' \
|
200
|
+
-e '/name: user/a \
|
201
|
+
groups: [wheel] \
|
202
|
+
homedir: /local/home/user' /etc/cloud/cloud.cfg
|
203
|
+
sed -i -e 's/# \(%wheel.*NOPASSWD.*\)/\1/' /etc/sudoers
|
204
|
+
mkdir -p /local/home
|
205
|
+
|
206
|
+
print_header "Disable iptables and postfix"
|
207
|
+
for svc in iptables ip6tables postfix; do
|
208
|
+
service $svc stop
|
209
|
+
chkconfig --level 2345 $svc off
|
210
|
+
done
|
211
|
+
|
212
|
+
print_header "Disable SELinux"
|
213
|
+
sed -i -e 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
|
214
|
+
|
215
|
+
print_header "Cluster Chef client bootstrap complete"
|
216
|
+
EOF
|
@@ -0,0 +1,240 @@
|
|
1
|
+
bash <<'EOF' || echo "Chef bootstrap failed!"
|
2
|
+
|
3
|
+
# This is the ubuntu natty bootstrap script from infochimps' ironfan. It is
|
4
|
+
# based on opscode's bootstrap script, with the following important differences:
|
5
|
+
#
|
6
|
+
# * installs ruby 1.9.2 (not 1.8.7) from source
|
7
|
+
# * upgrades rubygems rather than installing from source
|
8
|
+
# * pushes the computer identity into the first-boot.json
|
9
|
+
# * installs the chef-client service and kicks off the first run of chef
|
10
|
+
|
11
|
+
set -e
|
12
|
+
|
13
|
+
<%= (@config[:verbosity].to_i > 1 ? 'set -v' : '') %>
|
14
|
+
|
15
|
+
RUBY_VERSION=1.9.3-p545
|
16
|
+
CHEF_VERSION=11.12.4
|
17
|
+
|
18
|
+
mkdir -p /tmp/knife-bootstrap
|
19
|
+
chmod 700 /tmp/knife-bootstrap
|
20
|
+
cd /tmp/knife-bootstrap
|
21
|
+
|
22
|
+
<%= "export http_proxy=\"#{knife_config[:bootstrap_proxy]}\"" if knife_config[:bootstrap_proxy] -%>
|
23
|
+
date > /etc/box_build_time
|
24
|
+
|
25
|
+
function print_header() {
|
26
|
+
local message
|
27
|
+
message="$1"
|
28
|
+
echo -e "`date` \n\n**** \n**** ${message}\n****\n"
|
29
|
+
}
|
30
|
+
|
31
|
+
print_header "Subscribing instance to Red Hat subscription"
|
32
|
+
if [ -z "<%= Chef::Config[:rhel_subs_useremail] %>" ] \
|
33
|
+
|| [ -z "<%= Chef::Config[:rhel_subs_password] %>" ] \
|
34
|
+
|| [ -z "<%= Chef::Config[:rhel_subs_pool] %>" ]; then
|
35
|
+
|
36
|
+
echo "You must configure subscription values in knife-org.rb"
|
37
|
+
exit 1
|
38
|
+
fi
|
39
|
+
|
40
|
+
subscription-manager register \
|
41
|
+
--user=<%= Chef::Config[:rhel_subs_useremail] %> \
|
42
|
+
--pass=<%= Chef::Config[:rhel_subs_password] %> \
|
43
|
+
--auto-attach
|
44
|
+
|
45
|
+
subscription-manager attach --pool=<%= Chef::Config[:rhel_subs_pool] %>
|
46
|
+
|
47
|
+
subscription-manager repos --disable=*
|
48
|
+
subscription-manager repos --enable=rhel-6-server-rpms
|
49
|
+
subscription-manager repos --enable=rhel-6-server-optional-rpms
|
50
|
+
subscription-manager repos --enable=rhel-6-server-supplementary-rpms
|
51
|
+
|
52
|
+
print_header "Creating infochimps yum repository"
|
53
|
+
cat >/etc/yum.repos.d/srp-rhel.repo <<EOP
|
54
|
+
[dev]
|
55
|
+
name=Infochimps Platform - dev
|
56
|
+
baseurl=https://s3.amazonaws.com/srp-rhel.chimpy.us/dev/
|
57
|
+
gpgcheck=0
|
58
|
+
EOP
|
59
|
+
|
60
|
+
print_header "yum upgrade"
|
61
|
+
# Exclude the kernel, otherwise the initramfs will be replaced,
|
62
|
+
# which has a custom, partition-growing feature
|
63
|
+
yum upgrade --assumeyes --exclude kernel
|
64
|
+
|
65
|
+
print_header "Installing base packages"
|
66
|
+
yum install --assumeyes \
|
67
|
+
autoconf \
|
68
|
+
automake \
|
69
|
+
bison \
|
70
|
+
bzip2 \
|
71
|
+
gcc \
|
72
|
+
gcc-c++ \
|
73
|
+
git \
|
74
|
+
glibc \
|
75
|
+
glibc-static \
|
76
|
+
libffi-devel \
|
77
|
+
libtool \
|
78
|
+
libxml2-devel \
|
79
|
+
libxslt-devel \
|
80
|
+
libyaml-devel \
|
81
|
+
make \
|
82
|
+
openssl-devel \
|
83
|
+
patch \
|
84
|
+
qt-all \
|
85
|
+
readline \
|
86
|
+
readline-devel \
|
87
|
+
rpm-build \
|
88
|
+
rpmdevtools \
|
89
|
+
wget \
|
90
|
+
zlib \
|
91
|
+
zlib-devel
|
92
|
+
|
93
|
+
# Grr, prevent 'prelink' from mangling our binaries
|
94
|
+
# http://www.tsheffler.com/blog/?p=491
|
95
|
+
grep ruby /etc/prelink.conf || echo '-b /usr/bin/ruby*' >>/etc/prelink.conf
|
96
|
+
|
97
|
+
print_header "Installing ruby version ${RUBY_VERSION}"
|
98
|
+
yum install --assumeyes ruby-1.9.3.p545
|
99
|
+
|
100
|
+
yum clean all
|
101
|
+
|
102
|
+
if [ ! -f /usr/bin/chef-client ]; then
|
103
|
+
|
104
|
+
print_header "Updating gems"
|
105
|
+
gem update --system
|
106
|
+
|
107
|
+
print_header "Installing chef"
|
108
|
+
gem install ohai --no-rdoc --no-ri
|
109
|
+
gem install chef --no-rdoc --no-ri --version "$CHEF_VERSION"
|
110
|
+
# gems needed for the client.rb or so generically useful you want them at hand
|
111
|
+
gem install --no-rdoc --no-ri extlib bundler json right_aws pry fog
|
112
|
+
|
113
|
+
else # no chef-client
|
114
|
+
print_header "Chef is present -- skipping apt/ruby/chef installation"
|
115
|
+
fi # end ruby+chef install
|
116
|
+
|
117
|
+
print_header "Writing chef client config files"
|
118
|
+
mkdir -p /etc/chef
|
119
|
+
|
120
|
+
<%- if @config[:client_key] %>
|
121
|
+
(
|
122
|
+
cat <<'EOP'
|
123
|
+
<%= @config[:client_key] %>
|
124
|
+
EOP
|
125
|
+
) > /tmp/knife-bootstrap/client.pem
|
126
|
+
awk NF /tmp/knife-bootstrap/client.pem > /etc/chef/client.pem
|
127
|
+
<%- else %>
|
128
|
+
(
|
129
|
+
cat <<'EOP'
|
130
|
+
<%= validation_key %>
|
131
|
+
EOP
|
132
|
+
) > /tmp/knife-bootstrap/validation.pem
|
133
|
+
awk NF /tmp/knife-bootstrap/validation.pem > /etc/chef/validation.pem
|
134
|
+
<%- end %>
|
135
|
+
|
136
|
+
<% if @chef_config[:encrypted_data_bag_secret] -%>
|
137
|
+
(
|
138
|
+
cat <<'EOP'
|
139
|
+
<%= encrypted_data_bag_secret %>
|
140
|
+
EOP
|
141
|
+
) > /tmp/encrypted_data_bag_secret
|
142
|
+
awk NF /tmp/encrypted_data_bag_secret > /etc/chef/encrypted_data_bag_secret
|
143
|
+
rm /tmp/encrypted_data_bag_secret
|
144
|
+
<% end -%>
|
145
|
+
|
146
|
+
print_header "Deleting temp files"
|
147
|
+
cd /tmp
|
148
|
+
rm -rf /tmp/knife-bootstrap
|
149
|
+
|
150
|
+
print_header "Creating chef client script"
|
151
|
+
|
152
|
+
(
|
153
|
+
cat <<'EOP'
|
154
|
+
<%= config_content %>
|
155
|
+
<%= @config[:computer].chef_client_script_content %>
|
156
|
+
EOP
|
157
|
+
) > /etc/chef/client.rb
|
158
|
+
|
159
|
+
(
|
160
|
+
cat <<'EOP'
|
161
|
+
<%= { "run_list" => @run_list, "cluster_name" => @config[:server].cluster_name, "facet_name" => @config[:server].facet_name, "facet_index" => @config[:server].index }.to_json %>
|
162
|
+
EOP
|
163
|
+
) > /etc/chef/first-boot.json
|
164
|
+
|
165
|
+
# Ensure that EC2 images are recognized even inside VPC
|
166
|
+
mkdir -p /etc/chef/ohai/hints/
|
167
|
+
touch /etc/chef/ohai/hints/ec2.json
|
168
|
+
|
169
|
+
print_header "Misc chef-client preparation"
|
170
|
+
( service chef-client stop >/dev/null 2>&1 ; sleep 1 ; killall chef-client 2>/dev/null ) || true
|
171
|
+
mkdir -p /var/log/chef /var/chef /etc/service /etc/sv
|
172
|
+
|
173
|
+
<%- if (@config[:bootstrap_runs_chef_client].to_s == 'true') || (@chef_config.knife[:bootstrap_runs_chef_client].to_s == 'true') %>
|
174
|
+
print_header "First run of chef"
|
175
|
+
set -e
|
176
|
+
<%= start_chef %>
|
177
|
+
set +e
|
178
|
+
<%- end %>
|
179
|
+
|
180
|
+
print_header "Clean up"
|
181
|
+
# make locate work good
|
182
|
+
updatedb
|
183
|
+
|
184
|
+
print_header "Adding chef-client-nonce script"
|
185
|
+
|
186
|
+
cat > /etc/init.d/chef-client-nonce <<'EOP'
|
187
|
+
#! /bin/sh
|
188
|
+
### BEGIN INIT INFO
|
189
|
+
# Provides: chef-client-nonce
|
190
|
+
# Required-Start: $remote_fs $network
|
191
|
+
# Required-Stop:
|
192
|
+
# Default-Start: 2 3 4 5
|
193
|
+
# Default-Stop: 0 1 6
|
194
|
+
# Short-Description: Start a single chef-client run.
|
195
|
+
### END INIT INFO
|
196
|
+
#
|
197
|
+
# Copyright (c) 2009-2010 Opscode, Inc, <legal@opscode.com>
|
198
|
+
#
|
199
|
+
# chef-client Startup script for chef-client.
|
200
|
+
# chkconfig: - 99 02
|
201
|
+
# description: starts up chef-client once, at boot
|
202
|
+
|
203
|
+
case "$1" in
|
204
|
+
start)
|
205
|
+
/usr/bin/chef-client -L /var/log/chef/client.log
|
206
|
+
exit $?
|
207
|
+
;;
|
208
|
+
*)
|
209
|
+
echo "Usage: /etc/init.d/chef-client-nonce start" >&2
|
210
|
+
exit 1
|
211
|
+
;;
|
212
|
+
esac
|
213
|
+
EOP
|
214
|
+
|
215
|
+
mkdir -p /var/log/chef
|
216
|
+
chmod +x /etc/init.d/chef-client-nonce
|
217
|
+
chkconfig --level 2345 chef-client-nonce on
|
218
|
+
|
219
|
+
print_header "Ensure 'user' user has sudo"
|
220
|
+
sed -i -e 's/name: root/name: user/' \
|
221
|
+
-e '/name: user/a \
|
222
|
+
groups: [wheel] \
|
223
|
+
homedir: /local/home/user' /etc/cloud/cloud.cfg
|
224
|
+
sed -i -e 's/# \(%wheel.*NOPASSWD.*\)/\1/' /etc/sudoers
|
225
|
+
mkdir -p /local/home
|
226
|
+
|
227
|
+
print_header "Disable iptables and postfix"
|
228
|
+
for svc in iptables ip6tables postfix; do
|
229
|
+
service $svc stop
|
230
|
+
chkconfig --level 2345 $svc off
|
231
|
+
done
|
232
|
+
|
233
|
+
print_header "Disable SELinux"
|
234
|
+
sed -i -e 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
|
235
|
+
|
236
|
+
print_header "Unregistering instance from Red Hat subscription"
|
237
|
+
subscription-manager unregister
|
238
|
+
|
239
|
+
print_header "Cluster Chef client bootstrap complete"
|
240
|
+
EOF
|
@@ -13,14 +13,29 @@ module Ironfan
|
|
13
13
|
field :name, String
|
14
14
|
field :bogus, Array, :default => []
|
15
15
|
|
16
|
+
def lookup_snapshot_id(region, snapshot_name)
|
17
|
+
keys = [region.to_s, snapshot_name.to_s]
|
18
|
+
return Chef::Config[:ec2_snapshot_info][ keys ][:snapshot_id] rescue nil
|
19
|
+
end
|
20
|
+
|
16
21
|
def initialize(*args)
|
17
22
|
super
|
18
23
|
providers[:chef] ||= Ironfan::Provider::ChefServer
|
19
24
|
return unless server
|
20
25
|
providers[:iaas] = server.selected_cloud.provider
|
21
26
|
volumes = server.volumes.values
|
27
|
+
puts server.selected_cloud
|
28
|
+
region = server.selected_cloud.region
|
29
|
+
|
30
|
+
|
31
|
+
# Turn snapshot names into snapshot ids corresponding to the server region
|
32
|
+
volumes.each do |vol|
|
33
|
+
vol.snapshot_id || vol.snapshot_id(lookup_snapshot_id(region, vol.snapshot_name))
|
34
|
+
end
|
35
|
+
|
22
36
|
volumes += server.implied_volumes
|
23
37
|
volumes.each{|vol| self.drive vol.name, :volume => vol }
|
38
|
+
|
24
39
|
rescue StandardError => err ; err.polish("#{self.class} on '#{args.inspect}'") rescue nil ; raise
|
25
40
|
end
|
26
41
|
|
@@ -365,7 +380,7 @@ module Ironfan
|
|
365
380
|
select do |mach|
|
366
381
|
mach.bogus? || (
|
367
382
|
# facet match, and index match (or no indexes specified)
|
368
|
-
(mach.server.cluster_name == cluster_name) &&
|
383
|
+
(mach.server.cluster_name == cluster_name) &&
|
369
384
|
(mach.server.facet_name == facet_name || facet_name.nil?) &&
|
370
385
|
(slice_array.include?(mach.server.index) || slice_indexes.nil?))
|
371
386
|
end
|
data/lib/ironfan/dsl/ec2.rb
CHANGED
@@ -334,6 +334,11 @@ Chef::Config[:ec2_flavor_info].merge!({
|
|
334
334
|
'c3.2xlarge' => { :price => 0.600, :bits => 64, :ram => 15360, :cores => 8, :core_size => 3.5, :inst_disks => 2, :inst_disk_size => 80, :ephemeral_volumes => 2, :placement_groupable => true, :virtualization => 'hvm', :ebs_opizable => 1000 },
|
335
335
|
'c3.4xlarge' => { :price => 1.200, :bits => 64, :ram => 30720, :cores => 16, :core_size => 3.4375, :inst_disks => 2, :inst_disk_size => 160, :ephemeral_volumes => 2, :placement_groupable => true, :virtualization => 'hvm', :ebs_opizable => 1000 },
|
336
336
|
'c3.8xlarge' => { :price => 2.400, :bits => 64, :ram => 61440, :cores => 32, :core_size => 3.375, :inst_disks => 2, :inst_disk_size => 320, :ephemeral_volumes => 2, :placement_groupable => true, :virtualization => 'hvm' },
|
337
|
+
'r3.large' => { :price => 0.175, :bits => 64, :ram => 15360, :cores => 2, :core_size => 3.5, :inst_disks => 1, :inst_disk_size => 32, :ephemeral_volumes => 1, :virtualization => 'hvm' },
|
338
|
+
'r3.xlarge' => { :price => 0.350, :bits => 64, :ram => 30720, :cores => 4, :core_size => 3.5, :inst_disks => 1, :inst_disk_size => 80, :ephemeral_volumes => 1, :virtualization => 'hvm', :ebs_opizable => 1000 },
|
339
|
+
'r3.2xlarge' => { :price => 0.700, :bits => 64, :ram => 61440, :cores => 8, :core_size => 3.5, :inst_disks => 1, :inst_disk_size => 160, :ephemeral_volumes => 1, :virtualization => 'hvm', :ebs_opizable => 1000 },
|
340
|
+
'r3.4xlarge' => { :price => 1.400, :bits => 64, :ram => 124928, :cores => 16, :core_size => 3.5, :inst_disks => 1, :inst_disk_size => 320, :ephemeral_volumes => 1, :virtualization => 'hvm', :ebs_opizable => 1000 },
|
341
|
+
'r3.8xlarge' => { :price => 2.800, :bits => 64, :ram => 249856, :cores => 32, :core_size => 3.5, :inst_disks => 2, :inst_disk_size => 320, :ephemeral_volumes => 2, :virtualization => 'hvm' },
|
337
342
|
'hs1.8xlarge' => { :price => 4.600, :bits => 64, :ram => 119808, :cores => 16, :core_size => 2.1875, :inst_disks => 24, :inst_disk_size => 2048, :ephemeral_volumes => 24, :placement_groupable => true, :virtualization => 'hvm' },
|
338
343
|
'cr1.8xlarge' => { :price => 3.500, :bits => 64, :ram => 249856, :cores => 32, :core_size => 2.75, :inst_disks => 2, :inst_disk_size => 120, :ephemeral_volumes => 2, :placement_groupable => true, :virtualization => 'hvm' },
|
339
344
|
'i2.xlarge' => { :price => 0.853, :bits => 64, :ram => 31232, :cores => 4, :core_size => 3.5, :inst_disks => 1, :inst_disk_size => 800, :ephemeral_volumes => 1, :placement_groupable => true, :virtualization => 'hvm', :ebs_optimized => 500 },
|
data/lib/ironfan/dsl/volume.rb
CHANGED
@@ -24,17 +24,6 @@ module Ironfan
|
|
24
24
|
magic :snapshot_name, String
|
25
25
|
magic :tags, Hash, :default => {}
|
26
26
|
|
27
|
-
VOLUME_IDS ||= {}
|
28
|
-
VOLUME_IDS.merge!({
|
29
|
-
:blank_xfs => 'snap-d9c1edb1',
|
30
|
-
:blank_xfs_tokyo => 'snap-049d1921',
|
31
|
-
:blank_xfs_california => 'snap-514b5c5a', # us-west-1
|
32
|
-
})
|
33
|
-
|
34
|
-
def snapshot_id(*)
|
35
|
-
Ironfan.todo("CODE SMELL: EBS specific information in Dsl::Volume::VOLUME_IDS")
|
36
|
-
super || VOLUME_IDS[snapshot_name]
|
37
|
-
end
|
38
27
|
end
|
39
28
|
|
40
29
|
class RaidGroup < Volume
|
data/lib/ironfan/provider.rb
CHANGED
@@ -213,6 +213,11 @@ module Ironfan
|
|
213
213
|
# A Machine lives and dies with its Computer
|
214
214
|
def self.shared?() false; end
|
215
215
|
|
216
|
+
# FIXME: users_groups only in 7.4, not 6.3 ... including
|
217
|
+
# this module breaks on our Ubuntu image (with cloud-init 6.3)
|
218
|
+
# note that in the sed statement in the bootcmd below,
|
219
|
+
# sed expects some characters to be escaped \(\) etc.
|
220
|
+
# then yaml needs \ inside double-quotes escaped as \x5c
|
216
221
|
def self.cloud_init_user_data(computer)
|
217
222
|
return <<EOF
|
218
223
|
#cloud-config
|
@@ -225,18 +230,19 @@ output: {all: '| tee -a /var/log/cloud-init-output.log'}
|
|
225
230
|
# Set our hostname
|
226
231
|
manage_etc_hosts: True
|
227
232
|
|
228
|
-
cloud_init_modules:
|
229
|
-
- bootcmd
|
230
|
-
- resizefs
|
231
|
-
- set_hostname
|
232
|
-
- update_hostname
|
233
|
-
- update_etc_hosts
|
234
|
-
- ca-certs
|
235
|
-
- rsyslog
|
236
|
-
- ssh
|
237
|
-
|
238
233
|
fqdn: #{computer.server.fqdn}
|
239
234
|
|
235
|
+
cloud_init_modules:
|
236
|
+
- bootcmd
|
237
|
+
- resizefs
|
238
|
+
- set_hostname
|
239
|
+
- update_hostname
|
240
|
+
- update_etc_hosts
|
241
|
+
- ca-certs
|
242
|
+
- rsyslog
|
243
|
+
- users-groups
|
244
|
+
- ssh
|
245
|
+
|
240
246
|
bootcmd:
|
241
247
|
# note that writefiles is not supported on precise...
|
242
248
|
- |
|
@@ -248,8 +254,13 @@ bootcmd:
|
|
248
254
|
#{computer.private_key.split("\n").map {|l| " "+l}.join("\n")}
|
249
255
|
EOF
|
250
256
|
domainname #{computer.server.fqdn}
|
251
|
-
IP=`curl 169.254.169.254/latest/meta-data/local-ipv4
|
252
|
-
|
257
|
+
IP=`curl 169.254.169.254/latest/meta-data/local-ipv4`
|
258
|
+
[ -f /etc/cloud/templates/hosts.tmpl ] && sed -i -e "s/127\x5c.0\x5c.1\x5c.1/$IP/" /etc/cloud/templates/hosts.tmpl
|
259
|
+
[ -f /etc/cloud/templates/hosts.debian.tmpl ] && sed -i -e "s/127\x5c.0\x5c.1\x5c.1/$IP/" /etc/cloud/templates/hosts.debian.tmpl
|
260
|
+
[ -f /etc/cloud/templates/hosts.redhat.tmpl ] && sed -i -e "/::1/d" -e "s/^[0-9]*\x5c.[0-9]*\x5c.[0-9]*\x5c.[0-9]*\x5c( .*fqdn.*\x5c)/$IP\x5c1/" /etc/cloud/templates/hosts.redhat.tmpl
|
261
|
+
|
262
|
+
# This is understood to fail gracefully during image creation (before
|
263
|
+
# knife cluster bootstrap burninator...) due to Chef not installed yet.
|
253
264
|
chef:
|
254
265
|
install_type: "packages"
|
255
266
|
force_install: false
|
@@ -268,6 +279,7 @@ chef:
|
|
268
279
|
We don't need no stinking validators.
|
269
280
|
EOF
|
270
281
|
end
|
282
|
+
|
271
283
|
end
|
272
284
|
end
|
273
285
|
end
|
@@ -226,8 +226,13 @@ module Ironfan
|
|
226
226
|
errors['Missing client'] = info unless computer.client?
|
227
227
|
errors['Missing private_key'] = computer.client unless computer.private_key
|
228
228
|
#
|
229
|
-
|
230
|
-
|
229
|
+
asserted_regions = {
|
230
|
+
:ec2_connection => Ec2.connection.region,
|
231
|
+
:cloud => cloud.region,
|
232
|
+
:knife => Chef::Config[:knife][:region],
|
233
|
+
:chef_config => Ironfan.chef_config[:region]
|
234
|
+
}
|
235
|
+
errors["mismatched region"] = asserted_regions unless asserted_regions.values.compact.uniq.count == 1
|
231
236
|
#
|
232
237
|
errors
|
233
238
|
end
|
data/lib/ironfan/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ironfan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 6.1.
|
4
|
+
version: 6.1.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-06-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: chef
|
@@ -183,9 +183,9 @@ files:
|
|
183
183
|
- config/ubuntu12.04-ironfan.erb
|
184
184
|
- ironfan.gemspec
|
185
185
|
- lib/chef/cluster_knife.rb
|
186
|
-
- lib/chef/knife/bootstrap/centos6.
|
186
|
+
- lib/chef/knife/bootstrap/centos6.5-ironfan.erb
|
187
187
|
- lib/chef/knife/bootstrap/chef-full-ironfan.erb
|
188
|
-
- lib/chef/knife/bootstrap/rhel6.
|
188
|
+
- lib/chef/knife/bootstrap/rhel6.5-ironfan.erb
|
189
189
|
- lib/chef/knife/bootstrap/ubuntu10.04-ironfan.erb
|
190
190
|
- lib/chef/knife/bootstrap/ubuntu12.04-ironfan.erb
|
191
191
|
- lib/chef/knife/cluster_bootstrap.rb
|
@@ -322,7 +322,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
322
322
|
version: '0'
|
323
323
|
segments:
|
324
324
|
- 0
|
325
|
-
hash:
|
325
|
+
hash: 159548640143306131
|
326
326
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
327
327
|
none: false
|
328
328
|
requirements:
|
@@ -331,7 +331,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
331
331
|
version: '0'
|
332
332
|
segments:
|
333
333
|
- 0
|
334
|
-
hash:
|
334
|
+
hash: 159548640143306131
|
335
335
|
requirements: []
|
336
336
|
rubyforge_project:
|
337
337
|
rubygems_version: 1.8.25
|
@@ -1,158 +0,0 @@
|
|
1
|
-
bash <<'EOF' || echo "Chef bootstrap failed!"
|
2
|
-
|
3
|
-
# This is the ubuntu natty bootstrap script from infochimps' ironfan. It is
|
4
|
-
# based on opscode's bootstrap script, with the following important differences:
|
5
|
-
#
|
6
|
-
# * installs ruby 1.9.2 (not 1.8.7) from source
|
7
|
-
# * upgrades rubygems rather than installing from source
|
8
|
-
# * pushes the computer identity into the first-boot.json
|
9
|
-
# * installs the chef-client service and kicks off the first run of chef
|
10
|
-
|
11
|
-
set -e
|
12
|
-
|
13
|
-
<%= (@config[:verbosity].to_i > 1 ? 'set -v' : '') %>
|
14
|
-
|
15
|
-
RUBY_VERSION=1.9.2-p290
|
16
|
-
CHEF_VERSION=<%= bootstrap_version_string.gsub(/.*[\s=]/,"") %>
|
17
|
-
|
18
|
-
mkdir -p /tmp/knife-bootstrap
|
19
|
-
chmod 700 /tmp/knife-bootstrap
|
20
|
-
cd /tmp/knife-bootstrap
|
21
|
-
|
22
|
-
<%= "export http_proxy=\"#{knife_config[:bootstrap_proxy]}\"" if knife_config[:bootstrap_proxy] -%>
|
23
|
-
cat /etc/centos-release
|
24
|
-
|
25
|
-
date > /etc/box_build_time
|
26
|
-
|
27
|
-
echo -e "`date` \n\n**** \n**** yum upgrade:\n****\n"
|
28
|
-
yum upgrade --assumeyes
|
29
|
-
|
30
|
-
echo -e "`date` \n\n**** \n**** Installing base packages:\n****\n"
|
31
|
-
yum install --assumeyes make wget
|
32
|
-
yum install --assumeyes git rpm-build rpmdevtools gcc glibc-static zlib-devel libxml2-devel libxslt-devel openssl-devel
|
33
|
-
if [ ! -d runit-rpm ]; then git clone https://github.com/imeyer/runit-rpm.git; fi
|
34
|
-
cd runit-rpm
|
35
|
-
./build.sh
|
36
|
-
yum install --assumeyes /root/rpmbuild/RPMS/x86_64/runit-*.rpm || true # TODO: Remove this shim
|
37
|
-
cd -
|
38
|
-
|
39
|
-
yum clean all
|
40
|
-
|
41
|
-
if [ ! -f /usr/bin/chef-client ]; then
|
42
|
-
echo -e "`date` \n\n**** \n**** Installing ruby version ${RUBY_VERSION}:\n****\n"
|
43
|
-
|
44
|
-
wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-${RUBY_VERSION}.tar.gz
|
45
|
-
tar xzf ruby-${RUBY_VERSION}.tar.gz
|
46
|
-
cd ruby-${RUBY_VERSION}
|
47
|
-
./configure --with-ruby-version=${RUBY_VERSION} --prefix=/usr --program-suffix=${RUBY_VERSION}
|
48
|
-
make -j2
|
49
|
-
make install
|
50
|
-
|
51
|
-
alternatives \
|
52
|
-
--install /usr/bin/ruby ruby /usr/bin/ruby${RUBY_VERSION} 400 \
|
53
|
-
--slave /usr/bin/ri ri /usr/bin/ri${RUBY_VERSION} \
|
54
|
-
--slave /usr/bin/irb irb /usr/bin/irb${RUBY_VERSION} \
|
55
|
-
--slave /usr/bin/erb erb /usr/bin/erb${RUBY_VERSION} \
|
56
|
-
--slave /usr/bin/gem gem /usr/bin/gem${RUBY_VERSION} \
|
57
|
-
--slave /usr/share/man/man1/ruby.1.gz ruby.1.gz \
|
58
|
-
/usr/share/man/man1/ruby${RUBY_VERSION}.1
|
59
|
-
|
60
|
-
echo -e "`date` \n\n**** \n**** Updating rubygems:\n****\n"
|
61
|
-
gem update --system
|
62
|
-
|
63
|
-
echo -e "`date` \n\n**** \n**** Installing chef:\n****\n"
|
64
|
-
gem install ohai --no-rdoc --no-ri
|
65
|
-
gem install chef --no-rdoc --no-ri <%= bootstrap_version_string %>
|
66
|
-
# gems needed for the client.rb or so generically useful you want them at hand
|
67
|
-
gem install --no-rdoc --no-ri extlib bundler json right_aws pry fog
|
68
|
-
|
69
|
-
else # no chef-client
|
70
|
-
echo -e "`date` \n\n**** \n**** Chef is present -- skipping apt/ruby/chef installation\n****\n"
|
71
|
-
fi # end ruby+chef install
|
72
|
-
|
73
|
-
echo -e "`date` \n\n**** \n**** Knifing in the chef client config files:\n****\n"
|
74
|
-
mkdir -p /etc/chef
|
75
|
-
|
76
|
-
<%- if @config[:client_key] %>
|
77
|
-
(
|
78
|
-
cat <<'EOP'
|
79
|
-
<%= @config[:client_key] %>
|
80
|
-
EOP
|
81
|
-
) > /tmp/knife-bootstrap/client.pem
|
82
|
-
awk NF /tmp/knife-bootstrap/client.pem > /etc/chef/client.pem
|
83
|
-
<%- else %>
|
84
|
-
(
|
85
|
-
cat <<'EOP'
|
86
|
-
<%= validation_key %>
|
87
|
-
EOP
|
88
|
-
) > /tmp/knife-bootstrap/validation.pem
|
89
|
-
awk NF /tmp/knife-bootstrap/validation.pem > /etc/chef/validation.pem
|
90
|
-
<%- end %>
|
91
|
-
|
92
|
-
<% if @chef_config[:encrypted_data_bag_secret] -%>
|
93
|
-
(
|
94
|
-
cat <<'EOP'
|
95
|
-
<%= encrypted_data_bag_secret %>
|
96
|
-
EOP
|
97
|
-
) > /tmp/encrypted_data_bag_secret
|
98
|
-
awk NF /tmp/encrypted_data_bag_secret > /etc/chef/encrypted_data_bag_secret
|
99
|
-
rm /tmp/encrypted_data_bag_secret
|
100
|
-
<% end -%>
|
101
|
-
|
102
|
-
echo -e "`date` \n\n**** \n**** Nuking our temp files:\n****\n"
|
103
|
-
|
104
|
-
cd /tmp
|
105
|
-
rm -rf /tmp/knife-bootstrap
|
106
|
-
|
107
|
-
echo -e "`date` \n\n**** \n**** Creating chef client script:\n****\n"
|
108
|
-
|
109
|
-
(
|
110
|
-
cat <<'EOP'
|
111
|
-
<%= config_content %>
|
112
|
-
<%= @config[:computer].chef_client_script_content %>
|
113
|
-
EOP
|
114
|
-
) > /etc/chef/client.rb
|
115
|
-
|
116
|
-
(
|
117
|
-
cat <<'EOP'
|
118
|
-
<%= { "run_list" => @run_list, "cluster_name" => @config[:server].cluster_name, "facet_name" => @config[:server].facet_name, "facet_index" => @config[:server].index }.to_json %>
|
119
|
-
EOP
|
120
|
-
) > /etc/chef/first-boot.json
|
121
|
-
|
122
|
-
echo -e "`date` \n\n**** \n**** Adding chef client runit scripts:\n****\n"
|
123
|
-
( service chef-client stop >/dev/null 2>&1 ; sleep 1 ; killall chef-client 2>/dev/null ) || true
|
124
|
-
mkdir -p /var/log/chef /var/chef /etc/service /etc/sv/chef-client/{log/main,supervise}
|
125
|
-
|
126
|
-
cat > /etc/sv/chef-client/log/run <<'EOP'
|
127
|
-
#!/bin/bash
|
128
|
-
exec svlogd -tt ./main
|
129
|
-
EOP
|
130
|
-
|
131
|
-
cat > /etc/sv/chef-client/run <<'EOP'
|
132
|
-
#!/bin/bash
|
133
|
-
exec 2>&1
|
134
|
-
exec /usr/bin/env chef-client -i 43200 -s 20 -L /var/log/chef/client.log
|
135
|
-
EOP
|
136
|
-
|
137
|
-
chmod +x /etc/sv/chef-client/log/run /etc/sv/chef-client/run
|
138
|
-
ln -nfs /sbin/sv /etc/init.d/chef-client
|
139
|
-
|
140
|
-
service chef-client stop >/dev/null 2>&1 || true
|
141
|
-
|
142
|
-
<%- if (@config[:bootstrap_runs_chef_client].to_s == 'true') || (@chef_config.knife[:bootstrap_runs_chef_client].to_s == 'true') %>
|
143
|
-
echo -e "`date` \n\n**** \n**** First run of chef:\n****\n"
|
144
|
-
set -e
|
145
|
-
<%= start_chef %>
|
146
|
-
set +e
|
147
|
-
<%- end %>
|
148
|
-
|
149
|
-
echo -e "`date` \n\n**** \n**** Cleanup:\n****\n"
|
150
|
-
# make locate work good
|
151
|
-
updatedb
|
152
|
-
|
153
|
-
echo -e "`date` \n\n**** \n**** Enabling chef client service:\n****\n"
|
154
|
-
ln -nfs /etc/sv/chef-client /etc/service/chef-client
|
155
|
-
service chef-client start
|
156
|
-
|
157
|
-
echo -e "`date` \n\n**** \n**** Cluster Chef client bootstrap complete\n****\n"
|
158
|
-
EOF
|