⚠️ This article is new BOSH CLI version of this one.
I'd like to show how to create smallest BOSH release from scratch.
I've tested with bosh-lite created in this article.
$ bosh -version
version 0.0.147-ba602d1-2017-01-11T20:05:06Z
Table of Contents
- Create a project
- Create a job
- Create a package
- Create and Upload a release
- Create a manifest
- Deploy a cluster
Create a project
bosh init-release --dir=simple-http-server-boshrelease --git
cd simple-http-server-boshrelease
Create a job
bosh generate-job simple-http-server
Create jobs/simple-http-server/templates/ctl.erb
:
#!/bin/bash
JOB_NAME=simple-http-server
RUN_DIR=/var/vcap/sys/run/$JOB_NAME
LOG_DIR=/var/vcap/sys/log/$JOB_NAME
PIDFILE=${RUN_DIR}/pid
PORT=<%= p("server.port") %>
case $1 in
start)
mkdir -p $RUN_DIR $LOG_DIR
chown -R vcap:vcap $RUN_DIR $LOG_DIR
cp /var/vcap/packages/$JOB_NAME/index.html .
echo $$ > $PIDFILE
exec chpst -u vcap:vcap python -m SimpleHTTPServer $PORT \
>>$LOG_DIR/$JOB_NAME.log 2>&1
;;
stop)
kill -9 `cat $PIDFILE`
rm -f $PIDFILE
;;
*)
echo "Usage: ctl {start|stop}" ;;
esac
Create jobs/simple-http-server/spec
:
---
name: simple-http-server
templates:
ctl.erb: bin/ctl
packages:
properties:
server.port:
description: "Port on which server is listening"
default: 8080
Create jobs/simple-http-server/monit
:
check process simple-http-server
with pidfile /var/vcap/sys/run/simple-http-server/pid
start program "/var/vcap/jobs/simple-http-server/bin/ctl start"
stop program "/var/vcap/jobs/simple-http-server/bin/ctl stop"
group vcap
Create a package
bosh generate-package simple-http-server
Create source files:
mkdir src/simple-http-server
echo 'Hello BOSH!' > src/simple-http-server/index.html
Create packages/simple-http-server/packaging
:
# abort script on any command that exits with a non zero value
set -e -x
cp -a simple-http-server/index.html $BOSH_INSTALL_TARGET
Create packages/simple-http-server/spec
:
---
name: simple-http-server
dependencies:
files:
- simple-http-server/index.html
Then update jobs/simple-http-server/spec
:
---
name: simple-http-server
templates:
ctl.erb: bin/ctl
packages:
- simple-http-server
properties:
server.port:
description: "Port on which server is listening"
default: 8080
Create and Upload a release
Create config/final.yml
:
---
blobstore:
provider: local
options:
blobstore_path: /tmp/simple-http-server
final_name: simple-http-server
and
bosh create-release --name=simple-http-server --force && bosh -e vbox upload-release
Create a manifest
mkdir manifest
Create manifest/simple-http-server.yml
:
---
name: simple-http-server
releases:
- name: simple-http-server
version: latest
stemcells:
- os: ubuntu-trusty
alias: ubuntu
version: latest
instance_groups:
- name: simple-http-server
jobs:
- name: simple-http-server
release: simple-http-server
properties:
server:
port: 8080
instances: 1
stemcell: ubuntu
azs: [z1]
vm_type: default
persistent_disk_type: default
networks:
- name: default
update:
canaries: 1
max_in_flight: 3
canary_watch_time: 30000-600000
update_watch_time: 5000-600000
Deploy a cluster
Finally,
bosh -e vbox -n -d simple-http-server deploy manifest/manifest.yml
You can see the deployed VM(s):
$ bosh -e vbox vms
Using environment '192.168.50.6' as client 'admin'
Task 19. Done
Deployment 'simple-http-server'
Instance Process State AZ IPs VM CID VM Type
simple-http-server/7b1b17a4-7dc6-4362-bbce-70fff4098aba running z1 10.244.0.3 f7b7df10-a93f-4282-47cf-c2040413c640 default
1 vms
Succeeded
Hit the http server:
$ curl 10.244.0.3:8080
Hello BOSH!