-
Notifications
You must be signed in to change notification settings - Fork 0
/
newton.hot
298 lines (290 loc) · 13.4 KB
/
newton.hot
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
heat_template_version: 2015-10-15
description: OpenStack Newton with DevStack over one controller node and a configurable number of compute nodes
parameters:
compute_node_count:
type: number
label: Number of compute nodes
description: Number of compute nodes in this OpenStack deployment
default: 2
constraints:
- range: { min: 1 }
description: There must be at least one compute node.
key_name:
type: string
label: Key name
description: Name of a key pair to enable SSH access to the instance
default: default
constraints:
- custom_constraint: nova.keypair
reservation_id:
type: string
label: Reservation
description: Blazar reservation to use for launching instances
constraints:
- custom_constraint: blazar.reservation
resources:
control_node_floating_ip:
type: OS::Nova::FloatingIP
properties:
pool: ext-net
control_node:
type: OS::Nova::Server
properties:
name: ControlNode-Instance
flavor: baremetal
image: CC-Ubuntu14.04
key_name: { get_param: key_name }
networks:
- network: sharednet1
scheduler_hints: { reservation: { get_param: reservation_id } }
user_data_format: RAW
user_data: |
#cloud-config
users:
- default
- name: stack
lock_passwd: False
sudo: ["ALL=(ALL) NOPASSWD:ALL\nDefaults:stack !requiretty"]
shell: /bin/bash
write_files:
- content: |
#!/bin/bash
#set -x
#exec &> >(tee -a /home/stack/postlog.log)
sudo apt-get update
sudo apt-get install -y git python-pip vim screen
sudo apt-get upgrade -y python
sudo pip uninstall tox
sudo pip install tox==2.5.0
sudo chown stack:stack /home/stack
touch host
sudo sed -e "s/[ ]*127.0.0.1[ ]*localhost[ ]*$/127.0.0.1 localhost $HOSTNAME/" /etc/hosts > host
sudo cp -f host /etc/hosts
#sudo su -c "useradd stack -s /bin/bash -m -g cc -G cc"
#sudo sed -i '$a stack ALL=(ALL) NOPASSWD: ALL' /etc/sudoers
cd /home/stack
git clone https://github.com/openstack-dev/devstack.git -b stable/newton
sudo chown -R stack:stack /home/stack/*
cd devstack
HOST_IP=$(/sbin/ifconfig eth0 | grep 'inet addr' | cut -d: -f2 | awk '{print $1}')
#VAR=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/')
#printf '\nHOST_IP=%s'$VAR'\n' >> local.conf
#printf ' address '$VAR'\n'>> interface
#git clone https://github.com/BAbrandon/ScriptsForHeat.git
touch interface
cat <<EOF | cat > interface
auto eth0
iface eth0 inet static
address $HOST_IP
netmask 255.255.254.0
broadcast 10.50.1.255
gateway 10.50.1.254
EOF
#sudo cp -f interface /etc/network/interfaces
#sudo ifdown eth0
#sudo ifup eth0
cat <<EOF | cat > local.conf
[[local|localrc]]
#credential
SERVICE_TOKEN=secret
ADMIN_PASSWORD=secret
MYSQL_PASSWORD=secret
RABBIT_PASSWORD=secret
SERVICE_PASSWORD=secret
#network
FLAT_INTERFACE=eth0
FIXED_RANGE=192.168.1.0/24
NETWORK_GATEWAY=192.168.1.1
FIXED_NETWORK_SIZE=4096
HOST_IP=$HOST_IP
FLOATING_RANGE=10.50.0.0/23
Q_FLOATING_ALLOCATION_POOL="start=10.50.0.2,end=10.50.0.254"
PUBLIC_NETWORK_GATEWAY=10.50.1.254
#multi_host
MULTI_HOST=1
# Enable Logging
LOGFILE=/opt/stack/logs/stack.sh.log
VERBOSE=True
LOG_COLOR=True
SCREEN_LOGDIR=/opt/stack/logs
#service
disable_service n-net
enable_service q-svc
enable_service q-agt
enable_service q-dhcp
enable_service q-l3
enable_service q-meta
enable_service neutron
enable_service q-fwaas
enable_service q-vpn
enable_service q-lbaas
Q_PLUGIN=ml2
Q_ML2_TENANT_NETWORK_TYPE=vxlan
Q_AGENT=linuxbridge
[[post-config|\$NEUTRON_CONF]]
[DEFAULT]
dns_domain=ucare.edu.
[[post-config|/\$Q_PLUGIN_CONF_FILE]]
[ml2]
extension_drivers=port_security,dns
EOF
touch sysctl.conf
sudo sed -e "s/as needed.$/as needed.\n net.ipv4.ip_forward=1\n/" /etc/sysctl.conf > sysctl.conf
sudo sed -e "s/as needed.$/as needed.\n net.ipv4.conf.default.rp.filter=0\n/" sysctl.conf > sysctl.conf
sudo sed -e "s/as needed.$/as needed.\n net.ipv4.conf.all.rp.filter=0\n/" sysctl.conf > sysctl.conf
sudo cp sysctl.conf /etc/sysctl.conf
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
cat <<EOF | cat > local.sh
for i in `seq 2 10`; do /opt/stack/nova/bin/nova-manage fixed reserve 192.168.1.$i; done
EOF
./stack.sh
# Launch a simple webserver on port 6464. Slaves will check this
# port: if it listening, they will start to run their slave.sh
# script.
screen -dm bash -c "python -m SimpleHTTPServer 6464"
source openrc admin
# Configure DNS server
neutron subnet-update public-subnet --dns_nameservers list=true 8.8.8.8
neutron subnet-update private-subnet --dns_nameservers list=true 192.168.1.2 8.8.8.8
# Add security group rule to allow ICMP, SSH, and HTTP
nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0
nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
nova secgroup-add-rule default tcp 80 80 0.0.0.0/0
# Add security group demo-ssh for easy instantiation
openstack security group create demo-ssh
openstack security group rule create --ingress --protocol icmp demo-ssh
openstack security group rule create --ingress --dst-port 22 demo-ssh
openstack security group rule create --ingress --dst-port 80 demo-ssh
path: /home/stack/start.sh
permissions: 0755
runcmd:
- cd /home/stack
- pwd
- cp -r /home/cc/.ssh /home/stack/
- chown -R stack:stack /home/stack/.ssh
- su -l stack ./start.sh
control_node_ip_association:
type: OS::Nova::FloatingIPAssociation
properties:
floating_ip: { get_resource: control_node_floating_ip }
server_id: { get_resource: control_node }
compute_node:
type: OS::Heat::ResourceGroup
properties:
count: { get_param: compute_node_count }
resource_def:
type: OS::Nova::Server
properties:
name: ComputeNode%index%
flavor: baremetal
image: CC-Ubuntu14.04
key_name: { get_param: key_name }
networks:
- network: sharednet1
scheduler_hints: { reservation: { get_param: reservation_id } }
user_data_format: RAW
user_data:
str_replace:
params:
$master_ip$: { get_attr: [control_node, first_address] }
template: |
#cloud-config
users:
- default
- name: stack
lock_passwd: False
sudo: ["ALL=(ALL) NOPASSWD:ALL\nDefaults:stack !requiretty"]
shell: /bin/bash
write_files:
- content: |
#!/bin/bash
#set -x
#exec &> >(tee -a /home/stack/postlog.log)
sudo apt-get update
sudo apt-get install -y git python-pip vim
sudo apt-get upgrade -y python
sudo chown stack:stack /home/stack
touch host
sudo sed -e "s/[ ]*127.0.0.1[ ]*localhost[ ]*$/127.0.0.1 localhost $HOSTNAME/" /etc/hosts > host
sudo cp -f host /etc/hosts
#sudo su -c "useradd stack -s /bin/bash -m -g cc -G cc"
#sudo sed -i '$a stack ALL=(ALL) NOPASSWD: ALL' /etc/sudoers
cd /home/stack
git clone https://github.com/openstack-dev/devstack.git -b stable/newton
sudo chown -R stack:stack /home/stack/*
cd devstack
SERVICE_HOST=$master_ip$
HOST_IP=$(/sbin/ifconfig eth0 | grep 'inet addr' | cut -d: -f2 | awk '{print $1}')
#VAR=$(ip addr | grep 'state UP' -A2 | tail -n1 | awk '{print $2}' | cut -f1 -d'/')
#printf '\nHOST_IP=%s'$VAR'\n' >> local.conf
touch interface
cat <<EOF | cat > interface
auto eth0
iface eth0 inet static
address $HOST_IP
netmask 255.255.254.0
broadcast 10.50.1.255
gateway 10.50.1.254
EOF
#sudo cp -f interface /etc/network/interfaces
#sudo ifdown eth0
#sudo ifup eth0
cat <<EOF | cat > local.conf
[[local|localrc]]
#credential
SERVICE_TOKEN=secret
ADMIN_PASSWORD=secret
MYSQL_PASSWORD=secret
RABBIT_PASSWORD=secret
SERVICE_PASSWORD=secret
#network
FLAT_INTERFACE=eth0
FIXED_RANGE=192.168.1.0/24
NETWORK_GATEWAY=192.168.1.1
FIXED_NETWORK_SIZE=4096
HOST_IP=$HOST_IP
FLOATING_RANGE=10.50.0.0/23
Q_FLOATING_ALLOCATION_POOL="start=10.50.0.2,end=10.50.0.254"
PUBLIC_NETWORK_GATEWAY=10.50.1.254
#multi_host
MULTI_HOST=1
SERVICE_HOST=$SERVICE_HOST
DATABASE_TYPE=mysql
MYSQL_HOST=$SERVICE_HOST
RABBIT_HOST=$SERVICE_HOST
GLANCE_HOSTPORT=$SERVICE_HOST:9292
Q_HOST=$SERVICE_HOST
KEYSTONE_AUTH_HOST=$SERVICE_HOST
KEYSTONE_SERVICE_HOST=$SERVICE_HOST
CINDER_SERVICE_HOST=$SERVICE_HOST
NOVA_VNC_ENABLED=True
NOVNCPROXY_URL="http://$SERVICE_HOST:6080/vnc_auto.html"
VNCSERVER_LISTEN=$HOST_IP
VNCSERVER_PROXYCLIENT_ADDRESS=$HOST_IP
#service
ENABLED_SERVICES=n-cpu,n-api,n-api-meta,neutron,q-agt,q-meta
Q_PLUGIN=ml2
Q_ML2_TENANT_NETWORK_TYPE=vxlan
Q_AGENT=linuxbridge
# Enable Logging
LOGFILE=/opt/stack/logs/stack.sh.log
VERBOSE=True
LOG_COLOR=True
SCREEN_LOGDIR=/opt/stack/logs
EOF
touch sysctl.conf
sudo sed -e "s/as needed.$/as needed.\n net.ipv4.ip_forward=1\n/" /etc/sysctl.conf > sysctl.conf
sudo sed -e "s/as needed.$/as needed.\n net.ipv4.conf.default.rp.filter=0\n/" sysctl.conf > sysctl.conf
sudo sed -e "s/as needed.$/as needed.\n net.ipv4.conf.all.rp.filter=0\n/" sysctl.conf > sysctl.conf
sudo cp -f sysctl.conf /etc/sysctl.conf
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# Check wait until the controller node has completed his
# devstack installation.
until $(curl --output /dev/null --silent --head --fail http://$master_ip$:6464); do printf '.'; sleep 2; done;
./stack.sh
path: /home/stack/start.sh
permissions: 0755
runcmd:
- cd /home/stack
- pwd
- su -l stack ./start.sh