Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- # This script creates all necessary components to start booting VM's in openstack. This includes
- # - Project
- # - User
- # - Networking, subnets, router,
- # Security group allows
- # - 22 (SSH)
- # - IMPI (Ping test)
- # - 80 (Apache)
- #
- # Execution:
- # create_openstack_user.sh John Doe MYPASSWORD jdoe@utsa.edu
- FIRST_NAME=$1
- LAST_NAME=$2
- PASSWORD=$3
- USER_EMAIL_ADDRESS=$4
- firstletter=${FIRST_NAME:0:1}
- USER_NAME=$firstletter$LAST_NAME
- NAME="$FIRST_NAME $LAST_NAME"
- PROJECT_NAME=$USER_NAME
- NETWORK_NAME="$PROJECT_NAME"_Network
- SUBNET_NAME="$PROJECT_NAME"_Subnet
- ROUTER_NAME="$PROJECT_NAME"_Router
- ##############################
- if [ $# -ne 4 ]
- then
- echo ""
- echo "Error: Not enough arguments supplied"
- echo ""
- echo "Usage:"
- echo " ./create_openstack_user.sh John Doe MYPASSWORD jdoe@utsa.edu"
- echo ""
- echo "Username is JDoe"
- echo ""
- exit
- fi
- ##############################
- file="openrc.sh"
- if [ -f "$file" ]
- then
- echo "$file found..."
- source $file
- else
- echo "$file not found."
- file="admin-openrc.sh"
- if [ -f "$file" ]
- then
- echo "$file found..."
- source $file
- else
- echo "$file not found."
- exit
- fi
- fi
- ##############################
- python -c "import openstackclient2"
- if [ $? -eq 0 ]; then
- echo "INFO: openstackclient client installed"
- else
- echo "FAIL: Please install openstackclient."
- echo " pip install python-openstackclient"
- exit
- fi
- ##############################
- echo "##################################"
- echo "# GRABBING EXTERNAL NETWORK INFO #"
- echo "##################################"
- EXTERNAL_NETWORK_NAME=$(openstack network list --long | grep External | awk '{print $4}')
- EXTERNAL_NETWORK_ID=$(openstack network show -f shell "$EXTERNAL_NETWORK_NAME" -c id | cut -d "\"" -f 2)
- ##########################
- # Create Project and User
- ##########################
- echo "##################"
- echo "# CREATING GROUP #"
- echo "##################"
- openstack project create --description "Project for $NAME" "$PROJECT_NAME"
- echo "INFO: Creating user..."
- openstack user create --project "$PROJECT_NAME" --description "$NAME" --password "$PASSWORD" --email "$USER_EMAIL_ADDRESS" --enable "$USER_NAME"
- #keystone user-create --name $USER_NAME --tenant $PROJECT_NAME --pass $PASSWORD --email $USER_EMAIL_ADDRESS --enabled true
- #PROJECT_ID=`keystone tenant-get $PROJECT_NAME |grep id |cut -d"|" -f 3 |cut -d" " -f 2`
- echo "INFO: Getting project ID..."
- PROJECT_ID=$(openstack project show -f shell -c id "$PROJECT_NAME" |cut -d"=" -f2 | tr -d '"')
- ################################################
- # Create Network, Subnet and Router for Project
- ################################################
- echo "#######################"
- echo "# CREATING NETWORKING #"
- echo "#######################"
- openstack network create --project "$PROJECT_ID" "$NETWORK_NAME"
- NETWORK_ID=$(openstack network show -f shell -c id "$NETWORK_NAME" |cut -d"=" -f2 | tr -d '"')
- echo "INFO: Creating Subnetworking..."
- openstack subnet create --project "$PROJECT_ID" --dns-nameserver "129.115.103.72" --subnet-range "192.170.0.0/24" --allocation-pool start=192.170.0.10,end=192.170.0.200 --network "$NETWORK_ID" "$SUBNET_NAME"
- echo "INFO: Creating router..."
- openstack router create --project "$PROJECT_ID" "$ROUTER_NAME"
- echo "INFO: Acquiring router id..."
- ROUTER_ID=$(openstack router show -f shell "$ROUTER_NAME" -c id |cut -d"\"" -f 2)
- echo "INFO: Setting external gateway on router..."
- openstack router set --external-gateway "$EXTERNAL_NETWORK_ID" "$ROUTER_ID"
- echo "INFO: Adding subnet to router..."
- openstack router add subnet "$ROUTER_ID" "$SUBNET_NAME"
- #neutron net-create --tenant-id $PROJECT_ID $NETWORK_NAME
- #neutron subnet-create --tenant-id $PROJECT_ID --name $SUBNET_NAME --dns-nameserver "10.245.0.10" $NETWORK_NAME "192.170.0.0/24"
- #neutron router-create --tenant-id $PROJECT_ID $ROUTER_NAME
- #ROUTER_ID=`neutron router-show --format shell $ROUTER_NAME -F id |cut -d"\"" -f 2`
- #neutron router-gateway-set $ROUTER_ID $EXTERNAL_NETWORK_ID
- #neutron router-interface-add $ROUTER_ID $SUBNET_NAME
- ##################################################
- # Add security rules to allow ping and ssh access
- ##################################################
- echo "#################################"
- echo "# UPDATING SECURITY GROUP RULES #"
- echo "#################################"
- SECURITY_GROUP_ID=$(openstack security group list | grep "$PROJECT_ID" | awk '{print $2}')
- openstack security group rule create --proto icmp --project "$PROJECT_NAME" "$SECURITY_GROUP_ID"
- openstack security group rule create --proto tcp --project "$PROJECT_NAME" --dst-port 22 "$SECURITY_GROUP_ID"
- openstack security group rule create --proto tcp --project "$PROJECT_NAME" --dst-port 80 "$SECURITY_GROUP_ID"
- #nova --os-username $USER_NAME --os-password $PASSWORD --os-tenant-name $PROJECT_NAME secgroup-add-rule default tcp 22 22 "0.0.0.0/0"
- #nova --os-username $USER_NAME --os-password $PASSWORD --os-tenant-name $PROJECT_NAME secgroup-add-rule default icmp -1 -1 "0.0.0.0/0"
- #nova --os-username $USER_NAME --os-password $PASSWORD --os-tenant-name $PROJECT_NAME secgroup-add-rule default tcp 80 80 "0.0.0.0/0"
- echo "######################"
- echo "Username: $USER_NAME"
- echo "Password: $PASSWORD"
- echo "######################"
Add Comment
Please, Sign In to add comment