2015-01-30 05:15:34 +00:00
#!/bin/bash
2015-01-30 05:22:17 +00:00
2016-06-03 00:25:58 +00:00
# Copyright 2014 The Kubernetes Authors.
2015-01-30 05:22:17 +00:00
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
2015-01-30 05:15:34 +00:00
#
2015-01-30 05:22:17 +00:00
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
2015-01-30 05:15:34 +00:00
# The business logic for whether a given object should be created
# was already enforced by salt, and /etc/kubernetes/addons is the
# managed result is of that. Start everything below that directory.
2015-06-10 21:47:14 +00:00
KUBECTL = ${ KUBECTL_BIN :- /usr/local/bin/kubectl }
2015-03-11 20:42:41 +00:00
2016-06-21 14:42:53 +00:00
ADDON_CHECK_INTERVAL_SEC = ${ TEST_ADDON_CHECK_INTERVAL_SEC :- 60 }
2015-06-15 14:31:17 +00:00
2015-06-25 04:55:40 +00:00
SYSTEM_NAMESPACE = kube-system
2016-02-01 19:36:45 +00:00
trusty_master = ${ TRUSTY_MASTER :- false }
2015-06-25 04:55:40 +00:00
2015-03-13 22:34:00 +00:00
# $1 filename of addon to start.
2015-04-02 21:07:23 +00:00
# $2 count of tries to start the addon.
# $3 delay in seconds between two consecutive tries
2015-06-25 04:55:40 +00:00
# $4 namespace
2015-04-02 21:07:23 +00:00
function start_addon( ) {
2015-03-13 22:34:00 +00:00
local -r addon_filename = $1 ;
local -r tries = $2 ;
local -r delay = $3 ;
2015-06-25 04:55:40 +00:00
local -r namespace = $4
2015-03-13 22:34:00 +00:00
2015-06-25 04:55:40 +00:00
create-resource-from-string " $( cat ${ addon_filename } ) " " ${ tries } " " ${ delay } " " ${ addon_filename } " " ${ namespace } "
2015-03-13 22:34:00 +00:00
}
# $1 string with json or yaml.
# $2 count of tries to start the addon.
# $3 delay in seconds between two consecutive tries
2015-06-25 04:55:40 +00:00
# $4 name of this object to use when logging about it.
# $5 namespace for this object
2015-03-13 22:34:00 +00:00
function create-resource-from-string( ) {
local -r config_string = $1 ;
2015-04-20 14:35:20 +00:00
local tries = $2 ;
2015-03-13 22:34:00 +00:00
local -r delay = $3 ;
2015-06-02 09:41:13 +00:00
local -r config_name = $4 ;
2015-06-25 04:55:40 +00:00
local -r namespace = $5 ;
2015-04-02 21:07:23 +00:00
while [ ${ tries } -gt 0 ] ; do
2016-03-29 23:40:33 +00:00
echo " ${ config_string } " | ${ KUBECTL } --namespace= " ${ namespace } " apply -f - && \
2015-06-25 04:55:40 +00:00
echo " == Successfully started ${ config_name } in namespace ${ namespace } at $( date -Is) " && \
2015-04-02 21:07:23 +00:00
return 0;
let tries = tries-1;
2015-06-25 04:55:40 +00:00
echo " == Failed to start ${ config_name } in namespace ${ namespace } at $( date -Is) . ${ tries } tries remaining. == "
2015-04-02 21:07:23 +00:00
sleep ${ delay } ;
2015-03-11 20:42:41 +00:00
done
2015-04-02 21:07:23 +00:00
return 1;
2015-03-11 20:42:41 +00:00
}
2015-04-02 21:07:23 +00:00
# The business logic for whether a given object should be created
# was already enforced by salt, and /etc/kubernetes/addons is the
# managed result is of that. Start everything below that directory.
2015-06-23 14:57:12 +00:00
echo " == Kubernetes addon manager started at $( date -Is) with ADDON_CHECK_INTERVAL_SEC= ${ ADDON_CHECK_INTERVAL_SEC } == "
2015-03-13 22:34:00 +00:00
2015-07-06 23:51:54 +00:00
# Create the namespace that will be used to host the cluster-level add-ons.
2016-05-05 17:51:32 +00:00
start_addon /opt/namespace.yaml 100 10 "" &
2015-07-06 23:51:54 +00:00
# Wait for the default service account to be created in the kube-system namespace.
2015-06-30 00:58:38 +00:00
token_found = ""
2015-06-30 13:51:10 +00:00
while [ -z " ${ token_found } " ] ; do
2015-06-30 00:58:38 +00:00
sleep .5
2015-08-21 13:09:41 +00:00
token_found = $( ${ KUBECTL } get --namespace= " ${ SYSTEM_NAMESPACE } " serviceaccount default -o go-template= "{{with index .secrets 0}}{{.name}}{{end}}" || true )
2015-06-30 00:58:38 +00:00
done
2015-07-06 23:51:54 +00:00
echo " == default service account in the ${ SYSTEM_NAMESPACE } namespace has token ${ token_found } == "
2015-06-25 04:55:40 +00:00
2015-05-19 00:59:16 +00:00
# Create admission_control objects if defined before any other addon services. If the limits
# are defined in a namespace other than default, we should still create the limits for the
# default namespace.
for obj in $( find /etc/kubernetes/admission-controls \( -name \* .yaml -o -name \* .json \) ) ; do
2015-08-21 01:41:36 +00:00
start_addon " ${ obj } " 100 10 default &
2015-05-19 00:59:16 +00:00
echo " ++ obj ${ obj } is created ++ "
done
2015-06-02 09:41:13 +00:00
# Check if the configuration has changed recently - in case the user
# created/updated/deleted the files on the master.
while true; do
2015-06-23 14:57:12 +00:00
start_sec = $( date +"%s" )
2015-06-02 09:41:13 +00:00
#kube-addon-update.sh must be deployed in the same directory as this file
2015-06-23 14:57:12 +00:00
` dirname $0 ` /kube-addon-update.sh /etc/kubernetes/addons ${ ADDON_CHECK_INTERVAL_SEC }
end_sec = $( date +"%s" )
len_sec = $(( ${ end_sec } - ${ start_sec } ))
# subtract the time passed from the sleep time
if [ [ ${ len_sec } -lt ${ ADDON_CHECK_INTERVAL_SEC } ] ] ; then
sleep_time = $(( ${ ADDON_CHECK_INTERVAL_SEC } - ${ len_sec } ))
sleep ${ sleep_time }
fi
2015-01-30 05:15:34 +00:00
done