6. A Cartoon View of OpenStack Architecture
Control
Database
Message
Queue
Horizon
Keystone
Neutron API
Nova API
Glance API
Cinder API
Network
Neutron
Agents
Neutron
Agents
Neutron
Agents
Nova
Scheduler
Glance
Registry
Cinder
Scheduler
Compute
Compute
Compute
Compute
Nova
Compute
Nova
Compute
Nova
Compute
Nova
Compute
Network
Agent
Network
Agent
Network
Agent
Network
Agent
Storage
Storage
Storage
Storage
Cinder
Storage
Cinder
Storage
Cinder
Storage
Cinder
Storage
7. Network
Neutron
Agents
Neutron
Agents
Neutron
Agents
Control
Database
Message
Queue
Horizon
Keystone
Neutron
API
Nova API
Glance
API
Cinder
API
Nova
Scheduler
Glance
Registry
Cinder
Scheduler
Compute
Nova
Compute
Nova
Compute
Nova
Compute
Nova
Compute
Network
Network
Network
Network
Agent
Storage
Cinder
Storage
Cinder
Storage
Cinder
Storage
Cinder
Storage
API Network External Network
Data Network
Administrative Network
8. “Le Grand Tour” of the puppet-openstack Modules
• 1:1 correspondence with
OpenStack projects.
• Community developed in
StackForge!
• Builds on Canonical and Red Hat
packaging.
• Tracks the major 6-month
OpenStack releases.
• Modules available on Puppet Forge.
10. !
class openstack::profile::base {
!
# make sure the parameters are initialized
include ::openstack
!
# everyone also needs to be on the same clock
class { '::ntp': }
!
# all nodes need the OpenStack repository
class { '::openstack::resources::repo': }
!
# database connectors
class { '::openstack::resources::connectors': }
!
$management_network = $::openstack::config::network_management
$management_address = ip_for_network($management_network)
$controller_management_address = $::openstack::config::controller_address_management
$storage_management_address = $::openstack::config::storage_address_management
$management_matches = ($management_address == $controller_management_address)
$storage_management_matches = ($management_address == $storage_management_address)
!
$api_network = $::openstack::config::network_api
$api_address = ip_for_network($api_network)
$controller_api_address = $::openstack::config::controller_address_api
$storage_api_address = $::openstack::config::storage_address_api
!
$api_matches = ($api_address == $controller_api_address)
$storage_api_matches = ($api_address == $storage_api_address)
!
$is_controller = ($management_matches and $api_matches)
$is_storage = ($storage_management_matches and $storage_api_matches)
}
11. Network
Neutron
Agents
Neutron
Agents
Neutron
Agents
Control
Database
Message
Queue
Horizon
Keystone
Neutron
API
Nova API
Glance
API
Cinder
API
Nova
Scheduler
Glance
Registry
Cinder
Scheduler
Compute
Nova
Compute
Nova
Compute
Nova
Compute
Nova
Compute
Network
Network
Network
Network
Agent
Storage
Cinder
Storage
Cinder
Storage
Cinder
Storage
Cinder
Storage
API Network External Network
Data Network
Administrative Network
12. # The profile to install rabbitmq
!
class openstack::profile::rabbitmq {
!
$management_address = $::openstack::config::controller_address_management
!
class { '::nova::rabbitmq':
userid => $::openstack::config::rabbitmq_user,
password => $::openstack::config::rabbitmq_password,
cluster_disk_nodes => [$management_address],
rabbitmq_class => '::rabbitmq',
}
!
if $::osfamily == 'RedHat' {
package { 'erlang':
ensure => installed,
before => Package['rabbitmq-server'],
require => Yumrepo['erlang-solutions'],
}
}
}
13. # The profile to install an OpenStack specific mysql server
!
class openstack::profile::mysql {
!
class { '::mysql::server':
root_password => $::openstack::config::mysql_root_password,
restart => true,
override_options => {
'mysqld' => {
'bind_address' =>
$::openstack::config::controller_address_management,
'default-storage-engine' => 'innodb',
}
}
}
!
!
class { '::mysql::bindings':
python_enable => true,
ruby_enable => true,
}
!
class { 'mysql::server::account_security': }
!
}
15. Network
Neutron
Agents
Neutron
Agents
Neutron
Agents
Control
Database
Message
Queue
Horizon
Keystone
Neutron
API
Nova API
Glance
API
Cinder
API
Nova
Scheduler
Glance
Registry
Cinder
Scheduler
Compute
Nova
Compute
Nova
Compute
Nova
Compute
Nova
Compute
Network
Network
Network
Network
Agent
Storage
Cinder
Storage
Cinder
Storage
Cinder
Storage
Cinder
Storage
API Network External Network
Data Network
Administrative Network
16. # The profile to install the Keystone service
class openstack::profile::keystone {
openstack::resources::controller { 'keystone': }
openstack::resources::database { 'keystone': }
openstack::resources::firewall { 'Keystone API': port => '5000', }
!
include ::openstack::common::keystone
!
class { 'keystone::endpoint':
public_address => $::openstack::config::controller_address_api,
admin_address => $::openstack::config::controller_address_management,
internal_address => $::openstack::config::controller_address_management,
region => $::openstack::config::region,
}
!
$tenants = $::openstack::config::keystone_tenants
$users = $::openstack::config::keystone_users
create_resources('openstack::resources::tenant', $tenants)
create_resources('openstack::resources::user', $users)
}
21. Network
Neutron
Agents
Neutron
Agents
Neutron
Agents
Control
Database
Message
Queue
Horizon
Keystone
Neutron
API
Nova API
Glance
API
Cinder
API
Nova
Scheduler
Glance
Registry
Cinder
Scheduler
Compute
Nova
Compute
Nova
Compute
Nova
Compute
Nova
Compute
Network
Network
Network
Network
Agent
Storage
Cinder
Storage
Cinder
Storage
Cinder
Storage
Cinder
Storage
API Network External Network
Data Network
Administrative Network
22. # The puppet module to set up a Nova Compute node
!
class openstack::profile::nova::compute {
$management_network = $::openstack::config::network_management
$management_address = ip_for_network($management_network)
!
class { 'openstack::common::nova':
is_compute => true,
}
!
class { '::nova::compute::libvirt':
libvirt_type => $::openstack::config::nova_libvirt_type,
vncserver_listen => $management_address,
}
!
file { '/etc/libvirt/qemu.conf':
ensure => present,
source => 'puppet:///modules/openstack/qemu.conf',
mode => '0644',
notify => Service['libvirt'],
}
!
Package['libvirt'] -> File['/etc/libvirt/qemu.conf']
}
26. How You Can Get Involved
• Sign up to be an OpenStack Contributor!
https://wiki.openstack.org/wiki/How_To_Contribute
• Review the Code!
https://review.openstack.org
• Write the Code!
https://wiki.openstack.org/wiki/Gerrit_Workflow
• Hang out with the Amazing Devs!
#puppet-openstack on Freenode
• Share and learn!
puppet-openstack mailing list on Google Groups.