Basic OpenStack Testing¶
Testing coverage example for keystone, glance, neutron, and nova, by Jon-Jozwiak
Validate keystonerc_admin¶
glance image-create --name "cirros-0.3.2-x86_64" --disk-format qcow2 --container-format bare –-is-public true --file cirros-0.3.2-i386-disk.img
# Enable ping and SSH in default security group
neutron security-group-rule-create --protocol icmp --direction ingress default
neutron security-group-rule-create --protocol tcp --port-range-min 22 --port-range-max 22 --direction ingress default
Create a SSH keypair
nova keypair-add testkey > /root/testkey.pem
chmod 600 /root/testkey.pem
neutron net-create pubnet1 --shared --router:external=True
neutron subnet-create --name pubsubnet1 --dns-nameserver 157.206.117.226 --allocation-pool start=7.255.26.100,end=7.255.26.150 --gateway 7.255.26.1 --disable-dhcp pubnet1 7.255.26.0/24
Capture IDs
PUBNETID=$(neutron net-list | grep pubnet1 | awk '{print $2}')
Creating Internal L2 private networks
- Internal-only router to connect multiple L2 networks privately.
neutron net-create privnet1
neutron subnet-create --name privsubnet1 privnet1 172.16.25.0/24
Capture Net/Subnet UUIDs
PRIVNET1ID=$(neutron net-list | grep privnet1 | awk '{print $2}')
PRIVSUBNET1ID=$(neutron subnet-list | grep privsubnet1 | awk '{print $2}')
Create router for L3 to connect each network
neutron router-create router1
neutron router-interface-add router1 $PRIVSUBNET1ID
Set gateway for your external network
neutron router-gateway-set router1 $PUBNETID
Launch an instance…
CIRROSID=$(glance image-list | grep cirros | awk '{print $2}')
nova boot testserver --flavor 1 --image $CIRROSID --key-name testkey --security-groups default --nic net-id=$PRIVNET1ID
FLOATINGOUTPUT=$(neutron floatingip-create pubnet1)
FLOATINGIP=$(grep floating_ip_address $FLOATINGOUTPUT | awk '{print $4}'
nova add-floating-ip testserver $FLOATINGIP
# Validate connectivity (and that the guest can ping externally)
ssh -i /root/testkey.pem cirros@$FLOATINGIP 'ping -c 5 8.8.8.8'
Clean up the environment after validation
- optional - but we’re going to test more below
. /root/keystonerc_admin
nova delete testserver
FLOATINGIP=$(neutron floatingip-list | grep 10.81.63 | awk '{print $2}')
neutron floatingip-delete $FLOATINGIP
neutron router-gateway-clear router1
PRIVSUBNET1ID=$(neutron subnet-list | grep privsubnet1 | awk '{print $2}')
neutron router-interface-delete router1 $PRIVSUBNET1ID
neutron router-delete router1
neutron subnet-delete privsubnet1
neutron net-delete privnet1
neutron subnet-delete pubsubnet1
neutron net-delete pubnet1
NOTE THIS DOES NOT CLEAN UP THE SECURITY RULES. SO YOU WON’T NEED TO ADD THEM AGAIN
nova keypair-delete testkey
rm -f /root/testkey.pem
Cinder, Ceilometer, Heat basic validation¶
Create 1GB cinder volume ‘test3-vol1’ and attach to ‘rhel6-test2’ instance
source ~/keystonerc_user1
cinder create --display-name test3-vol1 1
cinder list
nova list
nova volume-attach rhel7-test3 auto
cinder list
Setup the cinder volume on ‘rhel7-test3’ instance
source ~/keystonerc_user1
ssh -i ~/testkey.pem cloud-user@10.81.63.114
[cloud-user@rhel7-test3 ~]$ sudo su -
[root@rhel7-test3 ~]# fdisk /dev/vdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them. Be careful before using the write command.
Device does not contain a recognized partition table. Building a new DOS disklabel with disk identifier 0xa185089a.
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-2097151, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151):
Using default value 2097151
Partition 1 of type Linux and of size 1023 MiB is set
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
[root@rhel7-test3 ~]# mkfs.xfs /dev/vdb1
meta-data=/dev/vdb1 isize=256 agcount=4, agsize=65472 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0
data = bsize=4096 blocks=261888, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal log bsize=4096 blocks=853, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@rhel7-test3 ~]# mkdir /vol1
[root@rhel7-test3 ~]# mount /dev/vdb1 /vol1
[root@rhel7-test3 /]# df -h /vol1
Filesystem Size Used Avail Use% Mounted on
/dev/vdb1 1020M 33M 988M 4% /vol1
Create cinder snapshot of volume ‘test3-vol1’
source ~/keystonerc_user1
cinder snapshot-create --display-name test3-vol1-snap1 test3-vol1 --force true
cinder snapshot-list
Clean up cinder volumes and snapshots
cinder snapshot-delete test3-vol1-snap1
nova volume-detach rhel7-test3 dcebde67-6ccf-4d29-a997-09dde6a268c6
cinder delete test3-vol1
Sample Ceilometer data
source ~/keystonerc_user1
ceilometer sample-list -m image
ceilometer statistics -m image
Orchestrate WordPress install¶
using a Heat template Wordpress_Single_Instance.yaml
cat ~/Wordpress_Single_Instance.yaml (Attached to this email - I think it works but it has been a while...)
Create the stack
heat stack-create -f ~/Wordpress_Single_Instance.yaml -P \
FloatingNetworkUUID=89725f98-330b-4560-b605-574529329a79 -P \
KeyName=testkey -P DBrootpassword=password wordpress
Validate the stack
heat stack-list
heat event-list wordpress
heat stack-show wordpress
‘stack_status’ should be CREATE_COMPLETE
Find the output value and connect with your web browser. You should see the initial Wordpress Admin page.
Delete your stack
heat stack-delete