105 lines
3.1 KiB
Python
105 lines
3.1 KiB
Python
#!/usr/bin/env python
|
|
|
|
# Copyright 2015 The Kubernetes Authors All rights reserved.
|
|
#
|
|
# 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
|
|
#
|
|
# 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.
|
|
|
|
import setup
|
|
setup.pre_install()
|
|
import subprocess
|
|
|
|
from charmhelpers.core import hookenv
|
|
from charmhelpers import fetch
|
|
from charmhelpers.fetch import archiveurl
|
|
from path import path
|
|
|
|
|
|
def install():
|
|
install_packages()
|
|
hookenv.log('Installing go')
|
|
download_go()
|
|
|
|
hookenv.log('Adding kubernetes and go to the path')
|
|
|
|
strings = [
|
|
'export GOROOT=/usr/local/go\n',
|
|
'export PATH=$PATH:$GOROOT/bin\n',
|
|
'export KUBE_MASTER_IP=0.0.0.0\n',
|
|
'export KUBERNETES_MASTER=http://$KUBE_MASTER_IP\n',
|
|
]
|
|
update_rc_files(strings)
|
|
hookenv.log('Downloading kubernetes code')
|
|
clone_repository()
|
|
|
|
hookenv.open_port(8080)
|
|
|
|
hookenv.log('Install complete')
|
|
|
|
def download_go():
|
|
"""
|
|
Kubernetes charm strives to support upstream. Part of this is installing a
|
|
fairly recent edition of GO. This fetches the golang archive and installs
|
|
it in /usr/local
|
|
"""
|
|
go_url = 'https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz'
|
|
go_sha1 = '5020af94b52b65cc9b6f11d50a67e4bae07b0aff'
|
|
handler = archiveurl.ArchiveUrlFetchHandler()
|
|
handler.install(go_url, '/usr/local', go_sha1, 'sha1')
|
|
|
|
|
|
def clone_repository():
|
|
"""
|
|
Clone the upstream repository into /opt/kubernetes for deployment compilation
|
|
of kubernetes. Subsequently used during upgrades.
|
|
"""
|
|
|
|
repository = 'https://github.com/GoogleCloudPlatform/kubernetes.git'
|
|
kubernetes_directory = '/opt/kubernetes'
|
|
|
|
command = ['git', 'clone', repository, kubernetes_directory]
|
|
print(command)
|
|
output = subprocess.check_output(command)
|
|
print(output)
|
|
|
|
|
|
|
|
def install_packages():
|
|
"""
|
|
Install required packages to build the k8s source, and syndicate between
|
|
minion nodes. In addition, fetch pip to handle python dependencies
|
|
"""
|
|
hookenv.log('Installing Debian packages')
|
|
# Create the list of packages to install.
|
|
apt_packages = ['build-essential', 'git', 'make', 'nginx', 'python-pip']
|
|
fetch.apt_install(fetch.filter_installed_packages(apt_packages))
|
|
|
|
|
|
|
|
def update_rc_files(strings):
|
|
"""
|
|
Preseed the bash environment for ubuntu and root with K8's env vars to
|
|
make interfacing with the api easier. (see: kubectrl docs)
|
|
"""
|
|
rc_files = [path('/home/ubuntu/.bashrc'), path('/root/.bashrc')]
|
|
for rc_file in rc_files:
|
|
lines = rc_file.lines()
|
|
for string in strings:
|
|
if string not in lines:
|
|
lines.append(string)
|
|
rc_file.write_lines(lines)
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
install()
|