~charmers/charms/precise/chef-server/trunk

« back to all changes in this revision

Viewing changes to hooks/chef_server_common

  • Committer: Edward Hope-Morley
  • Date: 2013-01-31 18:52:33 UTC
  • Revision ID: edward.hope-morley@canonical.com-20130131185233-3590242jyk0w2vd7
fixed config-changed event handling

Show diffs side-by-side

added added

removed removed

Lines of Context:
9
9
set -eu #-x for verbose logging to juju debug-log
10
10
 
11
11
CWD=$(dirname $0)
12
 
 
 
12
CONFIG_CACHE=/var/cache/charms/chef-server.config
13
13
HOSTS_FILE=/etc/hosts
14
14
APT_LIST_PATH=/etc/apt/sources.list.d/opscode.list
15
15
APT_FLAGS="--yes --force-yes"
21
21
                     chef-server
22
22
                     chef-server-webui )
23
23
 
24
 
# Config vars
 
24
# Non-configurable parameters
 
25
RABBIT_PORT=5763
 
26
AMQP_PW=chef_amqp_pw
 
27
 
 
28
# Configurable parameters
25
29
CHEF_VERSION=$(config-get chef-version)
26
30
HOST_IP=$(unit-get private-address)
27
31
WEBUI_PORT=$(config-get webui-port)
28
32
REST_API_PORT=$(config-get restapi-port)
29
33
SOLR_PORT=$(config-get solr-port)
30
 
RABBIT_PORT=$(config-get rabbit-port)
31
34
WEBUI_USER=$(config-get webui-user)
32
35
WEBUI_PW=$(config-get webui-pw)
33
 
AMQP_PW=$(config-get amqp-pw)
34
36
KNIFE_USER=$(config-get knife-user)
35
37
 
36
38
# Make sure we do not get any intercativity when installing packages
39
41
# Bring our little helpers into the frame
40
42
source ${CWD}/functions
41
43
 
 
44
mkdir -p `dirname ${CONFIG_CACHE}`
 
45
 
 
46
# IMPORTANT: if a new setting is added to config it must also be added here.
 
47
function dump_config ()
 
48
{
 
49
  local target=${1}
 
50
 
 
51
  log_info "dumping config to '${target}'"
 
52
 
 
53
cat << __EOF__ > $target
 
54
$CHEF_VERSION
 
55
$HOST_IP
 
56
$WEBUI_PORT
 
57
$REST_API_PORT
 
58
$SOLR_PORT
 
59
$WEBUI_USER
 
60
$WEBUI_PW
 
61
$KNIFE_USER
 
62
__EOF__
 
63
}
 
64
 
 
65
# Determine whether current config is different from the last one.
 
66
function config_has_changed ()
 
67
{
 
68
    if [ ! -f ${CONFIG_CACHE} ]
 
69
    then
 
70
        log_info "config cache '${CONFIG_CACHE}' does not exist"
 
71
        return 0
 
72
    fi
 
73
 
 
74
    dump_config "${CONFIG_CACHE}.tmp"
 
75
 
 
76
    local rc=0
 
77
    diff "${CONFIG_CACHE}" "${CONFIG_CACHE}.tmp" 1>/dev/null || rc=$?
 
78
    if [ $rc != 0 ]
 
79
    then
 
80
        log_info "config has changed"
 
81
        return 0
 
82
    else
 
83
        log_info "config has not changed"
 
84
        return 1
 
85
    fi
 
86
}
 
87
 
 
88
function assert_cfg_change_successful ()
 
89
{
 
90
    rc=${1}
 
91
    setting=${2}
 
92
    if [ $rc != "0" ]
 
93
    then
 
94
        log_error "unable to apply setting '${setting}'"
 
95
        exit 1
 
96
    fi
 
97
}
 
98
 
42
99
function set_service_config_data ()
43
100
{
44
101
    log_info "setting user config data"
45
102
 
46
 
    if [ -z "${WEBUI_USER}" ] || [ -z "${WEBUI_PW}" ];
 
103
    local rc=0
 
104
    local cfg_file=${CHEF_CFG_DIR}/webui.rb
 
105
 
 
106
    if [ -z "${WEBUI_USER}" ]
47
107
    then
48
 
        log_info "null config setting"
 
108
        log_info "WEBUI_USER is null"
49
109
    else
50
 
        local cfg_file=${CHEF_CFG_DIR}/webui.rb
51
 
 
52
110
        key="web_ui_admin_user_name"
53
111
        val="${WEBUI_USER}"
54
 
        sed -e "s/${key} \".+?\"/${key} \"${val}\"/g" ${cfg_file} -i
 
112
        sed -E "s/^${key}\s+\".+?\"/${key} \"${val}\"/g" ${cfg_file} -i
 
113
        grep -qE "^${key}\s+\"${val}\"" ${cfg_file} || rc=$?
 
114
        assert_cfg_change_successful $rc "webui-user"
 
115
    fi
55
116
 
 
117
    if [ -z "${WEBUI_PW}" ]
 
118
    then
 
119
        log_info "WEBUI_PW is null"
 
120
    else
56
121
        key="web_ui_admin_default_password"
57
122
        val="${WEBUI_PW}"
58
 
        sed -e "s/${key} \".+?\"/${key} \"${val}\"/g" ${cfg_file} -i
 
123
        sed -E "s/^${key}\s+\".+?\"/${key} \"${val}\"/g" ${cfg_file} -i
 
124
        grep -qE "^${key}\s+\"${val}\"" ${cfg_file} || rc=$?
 
125
        assert_cfg_change_successful $rc "webui-pw"
59
126
    fi
60
127
}
61
128
 
62
129
function setup_knife_user ()
63
130
{
64
 
    set +e
65
 
    id $KNIFE_USER
66
 
    if [ $? != "0" ]
 
131
    local rc=0
 
132
    id $KNIFE_USER || rc=$?
 
133
    if [ $rc != "0" ]
67
134
    then
68
135
        log_warning "user '${KNIFE_USER}' does not exist so cannot create knife config"
69
136
        return
70
137
    fi
71
 
    set -e
72
138
 
73
139
    LOCAL_CHEF_DIR=/home/$KNIFE_USER/.chef
74
140
    mkdir -p /home/$KNIFE_USER/.chef
94
160
{
95
161
    log_info "installing '${JUJU_UNIT_NAME}' - chef-server version ${CHEF_VERSION}"
96
162
 
 
163
    # IMPORTANT: this MUST be the first action
 
164
    log_info "deleting config cache '${CONFIG_CACHE}'"
 
165
    rm -f "${CONFIG_CACHE}"
 
166
 
97
167
    echo "deb http://apt.opscode.com/ precise-${CHEF_VERSION} main" > ${APT_LIST_PATH}
98
168
 
99
169
    mkdir -p /etc/apt/trusted.gpg.d
114
184
 
115
185
    # Chef server installs a rabbitmq-server which will not install/run if the
116
186
    # following is not set.
117
 
    set +e
118
 
    `grep -q 127.0.1.1 $HOSTS_FILE`
119
 
    if [ $? != "0"  ]
 
187
    local rc=0
 
188
    grep -q 127.0.1.1 $HOSTS_FILE || rc=$?
 
189
    if [ $rc != "0"  ]
120
190
    then
121
191
        echo -e "\n# Added by juju charm for '${JUJU_UNIT_NAME}' install\n127.0.1.1 `hostname`" >> $HOSTS_FILE
122
192
    fi
123
 
    set -e
124
193
 
125
194
    apt-get install chef chef-server $APT_FLAGS
126
195
 
127
196
    # Stop the service until we have finished configuring
128
 
    set +e
129
197
    upstart_stop chef-server
130
 
    set -e
131
198
 
132
199
    setup_knife_user
133
200
 
140
207
    set_service_config_data
141
208
 
142
209
    # Restart the chef-server and related services
143
 
    set +e
144
210
    check_upstart_services_running ${CORE_CHEF_SERVICES[@]}
145
 
    set -e
146
211
 
147
212
    log_info "service unit '${JUJU_UNIT_NAME}' installed."
148
213
    hostname=$(unit-get public-address)
149
214
    log_info "you can now 'juju expose' the '${JUJU_UNIT_NAME}' service and visit http://${hostname}:${WEBUI_PORT}"
 
215
 
 
216
    # IMPORTANT: this MUST be the last action.
 
217
    dump_config "${CONFIG_CACHE}"
150
218
}
151
219
 
152
220
function stop_all_services ()
153
221
{
154
222
    for srvc in ${CORE_CHEF_SERVICES[@]}
155
223
    do
156
 
        set +e
157
224
        upstart_stop $srvc
158
 
        set -e
159
225
    done
160
226
}
161
227
 
162
228
function service_start ()
163
229
{
164
230
    log_info "starting service unit '${JUJU_UNIT_NAME}'"
165
 
    set +e
166
231
    check_upstart_services_running ${CORE_CHEF_SERVICES[@]}
167
 
    set -e
168
232
    log_info "service unit '${JUJU_UNIT_NAME}' started."
169
233
}
170
234
 
178
242
function service_upgrade ()
179
243
{
180
244
    log_info "upgrading service unit '${JUJU_UNIT_NAME}'"
181
 
    service_stop
182
 
    service_install
 
245
     # Make sure the config really has changed befaore re-installing
 
246
    if config_has_changed
 
247
    then
 
248
        service_stop
 
249
        service_install
 
250
    else
 
251
        log_info "config has not changed so skipping re-install - checking services instead"
 
252
        check_upstart_services_running ${CORE_CHEF_SERVICES[@]}
 
253
    fi
183
254
    log_info "service unit '${JUJU_UNIT_NAME}' upgraded."
184
255
}
185
256