modfied to use lxd/nodes/0 for classic.
[joid.git] / juju / configure-juju-on-openstack
index 62ce885..1d98fd0 100755 (executable)
@@ -4,16 +4,17 @@
 #
 #    Authors: Nicolas Thomss  <nicolas.thomas@canonical.com>
 #
-#    This program is free software: you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation, version 3 of the License.
+#   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
 #
-#    This program is distributed in the hope that it will be useful,
-#    but WITHOUT ANY WARRANTY; without even the implied warranty of
-#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#    GNU General Public License for more details.
+#       http://www.apache.org/licenses/LICENSE-2.0
 #
-#    You should have received a copy of the GNU General Public License
+#   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.
 
 set -ex
 ## TODO use sudo apt-get install python-openstackclient    instead
@@ -24,130 +25,109 @@ set -ex
 ## openstack server show -c status --format value my-instance-name
 
 
-echo "This command is run to launch the first instance on a new Orange box Openstack deployment"
+#Set up a Private OpenStack Cloud using Simplestreams
 
-source ~/nova.rc
+#Overview
 
-#Create a floating IP for the instance
-if ( nova list | grep jumpserver2 >/dev/null )
-then
-    FLOAT_IP="$(nova list | grep jumpserver2 | awk '{ print $13 }')"
-else
-    FLOAT_IP="$(openstack ip floating create ext-net -c ip -f value)"
-fi
+#When Juju bootstraps a cloud, it needs two critical pieces of information:
 
-#Launch an instance
-NET_UUID="$(nova net-list | grep private | awk '{ print $2 }')"
-IMAGE_UUID="$(nova image-list | grep Xenial | awk '{ print $2 }')"
-nova list | grep jumpserver2 ||nova boot --flavor m1.small --key-name default --image $IMAGE_UUID --nic net-id=$NET_UUID --security-group default jumpserver2
-# checking jumpserver2 state until active ..
-INST_STATE=` nova show jumpserver2 | grep status | awk '{print $4}'`
-while [ $INST_STATE != "ACTIVE" ];
-do
-    INST_STATE=` nova show jumpserver2 | grep status | awk '{print $4}'`
-    echo "Jumpserver2 instance state is: "$INST_STATE" waiting to be active"
-    sleep 1
-done
-sleep 6
-#Associate the floating IP with the new instance
-nova floating-ip-associate jumpserver2 $FLOAT_IP || true
+#The UUID of the image to use when starting new compute instances.
+#The URL from which to download the correct version of a tools tarball.
+#This necessary information is stored in a json metadata format called "Simplestreams". For supported public cloud services such as Amazon Web Services, HP Cloud, Azure, etc, no action is required by the end user. However, those setting up a private cloud, or who want to change how things work (eg use a different Ubuntu image), can create their own metadata.
 
-sleep 90
+#This page explains how to use Juju and additional tools to generate this Simplestreams metadata and configure OpenStack to use them.
 
-### make it more Readable
-export SSH="ssh -o StrictHostKeyChecking=no ubuntu@$FLOAT_IP"
+#Requirements
 
+#python-openstackclient
+#python-swiftclient
+#Generating the metadata
 
-#Add juju stable repo
-$SSH sudo add-apt-repository -y ppa:juju/stable
 
-#SSH into the instance and install Juju
-$SSH sudo apt-get -y update
+sudo apt-get install python-openstackclient python-swiftclient
 
-$SSH sudo apt-get -y install juju python-novaclient python-swiftclient
+#To begin, create a directory to hold the generated metadata:
 
+mkdir -p ~/simplestreams/images
 
-#copy over SSH keys
-scp -o StrictHostKeyChecking=no ~/.ssh/id_rsa* ubuntu@$FLOAT_IP:~/.ssh/
+#Now, if necessary, source the nova.rc file for your cloud:
 
+. ~/joid_config/admin-openrc
+
+#We can now determine the region name for the cloud by running:
+
+#OS_REGION_NAME=`openstack endpoint list -c Region -f value | head -1`
+#The output from the above command will be similar to the following:
+
+#Next, enter the following command to determine the Image ID of the cloud image in glance:
+
+X_IMAGE_ID=`openstack image list -f value | grep -i xenial | cut -f 1 -d " "`
+T_IMAGE_ID=`openstack image list -f value | grep -i trusty | cut -f 1 -d " "`
+
+#The following example output shows two images listed, Ubuntu 16.04 (Xenial) and Ubuntu 14.04 (Trusty).
+
+#Take a note of the image IDs for the images you want added to Simplestreams. These will be used in the next step.
+
+#We can now use Juju to generate the metadata:
+
+juju metadata generate-image -d ~/simplestreams -i $X_IMAGE_ID -s xenial -r $OS_REGION_NAME -u $OS_AUTH_URL
+juju metadata generate-image -d ~/simplestreams -i $T_IMAGE_ID -s trusty -r $OS_REGION_NAME -u $OS_AUTH_URL
+
+#To verify that the correct metadata files have been generated, you may run:
+#You should see .json files containing the details we just added on the images.
+
+ls ~/simplestreams/*/streams/*
+
+#Upload the Simplestreams Metadata to Swift
+
+openstack container create simplestreams
+openstack container list
+openstack container show simplestreams
+
+cd ~/simplestreams
+swift upload simplestreams *
+cd -
+
+swift stat simplestreams
+
+swift post simplestreams --read-acl .r:*
+openstack service show product-streams > /dev/null 2>&1 || openstack service create --name product-streams --description "Product Simple Stream" product-streams
+
+SWIFT_URL=`openstack endpoint list --service swift --interface internal -c URL -f value`
+openstack endpoint create --region $OS_REGION_NAME product-streams public $SWIFT_URL/simplestreams/images
+openstack endpoint create --region $OS_REGION_NAME product-streams internal $SWIFT_URL/simplestreams/images
 
 #Output a juju cloud file that works on this cloud
-$SSH \
-"echo 'clouds:
+echo "clouds:
     openstack:
       type: openstack
       auth-types: [access-key, userpass]
       regions:
         $OS_REGION_NAME:
           endpoint: $OS_AUTH_URL
-' > os-cloud.yaml"
-$SSH juju add-cloud openstack os-cloud.yaml
+" > os-cloud.yaml
+juju add-cloud openstack os-cloud.yaml --replace
 
 #Output a juju cred file that works on this cloud
-$SSH \
-"echo 'credentials:
+echo "credentials:
   openstack:
     openstack:
       auth-type: userpass
       password: $OS_PASSWORD
       tenant-name: $OS_TENANT_NAME
       username: $OS_USERNAME
-' > os-creds.yaml"
-
-$SSH "juju add-credential openstack -f os-creds.yaml"
-
-## Creating images metadata
-$SSH mkdir -p juju-meta
-for s in precise trusty xenial win2012r2
-do
-#Create juju metadata
-    IMAGE_UUID="$(nova image-list | grep -i $s | awk '{ print $2 }')"
-    [ -n "$IMAGE_UUID" ] &&  $SSH "juju metadata generate-image -a amd64 -u $OS_AUTH_URL -i $IMAGE_UUID -r $OS_REGION_NAME -d juju-meta/ -s $s"
-done
-
-## Generate tools (needed if windows is in).
-$SSH "juju metadata generate-tools -d juju-meta/ "
-
-## upload images and tools streams to swift and make public
-$SSH "cd ~/juju-meta/ && swift --os-auth-url $OS_AUTH_URL --os-username $OS_USERNAME \
- --os-password $OS_PASSWORD --os-tenant-name $OS_TENANT_NAME \
-upload juju-meta images"
-$SSH "cd ~/juju-meta/ && swift --os-auth-url $OS_AUTH_URL --os-username $OS_USERNAME \
- --os-password $OS_PASSWORD --os-tenant-name $OS_TENANT_NAME \
-upload juju-meta tools"
+      user-domain-name: $OS_USER_DOMAIN_NAME
+      project-domain-name: $OS_PROJECT_DOMAIN_NAME
+" > os-creds.yaml
 
-$SSH swift --os-auth-url $OS_AUTH_URL --os-username $OS_USERNAME  --os-password $OS_PASSWORD \
- --os-tenant-name $OS_TENANT_NAME  post -r '.r:*' juju-meta
+juju add-credential openstack -f os-creds.yaml --replace
 
-## collect the URL for getting the images
-$($SSH swift --os-auth-url $OS_AUTH_URL --os-username $OS_USERNAME  --os-password $OS_PASSWORD \
- --os-tenant-name $OS_TENANT_NAME auth)
+#Bootstrap with Juju
 
-###
-###juju bootstrap openstack openstack --config image-metadata-url=http://192.168.16.5/juju/images/ --config network=private --upload-tools --debug -v
-###
-
-my_ip=`ip route | grep src| grep -v virb|grep -v lxcb| head -1| cut -d " " -f 12 `
-#Bootstrap Juju
-##$SSH "juju bootstrap openstack openstack --metadata-source=/var/www/html/juju-meta/ --upload-tools"
-$SSH "juju bootstrap openstack openstack --config image-metadata-url=$OS_STORAGE_URL/juju-meta/images/ --config tools-metadata-url=$OS_STORAGE_URL/juju-meta/tools/ --config network=private"
-
-
-
-## useless if juju floating ip option on.
-#########################################
-#Create a new floating IP and associate with juju bootstrap instance
-#INSTANCE_ID="$(nova list | grep juju-openstack-machine-0 | awk '{ print $2}')"
-#FLOAT_IP2="$(nova floating-ip-create | grep ext_net | awk '{ print $2}')"
-#nova floating-ip-associate $INSTANCE_ID $FLOAT_IP2
+juju bootstrap openstack --debug --config image-metadata-url=$SWIFT_URL/simplestreams/images --config use-floating-ip=true --config network=private
+juju gui --show-credentials --no-browser
 
 #Print the address of Juju-gui for deployments on Openstack
-echo "Now connect to the Juju-GUI at: http://$FLOAT_IP2/ to continue deployments on Openstack."
-echo "Pass: $OS_PASSWORD"
-
-echo "OR Log in to openstack Jumpserver2 to deploy from command line"
-echo "ssh ubuntu@$FLOAT_IP"
 echo " You must set the following if creating a new model:"
-echo " juju set-model-config image-metadata-url=$OS_STORAGE_URL/juju-meta/images/ tools-metadata-url=$OS_STORAGE_URL/juju-meta/tools/ network=private"
-exit
-
+echo " juju switch openstack "
+echo " juju set-model-config image-metadata-url=$SWIFT_URL/simplestreams/images network=private"