-
Notifications
You must be signed in to change notification settings - Fork 27
Expand file tree
/
Copy pathplugin.sh
More file actions
225 lines (175 loc) · 8.05 KB
/
plugin.sh
File metadata and controls
225 lines (175 loc) · 8.05 KB
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
# Install and start **blazar** reservation service
# Save trace setting
XTRACE=$(set +o | grep xtrace)
set +o xtrace
# Support entry points installation of console scripts
if [[ -d $BLAZAR_DIR/bin ]]; then
BLAZAR_BIN_DIR=$BLAZAR_DIR/bin
else
BLAZAR_BIN_DIR=$(get_python_exec_prefix)
fi
# Test if any Blazar services are enabled
# is_blazar_enabled
function is_blazar_enabled {
[[ ,${ENABLED_SERVICES} =~ ,"blazar-" ]] && return 0
return 1
}
# configure_blazar() - Set config files, create data dirs, etc
function configure_blazar {
if [[ ! -d $BLAZAR_CONF_DIR ]]; then
sudo mkdir -p $BLAZAR_CONF_DIR
fi
sudo chown $STACK_USER $BLAZAR_CONF_DIR
touch $BLAZAR_CONF_FILE
iniset $BLAZAR_CONF_FILE DEFAULT os_auth_version v3
iniset $BLAZAR_CONF_FILE DEFAULT os_auth_host $(ipv6_unquote $KEYSTONE_SERVICE_HOST)
iniset $BLAZAR_CONF_FILE DEFAULT os_auth_port 80
iniset $BLAZAR_CONF_FILE DEFAULT os_auth_prefix identity
iniset $BLAZAR_CONF_FILE DEFAULT os_admin_password $SERVICE_PASSWORD
iniset $BLAZAR_CONF_FILE DEFAULT os_admin_username blazar
iniset $BLAZAR_CONF_FILE DEFAULT os_admin_project_name $SERVICE_TENANT_NAME
iniset $BLAZAR_CONF_FILE DEFAULT identity_service $BLAZAR_IDENTITY_SERVICE_NAME
iniset $BLAZAR_CONF_FILE DEFAULT os_region_name $REGION_NAME
iniset $BLAZAR_CONF_FILE DEFAULT endpoint_type public
# Keystone authtoken
_blazar_setup_keystone $BLAZAR_CONF_FILE keystone_authtoken
iniset $BLAZAR_CONF_FILE neutron endpoint_type public
iniset $BLAZAR_CONF_FILE nova aggregate_freepool_name $BLAZAR_FREEPOOL_NAME
iniset $BLAZAR_CONF_FILE nova endpoint_type public
iniset $BLAZAR_CONF_FILE placement endpoint_type public
iniset $BLAZAR_CONF_FILE DEFAULT host $(ipv6_unquote $SERVICE_HOST)
iniset $BLAZAR_CONF_FILE DEFAULT debug $BLAZAR_DEBUG
iniset $BLAZAR_CONF_FILE manager plugins physical.host.plugin,virtual.instance.plugin,virtual.floatingip.plugin,flavor.instance.plugin
iniset $BLAZAR_CONF_FILE api api_v2_controllers oshosts,leases
iniset $BLAZAR_CONF_FILE database connection `database_connection_url blazar`
iniset $BLAZAR_CONF_FILE DEFAULT use_syslog $SYSLOG
iniset_rpc_backend blazar $BLAZAR_CONF_FILE DEFAULT
setup_logging $BLAZAR_CONF_FILE
ACTUAL_FILTERS=$(iniget $NOVA_CONF filter_scheduler enabled_filters)
if [[ -z "$ACTUAL_FILTERS" ]]; then
iniadd $NOVA_CONF filter_scheduler enabled_filters "AvailabilityZoneFilter,ComputeFilter,ComputeCapabilitiesFilter,ImagePropertiesFilter,ServerGroupAntiAffinityFilter,ServerGroupAffinityFilter,SameHostFilter,DifferentHostFilter,BlazarFilter"
else
if [[ $ACTUAL_FILTERS != *BlazarFilter* ]]; then
ACTUAL_FILTERS="$ACTUAL_FILTERS,BlazarFilter"
fi
iniset $NOVA_CONF filter_scheduler enabled_filters $ACTUAL_FILTERS
fi
ACTUAL_AVAILABLE_FILTERS=$(iniget $NOVA_CONF filter_scheduler available_filters)
if [[ -z "$ACTUAL_AVAILABLE_FILTERS" ]]; then
iniset $NOVA_CONF filter_scheduler available_filters "nova.scheduler.filters.all_filters"
fi
iniadd $NOVA_CONF filter_scheduler available_filters "blazarnova.scheduler.filters.blazar_filter.BlazarFilter"
if [[ "$BLAZAR_USE_MOD_WSGI" == "True" ]]; then
write_uwsgi_config "$BLAZAR_UWSGI_CONF" "$BLAZAR_UWSGI" "/reservation" "" "blazar"
fi
# Database
recreate_database blazar utf8
# Run Blazar db migrations
$BLAZAR_BIN_DIR/blazar-db-manage --config-file $BLAZAR_CONF_FILE upgrade head
}
# Configures Keystone integration for the Blazar service
function _blazar_setup_keystone {
local conf_file=$1
local section=$2
configure_keystone_authtoken_middleware $conf_file $BLAZAR_USER_NAME $section
}
# create_blazar_aggregate_freepool() - Create a Nova aggregate to use as freepool (for host reservation)
function create_blazar_aggregate_freepool {
openstack --os-region-name $REGION_NAME aggregate create $BLAZAR_FREEPOOL_NAME
}
# create_blazar_accounts() - Set up common required Blazar accounts
#
# Tenant User Roles
# ------------------------------------------------------------------
# service blazar admin # if enabled
#
function create_blazar_accounts {
SERVICE_TENANT=$(openstack project list | awk "/ $SERVICE_TENANT_NAME / { print \$2 }")
ADMIN_ROLE=$(openstack role list | awk "/ admin / { print \$2 }")
BLAZAR_USER_ID=$(get_or_create_user $BLAZAR_USER_NAME \
"$SERVICE_PASSWORD" "default" "[email protected]")
get_or_add_user_project_role $ADMIN_ROLE $BLAZAR_USER_ID $SERVICE_TENANT
if [[ "$BLAZAR_USE_MOD_WSGI" == "True" ]]; then
blazar_api_url="$BLAZAR_SERVICE_PROTOCOL://$BLAZAR_SERVICE_HOST/reservation"
else
blazar_api_url="$BLAZAR_SERVICE_PROTOCOL://$BLAZAR_SERVICE_HOST:$BLAZAR_SERVICE_PORT"
fi
BLAZAR_SERVICE=$(get_or_create_service "blazar" \
"reservation" "Blazar Reservation Service")
get_or_create_endpoint $BLAZAR_SERVICE \
"$REGION_NAME" \
"$blazar_api_url/v1"
}
# install_blazar() - Collect sources and install
function install_blazar {
echo "Install"
git_clone $BLAZAR_REPO $BLAZAR_DIR $BLAZAR_BRANCH
git_clone $BLAZARCLIENT_REPO $BLAZARCLIENT_DIR $BLAZARCLIENT_BRANCH
git_clone $BLAZARNOVA_REPO $BLAZARNOVA_DIR $BLAZARNOVA_BRANCH
setup_develop $BLAZAR_DIR
setup_develop $BLAZARCLIENT_DIR
setup_develop $BLAZARNOVA_DIR
}
# install_blazar_dashboard() - Install Blazar dashboard for Horizon
function install_blazar_dashboard {
git_clone $BLAZAR_DASHBOARD_REPO $BLAZAR_DASHBOARD_DIR $BLAZAR_DASHBOARD_BRANCH
setup_develop $BLAZAR_DASHBOARD_DIR
blazar_setup_horizon
}
# Set up Horizon integration with Blazar
function blazar_setup_horizon {
# Link Dashboard panel to Horizon's directory
ln -fs $BLAZAR_DASHBOARD_DIR/blazar_dashboard/enabled/_90_admin_reservation_panelgroup.py $HORIZON_DIR/openstack_dashboard/local/enabled/
ln -fs $BLAZAR_DASHBOARD_DIR/blazar_dashboard/enabled/_90_project_reservations_panelgroup.py $HORIZON_DIR/openstack_dashboard/local/enabled/
ln -fs $BLAZAR_DASHBOARD_DIR/blazar_dashboard/enabled/_91_admin_reservation_hosts_panel.py $HORIZON_DIR/openstack_dashboard/local/enabled/
ln -fs $BLAZAR_DASHBOARD_DIR/blazar_dashboard/enabled/_91_project_reservations_leases_panel.py $HORIZON_DIR/openstack_dashboard/local/enabled/
# Restart Horizon
restart_apache_server
}
# start_blazar() - Start running processes, including screen
function start_blazar {
if [ "$BLAZAR_USE_MOD_WSGI" == "True" ]; then
run_process 'blazar-a' "$(which uwsgi) --ini $BLAZAR_UWSGI_CONF"
else
run_process blazar-a "$BLAZAR_BIN_DIR/blazar-api --debug --config-file $BLAZAR_CONF_FILE"
fi
run_process blazar-m "$BLAZAR_BIN_DIR/blazar-manager --debug --config-file $BLAZAR_CONF_FILE"
}
# stop_blazar() - Stop running processes
function stop_blazar {
for serv in blazar-a blazar-m; do
stop_process $serv
done
}
# clean_blazar_configuration() - Cleanup blazar configurations
function clean_blazar_configuration {
if [[ "$BLAZAR_USE_MOD_WSGI" == "True" ]]; then
remove_uwsgi_config "$BLAZAR_UWSGI_CONF" "$BLAZAR_UWSGI"
fi
}
if is_service_enabled blazar blazar-m blazar-a; then
if [[ "$1" == "stack" && "$2" == "install" ]]; then
echo_summary "Installing Blazar"
# Use stack_install_service here to account for virtualenv
stack_install_service blazar
if is_service_enabled horizon; then
install_blazar_dashboard
fi
elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then
echo_summary "Configuring Blazar"
configure_blazar
create_blazar_accounts
elif [[ "$1" == "stack" && "$2" == "extra" ]]; then
echo_summary "Creating Nova aggregate used as freepool for Blazar Host Reservation"
create_blazar_aggregate_freepool
# Start the services
start_blazar
fi
if [[ "$1" == "unstack" ]]; then
echo_summary "Shutting Down Blazar"
stop_blazar
clean_blazar_configuration
fi
fi
# Restore xtrace
$XTRACE