~charmers/charms/precise/cinder/trunk

« back to all changes in this revision

Viewing changes to hooks/cinder-hooks

  • Committer: Adam Gandelman
  • Date: 2012-10-03 00:35:31 UTC
  • Revision ID: adamg@canonical.com-20121003003531-1fx30qwrfzrhv5kc
Initial Checkin

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/bash -e
 
2
 
 
3
CHARM_DIR=$(dirname $0)
 
4
if [[ -e $CHARM_DIR/cinder-common ]] ; then
 
5
  . $CHARM_DIR/cinder-common
 
6
else
 
7
  juju-log "ERROR: Could not source cinder-common from $CHARM_DIR."
 
8
  exit 1
 
9
fi
 
10
 
 
11
install_hook() {
 
12
  install_source=$(config-get cinder-release)
 
13
  setup_install_source "$install_source"
 
14
  apt-get update || true # ignore transient archive errors
 
15
  pkgs=$(determine_packages)
 
16
  juju-log "cinder: Installing following packages: $pkgs"
 
17
  DEBIAN_FRONTEND=noninteractive apt-get -y install $pkgs
 
18
 
 
19
  if service_enabled "volume" ; then
 
20
    # prepare local storage if volume service is being installed.
 
21
    block_dev=$(config-get block-device)
 
22
    vol_group=$(config-get volume-group)
 
23
    overwrite=$(config-get overwrite)
 
24
    prepare_storage "$block_dev" "$vol_group" "$overwrite"
 
25
    set_or_update "volume_group" "$vol_group"
 
26
    cinder_ctl cinder-volume restart
 
27
  fi
 
28
}
 
29
 
 
30
db_joined() {
 
31
  juju-log "cinder: Requesting database access to cinder database."
 
32
  relation-set database=$(config-get cinder-db) username=$(config-get db-user)
 
33
  relation-set hostname=$(unit-get private-address)
 
34
}
 
35
 
 
36
db_changed() {
 
37
  db_host=$(relation-get private-address)
 
38
  db_password=$(relation-get password)
 
39
 
 
40
  [[ -z "$db_host" ]] || [[ -z "$db_password" ]] &&
 
41
    juju-log "Missing DB_HOST|DB_PASSWORD, peer not ready? Will retry." &&
 
42
    exit 0
 
43
 
 
44
  db_user=$(config-get db-user)
 
45
  cinder_db=$(config-get cinder-db)
 
46
  juju-log "cinder: Configuring cinder for database access to $cinder_db@$db_host"
 
47
  set_or_update sql_connection "mysql://$db_user:$db_password@$db_host/$cinder_db"
 
48
  cinder_ctl all stop
 
49
  /usr/bin/cinder-manage db sync
 
50
  cinder_ctl all start
 
51
}
 
52
 
 
53
amqp_joined() {
 
54
  juju-log "cinder: Requesting amqp access to vhost $rabbit_vhost."
 
55
  relation-set username=$(config-get rabbit-user)
 
56
  relation-set vhost=$(config-get rabbit-vhost)
 
57
}
 
58
 
 
59
amqp_changed() {
 
60
  rabbit_host=$(relation-get private-address)
 
61
  rabbit_password=$(relation-get password)
 
62
  [[ -z "$rabbit_host" ]] || [[ -z "$rabbit_password" ]] &&
 
63
    juju-log "Missing rabbit_host||rabbit_passwd, peer not ready? Will retry." && exit 0
 
64
  juju-log "cinder: Configuring cinder for amqp access to $rabbit_host:$rabbit_vhost"
 
65
  rabbit_user=$(config-get rabbit-user)
 
66
  rabbit_vhost=$(config-get rabbit-vhost)
 
67
  set_or_update rabbit_host $rabbit_host
 
68
  set_or_update rabbit_userid $rabbit_user
 
69
  set_or_update rabbit_password $rabbit_password
 
70
  set_or_update rabbit_virtual_host $rabbit_vhost
 
71
  cinder_ctl all restart
 
72
}
 
73
 
 
74
keystone_joined() {
 
75
  port=$(config-get api-listening-port)
 
76
  url="http://$(unit-get private-address):$port/v1/\$(tenant_id)s"
 
77
  relation-set service="cinder" \
 
78
    region="RegionOne" public_url="$url" admin_url="$url" internal_url="$url"
 
79
}
 
80
 
 
81
keystone_changed() {
 
82
  service_port=$(relation-get service_port)
 
83
  auth_port=$(relation-get auth_port)
 
84
  service_username=$(relation-get service_username)
 
85
  service_password=$(relation-get service_password)
 
86
  service_tenant=$(relation-get service_tenant)
 
87
 
 
88
  [[ -z "$service_port" ]] || [[ -z "$auth_port" ]] ||
 
89
    [[ -z "$service_username" ]] || [[ -z "$service_password" ]] ||
 
90
    [[ -z "$service_tenant" ]] && juju-log "keystone_changed: Peer not ready" &&
 
91
      exit 0
 
92
 
 
93
  keystone_host=$(relation-get private-address)
 
94
 
 
95
  # update keystone authtoken settings accordingly
 
96
  set_or_update "service_host" "$keystone_host" "$API_CONF"
 
97
  set_or_update "service_port" "$service_port" "$API_CONF"
 
98
  set_or_update "auth_host" "$keystone_host" "$API_CONF"
 
99
  set_or_update "auth_port" "$auth_port" "$API_CONF"
 
100
  set_or_update "admin_tenant_name" "$service_tenant" "$API_CONF"
 
101
  set_or_update "admin_user" "$service_username" "$API_CONF"
 
102
  set_or_update "admin_password" "$service_password" "$API_CONF"
 
103
  set_or_update "auth_protocol" "http" "$API_CONF"
 
104
  set_or_update "auth_strategy" "keystone" "$CINDER_CONF"
 
105
 
 
106
  cinder_ctl all restart
 
107
}
 
108
 
 
109
volume_joined() {
 
110
  relation-set volume_service="cinder"
 
111
}
 
112
 
 
113
volume_changed() {
 
114
  # nothing todo here yet.
 
115
  exit 0
 
116
}
 
117
 
 
118
arg0=$(basename $0)
 
119
juju-log "cinder: Attempting to fire hook for: $arg0"
 
120
case $arg0 in
 
121
  "install") install_hook ;;
 
122
  "shared-db-relation-joined") db_joined ;;
 
123
  "shared-db-relation-changed") db_changed ;;
 
124
  "amqp-relation-joined") amqp_joined ;;
 
125
  "amqp-relation-changed") amqp_changed ;;
 
126
  "identity-service-relation-joined") keystone_joined ;;
 
127
  "identity-service-relation-changed") keystone_changed ;;
 
128
  "cinder-volume-service-relation-joined") volume_joined ;;
 
129
  "cinder-volume-service-relation-changed") volume_changed ;;
 
130
  *) exit 0
 
131
esac