Created
January 11, 2017 01:17
-
-
Save vfarcic/6f2125bc6935201be24335172246174e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cd cloud-provisioning | |
git pull | |
cd terraform/aws-full | |
export AWS_ACCESS_KEY_ID=[...] | |
export AWS_SECRET_ACCESS_KEY=[...] | |
export AWS_DEFAULT_REGION=us-east-1 | |
packer build -machine-readable \ | |
packer-ubuntu-docker.json \ | |
| tee packer-ubuntu-docker.log | |
export TF_VAR_aws_access_key=$AWS_ACCESS_KEY_ID | |
export TF_VAR_aws_secret_key=$AWS_SECRET_ACCESS_KEY | |
export TF_VAR_aws_default_region=$AWS_DEFAULT_REGION | |
export KEY_PATH=$HOME/.ssh/devops21.pem | |
cp $KEY_PATH devops21.pem | |
export TF_VAR_swarm_ami_id=$(\ | |
grep 'artifact,0,id' \ | |
packer-ubuntu-docker.log \ | |
| cut -d, -f6 | cut -d: -f2) | |
terraform apply \ | |
-target aws_instance.swarm-manager \ | |
-var swarm_init=true \ | |
-var swarm_managers=1 | |
export TF_VAR_swarm_manager_token=$(ssh \ | |
-i devops21.pem \ | |
ubuntu@$(terraform output \ | |
swarm_manager_1_public_ip) \ | |
docker swarm join-token -q manager) | |
export TF_VAR_swarm_manager_ip=$(terraform \ | |
output swarm_manager_1_private_ip) | |
terraform apply \ | |
-target aws_instance.swarm-manager | |
ssh -i devops21.pem \ | |
ubuntu@$(terraform output \ | |
swarm_manager_1_public_ip) | |
docker node ls | |
git clone https://github.com/vfarcic/cloud-provisioning.git | |
cd cloud-provisioning/scripts | |
./swarm-services-2.sh | |
exit | |
ssh -i devops21.pem \ | |
ubuntu@$(terraform output \ | |
swarm_manager_1_public_ip) | |
docker service create --name jenkins \ | |
-e JENKINS_OPTS="--prefix=/jenkins" \ | |
--label com.df.notify=true \ | |
--label com.df.distribute=true \ | |
--label com.df.servicePath=/jenkins \ | |
--label com.df.port=8080 \ | |
--network proxy \ | |
--reserve-memory 300m \ | |
jenkins:2.7.4-alpine | |
exit | |
open "http://$(terraform output swarm_manager_1_public_ip)/jenkins" | |
ssh -i devops21.pem \ | |
ubuntu@$(terraform output \ | |
swarm_manager_1_public_ip) | |
docker service ps jenkins | |
JENKINS_IP=$(docker service ps jenkins \ | |
| tail -n 1 \ | |
| awk '{ print $4 }' \ | |
| cut -c 4- \ | |
| tr "-" ".") | |
JENKINS_ID=$(docker -H tcp://$JENKINS_IP:2375 \ | |
ps -q \ | |
--filter label=com.docker.swarm.service.name=jenkins) | |
docker -H tcp://$JENKINS_IP:2375 \ | |
exec -it $JENKINS_ID \ | |
cat /var/jenkins_home/secrets/initialAdminPassword | |
docker -H tcp://$JENKINS_IP:2375 \ | |
rm -f $JENKINS_ID | |
docker service ps jenkins | |
docker service rm jenkins | |
exit | |
open "https://console.aws.amazon.com/efs/home?region=$AWS_DEFAULT_REGION" | |
ssh -i devops21.pem \ | |
ubuntu@$(terraform output \ | |
swarm_manager_1_public_ip) | |
sudo mkdir -p /mnt/efs | |
sudo mount -t nfs4 \ | |
-o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 \ | |
fs-07538d4e.efs.us-east-1.amazonaws.com:/ \ | |
/mnt/efs | |
sudo mkdir -p /mnt/efs/jenkins | |
sudo chmod 777 /mnt/efs/jenkins | |
exit | |
ssh -i devops21.pem \ | |
ubuntu@$(terraform output \ | |
swarm_manager_2_public_ip) | |
sudo mkdir -p /mnt/efs | |
sudo mount -t nfs4 \ | |
-o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 \ | |
fs-07538d4e.efs.us-east-1.amazonaws.com:/ \ | |
/mnt/efs | |
exit | |
ssh -i devops21.pem \ | |
ubuntu@$(terraform output \ | |
swarm_manager_3_public_ip) | |
sudo mkdir -p /mnt/efs | |
sudo mount -t nfs4 \ | |
-o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2 \ | |
fs-07538d4e.efs.us-east-1.amazonaws.com:/ \ | |
/mnt/efs | |
exit | |
ssh -i devops21.pem \ | |
ubuntu@$(terraform output \ | |
swarm_manager_1_public_ip) | |
docker service create --name jenkins \ | |
-e JENKINS_OPTS="--prefix=/jenkins" \ | |
--mount "type=bind,source=/mnt/efs/jenkins,target=/var/jenkins_home" \ | |
--label com.df.notify=true \ | |
--label com.df.distribute=true \ | |
--label com.df.servicePath=/jenkins \ | |
--label com.df.port=8080 \ | |
--network proxy \ | |
--reserve-memory 300m \ | |
jenkins:2.7.4-alpine | |
docker service ps jenkins | |
exit | |
open "http://$(terraform output swarm_manager_1_public_ip)/jenkins" | |
ssh -i devops21.pem \ | |
ubuntu@$(terraform output \ | |
swarm_manager_1_public_ip) | |
cat /mnt/efs/jenkins/secrets/initialAdminPassword | |
JENKINS_IP=$(docker service ps jenkins \ | |
| tail -n 1 \ | |
| awk '{ print $4 }' \ | |
| cut -c 4- \ | |
| tr "-" ".") | |
JENKINS_ID=$(docker -H tcp://$JENKINS_IP:2375 \ | |
ps -q \ | |
--filter label=com.docker.swarm.service.name=jenkins) | |
docker -H tcp://$JENKINS_IP:2375 \ | |
rm -f $JENKINS_ID | |
docker service ps jenkins | |
docker service rm jenkins | |
exit | |
terraform output security_group_id | |
ssh -i devops21.pem \ | |
ubuntu@$(terraform output \ | |
swarm_manager_1_public_ip) | |
curl -sSL https://dl.bintray.com/emccode/rexray/install | sh -s -- stable | |
export AWS_ACCESS_KEY_ID=[...] | |
export AWS_SECRET_ACCESS_KEY=[...] | |
export AWS_DEFAULT_REGION=[...] | |
export AWS_SECURITY_GROUP=[...] | |
echo " | |
libstorage: | |
service: efs | |
server: | |
services: | |
efs: | |
driver: efs | |
efs: | |
accessKey: ${AWS_ACCESS_KEY_ID} | |
secretKey: ${AWS_SECRET_ACCESS_KEY} | |
securityGroups: ${AWS_SECURITY_GROUP} | |
region: ${AWS_DEFAULT_REGION} | |
tag: rexray" \ | |
| sudo tee /etc/rexray/config.yml | |
sudo rexray service start | |
exit | |
ssh -i devops21.pem \ | |
ubuntu@$(terraform output \ | |
swarm_manager_1_public_ip) | |
sudo rexray volume get | |
docker service create --name jenkins \ | |
-e JENKINS_OPTS="--prefix=/jenkins" \ | |
--mount "type=volume,source=jenkins,target=/var/jenkins_home,volume-driver=rexray" \ | |
--label com.df.notify=true \ | |
--label com.df.distribute=true \ | |
--label com.df.servicePath=/jenkins \ | |
--label com.df.port=8080 \ | |
--network proxy \ | |
--reserve-memory 300m \ | |
jenkins:2.7.4-alpine | |
sudo rexray volume get | |
docker volume ls | |
exit | |
open "https://console.aws.amazon.com/efs/home?region=$AWS_DEFAULT_REGION" | |
open "http://$(terraform output swarm_manager_1_public_ip)/jenkins" | |
ssh -i devops21.pem \ | |
ubuntu@$(terraform output \ | |
swarm_manager_1_public_ip) | |
docker run -it --rm \ | |
--volume-driver rexray \ | |
-v jenkins:/var/jenkins_home \ | |
alpine cat /var/jenkins_home/secrets/initialAdminPassword | |
JENKINS_IP=$(docker service ps jenkins | tail -n 1 \ | |
| awk '{ print $4 }' | cut -c 4- | tr "-" ".") | |
JENKINS_ID=$(docker -H tcp://$JENKINS_IP:2375 \ | |
ps -q \ | |
--filter label=com.docker.swarm.service.name=jenkins) | |
docker -H tcp://$JENKINS_IP:2375 \ | |
rm -f $JENKINS_ID | |
docker service ps jenkins | |
docker service rm jenkins | |
docker volume rm jenkins | |
exit | |
terraform destroy -force | |
cat packer-ubuntu-docker-rexray.json | |
packer build -machine-readable \ | |
packer-ubuntu-docker-rexray.json \ | |
| tee packer-ubuntu-docker-rexray.log | |
export TF_VAR_swarm_ami_id=$(\ | |
grep 'artifact,0,id' \ | |
packer-ubuntu-docker-rexray.log \ | |
| cut -d, -f6 | cut -d: -f2) | |
cat rexray.tpl | |
cat common.tf | |
cat swarm.tf | |
terraform apply \ | |
-target aws_instance.swarm-manager \ | |
-var swarm_init=true \ | |
-var swarm_managers=1 \ | |
-var rexray=true | |
export TF_VAR_swarm_manager_token=$(ssh \ | |
-i devops21.pem \ | |
ubuntu@$(terraform output \ | |
swarm_manager_1_public_ip) \ | |
docker swarm join-token -q manager) | |
export TF_VAR_swarm_manager_ip=$(terraform \ | |
output swarm_manager_1_private_ip) | |
terraform apply \ | |
-target aws_instance.swarm-manager \ | |
-var rexray=true | |
ssh -i devops21.pem \ | |
ubuntu@$(terraform output \ | |
swarm_manager_1_public_ip) | |
rexray version | |
cat /etc/rexray/config.yml | |
git clone https://github.com/vfarcic/cloud-provisioning.git | |
cd cloud-provisioning/scripts | |
./swarm-services-3.sh | |
docker volume ls | |
docker service ps jenkins # Wait until finished | |
exit | |
open "http://$(terraform output swarm_manager_1_public_ip)/jenkins" | |
ssh -i devops21.pem \ | |
ubuntu@$(terraform output \ | |
swarm_manager_1_public_ip) | |
docker run -it --rm \ | |
--volume-driver rexray \ | |
-v jenkins:/var/jenkins_home \ | |
alpine cat /var/jenkins_home/secrets/initialAdminPassword | |
docker service rm jenkins | |
docker volume rm jenkins | |
exit | |
ssh -i devops21.pem \ | |
ubuntu@$(terraform output \ | |
swarm_manager_1_public_ip) | |
docker network create --driver overlay go-demo | |
for i in 1 2 3; do | |
docker service create --name go-demo-db-rs$i \ | |
--reserve-memory 100m \ | |
--network go-demo \ | |
mongo:3.2.10 mongod --replSet "rs0" | |
done | |
docker service ls | |
docker service create --name go-demo-db-util \ | |
--reserve-memory 100m \ | |
--network go-demo \ | |
--mode global \ | |
mongo:3.2.10 sleep 100000 | |
UTIL_ID=$(docker ps -q \ | |
--filter label=com.docker.swarm.service.name=go-demo-db-util) | |
docker exec -it $UTIL_ID sh | |
mongo --host go-demo-db-rs1 --eval ' | |
rs.initiate({ | |
_id: "rs0", | |
version: 1, | |
members: [ | |
{_id: 0, host: "go-demo-db-rs1" }, | |
{_id: 1, host: "go-demo-db-rs2" }, | |
{_id: 2, host: "go-demo-db-rs3" } | |
] | |
}) | |
' | |
mongo --host go-demo-db-rs1 --eval 'rs.conf()' | |
mongo --host go-demo-db-rs1 --eval 'rs.status()' | |
mongo --host go-demo-db-rs1 | |
use test | |
db.books.insert( | |
{ | |
title:"The DevOps 2.0 Toolkit" | |
} | |
) | |
db.books.insert( | |
{ | |
title:"The DevOps 2.1 Toolkit" | |
} | |
) | |
db.books.find() | |
exit # Mongo | |
exit # go-demo-db-util | |
RS1_IP=$(docker service ps go-demo-db-rs1 \ | |
| tail -n 1 \ | |
| awk '{ print $4 }' \ | |
| cut -c 4- \ | |
| tr "-" ".") | |
docker -H tcp://$RS1_IP:2375 ps | |
RS1_ID=$(docker -H tcp://$RS1_IP:2375 \ | |
ps -q \ | |
--filter label=com.docker.swarm.service.name=go-demo-db-rs1) | |
docker -H tcp://$RS1_IP:2375 rm -f $RS1_ID | |
docker service ps go-demo-db-rs1 | |
docker exec -it $UTIL_ID sh | |
mongo --host go-demo-db-rs1 --eval 'rs.status()' | |
mongo --host go-demo-db-rs2 | |
use test | |
db.books.find() | |
exit # Mongo | |
exit # go-demo-db-util | |
docker service rm go-demo-db-rs1 \ | |
go-demo-db-rs2 go-demo-db-rs3 \ | |
go-demo-db-util | |
for i in 1 2 3; do | |
docker service create --name go-demo-db-rs$i \ | |
--reserve-memory 100m \ | |
--network go-demo \ | |
mongo:3.2.10 mongod --replSet "rs0" | |
MEMBERS="$MEMBERS go-demo-db-rs$i" | |
done | |
docker service create --name go-demo-db-init \ | |
--restart-condition none \ | |
--network go-demo \ | |
vfarcic/mongo-devops21 $MEMBERS | |
docker service ls | |
DB_INIT_IP=$(docker service ps go-demo-db-init \ | |
| tail -n 1 \ | |
| awk '{ print $4 }' \ | |
| cut -c 4- \ | |
| tr "-" ".") | |
DB_INIT_ID=$(docker -H tcp://$DB_INIT_IP:2375 \ | |
ps -aq \ | |
--filter label=com.docker.swarm.service.name=go-demo-db-init) | |
docker -H tcp://$DB_INIT_IP:2375 logs $DB_INIT_ID | |
docker service create --name go-demo \ | |
-e DB="go-demo-db-rs1,go-demo-db-rs2,go-demo-db-rs3" \ | |
--reserve-memory 10m \ | |
--network go-demo \ | |
--network proxy \ | |
--replicas 3 \ | |
--label com.df.notify=true \ | |
--label com.df.distribute=true \ | |
--label com.df.servicePath=/demo \ | |
--label com.df.port=8080 \ | |
vfarcic/go-demo:1.2 | |
docker service ps go-demo | |
exit | |
terraform destroy -force |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment