3. About Me
Who am I
Cloud Architect with ShapeBlue
Worked with CloudStack since 2.2.13
Specialising in deployment of CloudStack
and surrounding infrastructure
Orange, TomTom, PaddyPower, Ascenty, BSkyB
I view CloudStack from ‘What can cloud
consumers practically do with it’ point-of-view
shapeblue.com
5. About ShapeBlue
“ShapeBlue are expert builders of public &
private clouds. They are the leading global
independent CloudStack / CloudPlatform
integrator & consultancy”
shapeblue.com
7. What is Configuration Management?
Configuration management is the philosophy of
defining the state that a server should be in wrt it’s
configuration and using tools that achieve that state
CM gives centralisation of configuration data and
actions
Configuration Management tools should be
idempotent
shapeblue.com
8. Er, Idempotent?
Operations in mathematics and computer science, that can be
applied multiple times without changing the result beyond the
initial application.
(you asked)
shapeblue.com
9. Er, Idempotent?
CloudStack Example:
You need to add the following lines to the default my.cnf:
innodb_rollback_on_timeout=1
innodb_lock_wait_timeout=600
max_connections=350
A sed command would add the lines
sed -i -e '/symbolic-links=0/ ainnodb_rollback_on_timeout=1' -e '/symbolic-links=0/
ainnodb_lock_wait_timeout=600' -e '/symbolic-links=0/ amax_connections=350' /etc/my.cnf
But if you needed to run your script to update/restore another setting then the addition of these lines
would be repeated
A configuration management tool would not add these lines again if rerun.
shapeblue.com
10. Er, Idempotent?
CloudStack Example:
In a configuration management you would specify that these lines:
innodb_rollback_on_timeout=1
innodb_lock_wait_timeout=600
max_connections=350
should exist in the my.cnf file
The configuration management tool would only add these lines if they don’t exist.
shapeblue.com
11. What is Configuration Management?
I need these services to be installed and running
I need this configuration file to contain these lines
I need this file to exist in this directory
Centralisation of configuration
Creation of reusable template configurations
i.e. web servers, database servers, DHCP servers, CloudStack
management servers
shapeblue.com
13. Why Ansible
Technical:
Client/Server architecture not required
Only SSH connectivity required (password or public/private keys)
…making it easier to deploy in environments
Modules can be in any language capable of returning JSON or key=value text pairs
Has an API
User:
Much shallower learning curve
Don’t need to learn a programming language (i.e. Ruby)
Not as many pre-existing playbooks (recipes/manifests) about, but improving with Ansible Galaxy
shapeblue.com
15. Where to Use Ansible
Building CloudStack RPMs from source
Deploying management infrastructure
Deploying hosts
Configuration changes to hosts and management VMs
Patching of hosts and management VMs
Deployment & configuration of guest VMs
shapeblue.com
22. Using Ansible with Guest VMs
Use Ansible to create
guest VMs
Create/deploy Ansible
server environment
Use Ansible to configure
guest VMs
Use Ansible to maintain
guest VMs
•CloudMonkey
•CloudStack/Ansible module
(WIP)
•EC2 module?
•Dynamic Inventories
•Call back
•Roles
•UserData + ansible-pull
•Dynamic Inventories
•Playbooks
shapeblue.com
23. Dynamic Inventories
Dynamic Inventories:
EC2 (use for CloudStack?)
Cobbler
BSD Jails
Digital Ocean
Linode
OpenShift
OpenStack Nova
Red Hat's SpaceWalk
Vagrant (not to be confused with the provisioner in vagrant)
Zabbix
AnsibleWorks AWX also provides a database to store inventory results that is both web and REST Accessible.
AWX syncs with all Ansible dynamic inventory sources.
shapeblue.com
24. Using Ansible with Guest VMs
A toolset is required to determine that a new webserver etc
is required and to tell Ansible to create and configure it.
shapeblue.com
27. Pre-Requisites
A CentOS 6.4 host to install CloudStack on and one for Ansible
An IP address already assigned on the ACS management host
The ACS management host should have a resolvable FQDN (either
through DNS or the host file on the ACS management host)
Internet connectivity on the ACS management host
shapeblue.com
28. CloudStack Management Server
Create MySQL role
Create CloudStack role
Create DB deployment task
Create Seed secondary storage task
Create Playbook
shapeblue.com
29. Create MySQL role
/etc/ansible/roles/mysql/tasks/main.yml
--- name: Ensure mysql server is installed
yum: name=mysql-server state=present
- max_connections=350
- log-bin=mysql-bin
- binlog-format = 'ROW'
- name: Ensure mysql python is installed
yum: name=MySQL-python state=present
- name: Ensure MySQL service is started
service: name=mysqld state=started
- name: Ensure selinux python bindings are installed
yum: name=libselinux-python state=present
- name: Ensure MySQL service is enabled at boot
service: name=mysqld enabled=yes
- name: Ensure cloudstack specfic my.cnf lines are present
lineinfile: dest=/etc/my.cnf regexp='$item' insertafter="symbolic-links=0"
line='$item'
with_items:
- skip-name-resolve
- default-time-zone='+00:00'
- innodb_rollback_on_timeout=1
- innodb_lock_wait_timeout=600
- name: Ensure root password is set
mysql_user: user=root password=$mysql_root_password host=localhost
ignore_errors: true
- name: Ensure root has sufficient privileges
mysql_user: login_user=root login_password=$mysql_root_password
user=root host=% password=$mysql_root_password priv=*.*:GRANT,ALL
state=present
shapeblue.com
30. Create CS Manger role
/etc/ansible/roles/cloudstack-management/tasks/main.yml
--- name: Ensure selinux python bindings are installed
yum: name=libselinux-python state=present
get_url: url=http://download.cloud.com.s3.amazonaws.com/tools/vhd-util
dest=/usr/share/cloudstack-common/scripts/vm/hypervisor/xenserver/vhdutil mode=0755
- name: Ensure the Apache Cloudstack Repo file exists as per template
template: src=cloudstack.repo.j2 dest=/etc/yum.repos.d/cloudstack.repo
- name: Ensure selinux is in permissive mode
command: setenforce permissive
- name: Ensure selinux is set permanently
selinux: policy=targeted state=permissive
- name: Ensure CloudStack packages are installed
yum: name=cloudstack-management state=present
- name: Ensure vhdutil is in correct location
shapeblue.com