SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
Understanding OpenStack 
Deployments 
Chris Hoge 
@hogepodge 
! 
Interop Engineer 
OpenStack Foundation
Who is this guy?
! 
What is OpenStack?
• Identity - Keystone 
• Network - Neutron 
• Compute - Nova 
• Block Storage - Cinder 
• Image Service - Glance 
• Dashboard - Horizon 
• Object Storage - Swift 
• Telemetry - Ceilometer 
• Orchestration - Heat 
• Database - Trove 
• Map Reduce - Sahara 
• More and growing…
What does Puppet 
have to do with this?
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
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
“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.
OpenStack Composition Modules 
• stackforge/packstack 
• theforeman/staypuft 
• stackforge/fuel-library 
• stackforge/puppet-openstack_builder 
• enovance/puppet-openstack-cloud 
• puppetlabs/puppetlabs-openstack
! 
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) 
}
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
# 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'], 
} 
} 
}
# 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': } 
! 
}
define openstack::resources::database () { 
class { "::${title}::db::mysql": 
user => $title, 
password => $::openstack::config::mysql_service_password, 
dbname => $title, 
allowed_hosts => $::openstack::config::mysql_allowed_hosts, 
mysql_module => '2.2', 
require => Anchor['database-service'], 
} 
}
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
# 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) 
}
define openstack::resources::user ( 
$password, 
$tenant, 
$email, 
$admin = false, 
$enabled = true, 
) { 
keystone_user { "$name": 
ensure => present, 
enabled => $enabled, 
password => $password, 
tenant => $tenant, 
email => $email, 
} 
! 
if $admin == true { 
keystone_user_role { "$name@$tenant": 
roles => ['_member_', 'admin'], 
ensure => present, 
} 
} else { 
keystone_user_role { "$name@$tenant": 
roles => ['_member_'], 
ensure => present, 
} 
} 
}
class openstack::common::keystone { 
if $::openstack::profile::base::is_controller { 
$admin_bind_host = '0.0.0.0' 
} else { 
$admin_bind_host = $::openstack::config::controller_address_management 
} 
! 
class { '::keystone': 
admin_token => $::openstack::config::keystone_admin_token, 
sql_connection => $::openstack::resources::connectors::keystone, 
verbose => $::openstack::config::verbose, 
debug => $::openstack::config::debug, 
enabled => $::openstack::profile::base::is_controller, 
admin_bind_host => $admin_bind_host, 
mysql_module => '2.2', 
} 
! 
class { '::keystone::roles::admin': 
email => $::openstack::config::keystone_admin_email, 
password => $::openstack::config::keystone_admin_password, 
admin_tenant => 'admin', 
} 
}
# The profile to set up the Nova controller (several services) 
class openstack::profile::nova::api { 
openstack::resources::controller { 'nova': } 
openstack::resources::database { 'nova': } 
openstack::resources::firewall { 'Nova API': port => '8774', } 
openstack::resources::firewall { 'Nova Metadata': port => '8775', } 
openstack::resources::firewall { 'Nova EC2': port => '8773', } 
openstack::resources::firewall { 'Nova S3': port => '3333', } 
openstack::resources::firewall { 'Nova novnc': port => '6080', } 
! 
class { '::nova::keystone::auth': 
password => $::openstack::config::nova_password, 
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, 
cinder => true, 
} 
! 
include ::openstack::common::nova 
}
class openstack::common::nova ($is_compute = false) { 
$is_controller = $::openstack::profile::base::is_controller 
$management_network = $::openstack::config::network_management 
$management_address = ip_for_network($management_network) 
$storage_management_address = $::openstack::config::storage_address_management 
$controller_management_address = 
$::openstack::config::controller_address_management 
! 
class { '::nova': 
sql_connection => $::openstack::resources::connectors::nova, 
glance_api_servers => "http://${storage_management_address}:9292", 
memcached_servers => ["${controller_management_address}:11211"], 
rabbit_hosts => [$controller_management_address], 
rabbit_userid => $::openstack::config::rabbitmq_user, 
rabbit_password => $::openstack::config::rabbitmq_password, 
debug => $::openstack::config::debug, 
verbose => $::openstack::config::verbose, 
mysql_module => '2.2', 
} 
! 
nova_config { 'DEFAULT/default_floating_pool': value => 'public' } 
! 
class { '::nova::api': 
admin_password => $::openstack::config::nova_password, 
auth_host => $controller_management_address, 
enabled => $is_controller, 
neutron_metadata_proxy_shared_secret => 
$::openstack::config::neutron_shared_secret, 
} 
! 
class { '::nova::vncproxy': 
host => $::openstack::config::controller_address_api, 
enabled => $is_controller, 
} 
! 
class { [ 
'nova::scheduler', 
'nova::objectstore', 
'nova::cert', 
'nova::consoleauth', 
'nova::conductor' 
]: 
enabled => $is_controller, 
} 
! 
class { '::nova::compute': 
enabled => $is_compute, 
vnc_enabled => true, 
vncserver_proxyclient_address => $management_address, 
vncproxy_host => $::openstack::config::controller_address_api, 
} 
! 
class { '::nova::compute::neutron': } 
! 
class { '::nova::network::neutron': 
neutron_admin_password => $::openstack::config::neutron_password, 
neutron_region_name => $::openstack::config::region, 
neutron_admin_auth_url => "http://${controller_management_address}:35357/v2.0", 
neutron_url => "http://${controller_management_address}:9696", 
vif_plugging_is_fatal => false, 
vif_plugging_timeout => '0', 
}
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
# 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'] 
}
class openstack::profile::neutron::agent { 
include ::openstack::common::neutron 
include ::openstack::common::ovs 
} 
!
class openstack::common::neutron { 
$controller_management_address = $::openstack::config::controller_address_management 
$data_network = $::openstack::config::network_data 
$data_address = ip_for_network($data_network) 
# neutron auth depends upon a keystone configuration 
include ::openstack::common::keystone 
! 
class { '::neutron': 
rabbit_host => $controller_management_address, 
core_plugin => 'neutron.plugins.ml2.plugin.Ml2Plugin', 
allow_overlapping_ips => true, 
rabbit_user => $::openstack::config::rabbitmq_user, 
rabbit_password => $::openstack::config::rabbitmq_password, 
debug => $::openstack::config::debug, 
verbose => $::openstack::config::verbose, 
service_plugins => ['neutron.services.l3_router.l3_router_plugin.L3RouterPlugin', 
'neutron.services.loadbalancer.plugin.LoadBalancerPlugin', 
'neutron.services.vpn.plugin.VPNDriverPlugin', 
'neutron.services.firewall.fwaas_plugin.FirewallPlugin', 
'neutron.services.metering.metering_plugin.MeteringPlugin'], 
} 
! 
class { '::neutron::keystone::auth': 
password => $::openstack::config::neutron_password, 
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, 
} 
! 
class { '::neutron::server': 
auth_host => $::openstack::config::controller_address_management, 
auth_password => $::openstack::config::neutron_password, 
database_connection => $::openstack::resources::connectors::neutron, 
enabled => $::openstack::profile::base::is_controller, 
sync_db => $::openstack::profile::base::is_controller, 
mysql_module => '2.2', 
} 
! 
class { '::neutron::server::notifications': 
nova_url => "http://${controller_management_address}:8774/v2/", 
nova_admin_auth_url => "http://${controller_management_address}:35357/v2.0/", 
nova_admin_password => $::openstack::config::nova_password, 
nova_region_name => $::openstack::config::region, 
} 
}
class openstack::common::ovs { 
$data_network = $::openstack::config::network_data 
$data_address = ip_for_network($data_network) 
$enable_tunneling = $::openstack::config::neutron_tunneling # true 
$tunnel_types = $::openstack::config::neutron_tunnel_types #['gre'] 
$tenant_network_type = $::openstack::config::neutron_tenant_network_type # ['gre'] 
$type_drivers = $::openstack::config::neutron_type_drivers # ['gre'] 
$mechanism_drivers = $::openstack::config::neutron_mechanism_drivers # ['openvswitch'] 
$tunnel_id_ranges = $::openstack::config::neutron_tunnel_id_ranges # ['1:1000'] 
! 
class { '::neutron::agents::ml2::ovs': 
enable_tunneling => $enable_tunneling, 
local_ip => $data_address, 
enabled => true, 
tunnel_types => $tunnel_types, 
} 
! 
class { '::neutron::plugins::ml2': 
type_drivers => $type_drivers, 
tenant_network_types => $tenant_network_type, 
mechanism_drivers => $mechanism_drivers, 
tunnel_id_ranges => $tunnel_id_ranges 
} 
}
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.
QuTehasnkt iyooun! s?

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Deploying OpenStack with Chef
Deploying OpenStack with ChefDeploying OpenStack with Chef
Deploying OpenStack with Chef
 
OpenStack and Puppet
OpenStack and PuppetOpenStack and Puppet
OpenStack and Puppet
 
Chef for OpenStack: OpenStack Spring Summit 2013
Chef for OpenStack: OpenStack Spring Summit 2013Chef for OpenStack: OpenStack Spring Summit 2013
Chef for OpenStack: OpenStack Spring Summit 2013
 
Extending TripleO for OpenStack Management
Extending TripleO for OpenStack ManagementExtending TripleO for OpenStack Management
Extending TripleO for OpenStack Management
 
TripleO Lightning Talk
TripleO Lightning TalkTripleO Lightning Talk
TripleO Lightning Talk
 
Designing and Building Multi-Region Swift Deployment
Designing and Building Multi-Region Swift DeploymentDesigning and Building Multi-Region Swift Deployment
Designing and Building Multi-Region Swift Deployment
 
How to use TripleO tools for your own project
How to use TripleO tools for your own projectHow to use TripleO tools for your own project
How to use TripleO tools for your own project
 
OpenStack API's and WSGI
OpenStack API's and WSGIOpenStack API's and WSGI
OpenStack API's and WSGI
 
distributed tracing in 5 minutes
distributed tracing in 5 minutesdistributed tracing in 5 minutes
distributed tracing in 5 minutes
 
OpenStack with OpenDaylight
OpenStack with OpenDaylightOpenStack with OpenDaylight
OpenStack with OpenDaylight
 
Python WSGI introduction
Python WSGI introductionPython WSGI introduction
Python WSGI introduction
 
Cisco UCS loves Kubernetes, Docker and OpenStack Kolla
Cisco UCS loves Kubernetes, Docker and OpenStack KollaCisco UCS loves Kubernetes, Docker and OpenStack Kolla
Cisco UCS loves Kubernetes, Docker and OpenStack Kolla
 
Openstack grizzley puppet_talk
Openstack grizzley puppet_talkOpenstack grizzley puppet_talk
Openstack grizzley puppet_talk
 
Montreal OpenStack Q3-2017 MeetUp
Montreal OpenStack Q3-2017 MeetUpMontreal OpenStack Q3-2017 MeetUp
Montreal OpenStack Q3-2017 MeetUp
 
NYC Cassandra Day - Java Intro
NYC Cassandra Day - Java IntroNYC Cassandra Day - Java Intro
NYC Cassandra Day - Java Intro
 
Running High Performance & Fault-tolerant Elasticsearch Clusters on Docker
Running High Performance & Fault-tolerant Elasticsearch Clusters on DockerRunning High Performance & Fault-tolerant Elasticsearch Clusters on Docker
Running High Performance & Fault-tolerant Elasticsearch Clusters on Docker
 
使用ZooKeeper打造軟體式負載平衡
使用ZooKeeper打造軟體式負載平衡使用ZooKeeper打造軟體式負載平衡
使用ZooKeeper打造軟體式負載平衡
 
Open stack Austin meetup January 15, 2015
Open stack Austin meetup January 15, 2015Open stack Austin meetup January 15, 2015
Open stack Austin meetup January 15, 2015
 
Docker in OpenStack
Docker in OpenStackDocker in OpenStack
Docker in OpenStack
 
Heat - keep the clouds up
Heat - keep the clouds upHeat - keep the clouds up
Heat - keep the clouds up
 

Destacado

Cloud Foundry BOSH CPI for OpenStack
Cloud Foundry BOSH CPI for OpenStackCloud Foundry BOSH CPI for OpenStack
Cloud Foundry BOSH CPI for OpenStack
Animesh Singh
 
Automated Lifecycle Management - CloudFoundry on OpenStack
Automated Lifecycle Management - CloudFoundry on OpenStackAutomated Lifecycle Management - CloudFoundry on OpenStack
Automated Lifecycle Management - CloudFoundry on OpenStack
Animesh Singh
 
Crowbar2 update
Crowbar2 updateCrowbar2 update
Crowbar2 update
osonoi
 

Destacado (20)

What's New in Grizzly & Deploying OpenStack with Puppet
What's New in Grizzly & Deploying OpenStack with PuppetWhat's New in Grizzly & Deploying OpenStack with Puppet
What's New in Grizzly & Deploying OpenStack with Puppet
 
Tebmàtica número 14
Tebmàtica número 14Tebmàtica número 14
Tebmàtica número 14
 
Highlights of OpenStack Mitaka and the OpenStack Summit
Highlights of OpenStack Mitaka and the OpenStack SummitHighlights of OpenStack Mitaka and the OpenStack Summit
Highlights of OpenStack Mitaka and the OpenStack Summit
 
Cloud Foundry BOSH CPI for OpenStack
Cloud Foundry BOSH CPI for OpenStackCloud Foundry BOSH CPI for OpenStack
Cloud Foundry BOSH CPI for OpenStack
 
From OpenStack.... towards an Open cloud architecture
From OpenStack.... towards an Open cloud architecture From OpenStack.... towards an Open cloud architecture
From OpenStack.... towards an Open cloud architecture
 
OpenStack Murano introduction
OpenStack Murano introductionOpenStack Murano introduction
OpenStack Murano introduction
 
OpenStack Automation Overview
OpenStack Automation OverviewOpenStack Automation Overview
OpenStack Automation Overview
 
Automated Lifecycle Management - CloudFoundry on OpenStack
Automated Lifecycle Management - CloudFoundry on OpenStackAutomated Lifecycle Management - CloudFoundry on OpenStack
Automated Lifecycle Management - CloudFoundry on OpenStack
 
Fuel, Puppet and OpenStack
Fuel, Puppet and OpenStackFuel, Puppet and OpenStack
Fuel, Puppet and OpenStack
 
OpenStack Orchestration (Heat)
OpenStack Orchestration (Heat)OpenStack Orchestration (Heat)
OpenStack Orchestration (Heat)
 
Cloud foundry integration-with-openstack-and-docker-bangalorecf-meetup
Cloud foundry integration-with-openstack-and-docker-bangalorecf-meetupCloud foundry integration-with-openstack-and-docker-bangalorecf-meetup
Cloud foundry integration-with-openstack-and-docker-bangalorecf-meetup
 
Automating OpenStack Deployment with Fuel
Automating OpenStack Deployment with FuelAutomating OpenStack Deployment with Fuel
Automating OpenStack Deployment with Fuel
 
State of Containers in OpenStack
State of Containers in OpenStackState of Containers in OpenStack
State of Containers in OpenStack
 
An Introduction to OpenStack Heat
An Introduction to OpenStack HeatAn Introduction to OpenStack Heat
An Introduction to OpenStack Heat
 
Openstack Cloud Management and Automation Using Red Hat Cloudforms 4.0
Openstack Cloud  Management and Automation Using Red Hat Cloudforms 4.0Openstack Cloud  Management and Automation Using Red Hat Cloudforms 4.0
Openstack Cloud Management and Automation Using Red Hat Cloudforms 4.0
 
Joint OpenStack Kubernetes Environment (OpenStack Summit)
Joint OpenStack Kubernetes Environment (OpenStack Summit)Joint OpenStack Kubernetes Environment (OpenStack Summit)
Joint OpenStack Kubernetes Environment (OpenStack Summit)
 
Crowbar2 update
Crowbar2 updateCrowbar2 update
Crowbar2 update
 
Introduction to OpenStack Trove & Database as a Service
Introduction to OpenStack Trove & Database as a ServiceIntroduction to OpenStack Trove & Database as a Service
Introduction to OpenStack Trove & Database as a Service
 
A Deep Dive Into Trove
A Deep Dive Into TroveA Deep Dive Into Trove
A Deep Dive Into Trove
 
OpenStack Explained: Learn OpenStack architecture and the secret of a success...
OpenStack Explained: Learn OpenStack architecture and the secret of a success...OpenStack Explained: Learn OpenStack architecture and the secret of a success...
OpenStack Explained: Learn OpenStack architecture and the secret of a success...
 

Similar a Understanding OpenStack Deployments - PuppetConf 2014

Facebook的缓存系统
Facebook的缓存系统Facebook的缓存系统
Facebook的缓存系统
yiditushe
 
4069180 Caching Performance Lessons From Facebook
4069180 Caching Performance Lessons From Facebook4069180 Caching Performance Lessons From Facebook
4069180 Caching Performance Lessons From Facebook
guoqing75
 
Puppet for Java developers - JavaZone NO 2012
Puppet for Java developers - JavaZone NO 2012Puppet for Java developers - JavaZone NO 2012
Puppet for Java developers - JavaZone NO 2012
Carlos Sanchez
 
Stack kicker devopsdays-london-2013
Stack kicker devopsdays-london-2013Stack kicker devopsdays-london-2013
Stack kicker devopsdays-london-2013
Simon McCartney
 
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
Wesley Beary
 
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Carlos Sanchez
 

Similar a Understanding OpenStack Deployments - PuppetConf 2014 (20)

Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
 
The Zen of Lithium
The Zen of LithiumThe Zen of Lithium
The Zen of Lithium
 
Facebook的缓存系统
Facebook的缓存系统Facebook的缓存系统
Facebook的缓存系统
 
Building and Deploying Application to Apache Mesos
Building and Deploying Application to Apache MesosBuilding and Deploying Application to Apache Mesos
Building and Deploying Application to Apache Mesos
 
4069180 Caching Performance Lessons From Facebook
4069180 Caching Performance Lessons From Facebook4069180 Caching Performance Lessons From Facebook
4069180 Caching Performance Lessons From Facebook
 
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine YardHow I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
How I Learned to Stop Worrying and Love the Cloud - Wesley Beary, Engine Yard
 
Puppet for Java developers - JavaZone NO 2012
Puppet for Java developers - JavaZone NO 2012Puppet for Java developers - JavaZone NO 2012
Puppet for Java developers - JavaZone NO 2012
 
Stack kicker devopsdays-london-2013
Stack kicker devopsdays-london-2013Stack kicker devopsdays-london-2013
Stack kicker devopsdays-london-2013
 
fog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloudfog or: How I Learned to Stop Worrying and Love the Cloud
fog or: How I Learned to Stop Worrying and Love the Cloud
 
Cutting through the fog of cloud
Cutting through the fog of cloudCutting through the fog of cloud
Cutting through the fog of cloud
 
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
fog or: How I Learned to Stop Worrying and Love the Cloud (OpenStack Edition)
 
Streamline Hadoop DevOps with Apache Ambari
Streamline Hadoop DevOps with Apache AmbariStreamline Hadoop DevOps with Apache Ambari
Streamline Hadoop DevOps with Apache Ambari
 
Practical Chef and Capistrano for Your Rails App
Practical Chef and Capistrano for Your Rails AppPractical Chef and Capistrano for Your Rails App
Practical Chef and Capistrano for Your Rails App
 
Intro to fog and openstack jp
Intro to fog and openstack jpIntro to fog and openstack jp
Intro to fog and openstack jp
 
RESTful API In Node Js using Express
RESTful API In Node Js using Express RESTful API In Node Js using Express
RESTful API In Node Js using Express
 
Null Bachaav - May 07 Attack Monitoring workshop.
Null Bachaav - May 07 Attack Monitoring workshop.Null Bachaav - May 07 Attack Monitoring workshop.
Null Bachaav - May 07 Attack Monitoring workshop.
 
Apache Kafka, HDFS, Accumulo and more on Mesos
Apache Kafka, HDFS, Accumulo and more on MesosApache Kafka, HDFS, Accumulo and more on Mesos
Apache Kafka, HDFS, Accumulo and more on Mesos
 
Service discovery and configuration provisioning
Service discovery and configuration provisioningService discovery and configuration provisioning
Service discovery and configuration provisioning
 
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
Continuous Delivery with Maven, Puppet and Tomcat - ApacheCon NA 2013
 
Integrating icinga2 and the HashiCorp suite
Integrating icinga2 and the HashiCorp suiteIntegrating icinga2 and the HashiCorp suite
Integrating icinga2 and the HashiCorp suite
 

Más de Puppet

Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepo
Puppet
 
2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)
Puppet
 
Enforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationEnforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automation
Puppet
 

Más de Puppet (20)

Puppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepoPuppet camp2021 testing modules and controlrepo
Puppet camp2021 testing modules and controlrepo
 
Puppetcamp r10kyaml
Puppetcamp r10kyamlPuppetcamp r10kyaml
Puppetcamp r10kyaml
 
2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)2021 04-15 operational verification (with notes)
2021 04-15 operational verification (with notes)
 
Puppet camp vscode
Puppet camp vscodePuppet camp vscode
Puppet camp vscode
 
Modules of the twenties
Modules of the twentiesModules of the twenties
Modules of the twenties
 
Applying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance codeApplying Roles and Profiles method to compliance code
Applying Roles and Profiles method to compliance code
 
KGI compliance as-code approach
KGI compliance as-code approachKGI compliance as-code approach
KGI compliance as-code approach
 
Enforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automationEnforce compliance policy with model-driven automation
Enforce compliance policy with model-driven automation
 
Keynote: Puppet camp compliance
Keynote: Puppet camp complianceKeynote: Puppet camp compliance
Keynote: Puppet camp compliance
 
Automating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNowAutomating it management with Puppet + ServiceNow
Automating it management with Puppet + ServiceNow
 
Puppet: The best way to harden Windows
Puppet: The best way to harden WindowsPuppet: The best way to harden Windows
Puppet: The best way to harden Windows
 
Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020Simplified Patch Management with Puppet - Oct. 2020
Simplified Patch Management with Puppet - Oct. 2020
 
Accelerating azure adoption with puppet
Accelerating azure adoption with puppetAccelerating azure adoption with puppet
Accelerating azure adoption with puppet
 
Puppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael PinsonPuppet catalog Diff; Raphael Pinson
Puppet catalog Diff; Raphael Pinson
 
ServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin ReeuwijkServiceNow and Puppet- better together, Kevin Reeuwijk
ServiceNow and Puppet- better together, Kevin Reeuwijk
 
Take control of your dev ops dumping ground
Take control of your  dev ops dumping groundTake control of your  dev ops dumping ground
Take control of your dev ops dumping ground
 
100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software100% Puppet Cloud Deployment of Legacy Software
100% Puppet Cloud Deployment of Legacy Software
 
Puppet User Group
Puppet User GroupPuppet User Group
Puppet User Group
 
Continuous Compliance and DevSecOps
Continuous Compliance and DevSecOpsContinuous Compliance and DevSecOps
Continuous Compliance and DevSecOps
 
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick MaludyThe Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
The Dynamic Duo of Puppet and Vault tame SSL Certificates, Nick Maludy
 

Último

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Último (20)

Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 

Understanding OpenStack Deployments - PuppetConf 2014

  • 1. Understanding OpenStack Deployments Chris Hoge @hogepodge ! Interop Engineer OpenStack Foundation
  • 2. Who is this guy?
  • 3. ! What is OpenStack?
  • 4. • Identity - Keystone • Network - Neutron • Compute - Nova • Block Storage - Cinder • Image Service - Glance • Dashboard - Horizon • Object Storage - Swift • Telemetry - Ceilometer • Orchestration - Heat • Database - Trove • Map Reduce - Sahara • More and growing…
  • 5. What does Puppet have to do with this?
  • 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.
  • 9. OpenStack Composition Modules • stackforge/packstack • theforeman/staypuft • stackforge/fuel-library • stackforge/puppet-openstack_builder • enovance/puppet-openstack-cloud • puppetlabs/puppetlabs-openstack
  • 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': } ! }
  • 14. define openstack::resources::database () { class { "::${title}::db::mysql": user => $title, password => $::openstack::config::mysql_service_password, dbname => $title, allowed_hosts => $::openstack::config::mysql_allowed_hosts, mysql_module => '2.2', require => Anchor['database-service'], } }
  • 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) }
  • 17. define openstack::resources::user ( $password, $tenant, $email, $admin = false, $enabled = true, ) { keystone_user { "$name": ensure => present, enabled => $enabled, password => $password, tenant => $tenant, email => $email, } ! if $admin == true { keystone_user_role { "$name@$tenant": roles => ['_member_', 'admin'], ensure => present, } } else { keystone_user_role { "$name@$tenant": roles => ['_member_'], ensure => present, } } }
  • 18. class openstack::common::keystone { if $::openstack::profile::base::is_controller { $admin_bind_host = '0.0.0.0' } else { $admin_bind_host = $::openstack::config::controller_address_management } ! class { '::keystone': admin_token => $::openstack::config::keystone_admin_token, sql_connection => $::openstack::resources::connectors::keystone, verbose => $::openstack::config::verbose, debug => $::openstack::config::debug, enabled => $::openstack::profile::base::is_controller, admin_bind_host => $admin_bind_host, mysql_module => '2.2', } ! class { '::keystone::roles::admin': email => $::openstack::config::keystone_admin_email, password => $::openstack::config::keystone_admin_password, admin_tenant => 'admin', } }
  • 19. # The profile to set up the Nova controller (several services) class openstack::profile::nova::api { openstack::resources::controller { 'nova': } openstack::resources::database { 'nova': } openstack::resources::firewall { 'Nova API': port => '8774', } openstack::resources::firewall { 'Nova Metadata': port => '8775', } openstack::resources::firewall { 'Nova EC2': port => '8773', } openstack::resources::firewall { 'Nova S3': port => '3333', } openstack::resources::firewall { 'Nova novnc': port => '6080', } ! class { '::nova::keystone::auth': password => $::openstack::config::nova_password, 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, cinder => true, } ! include ::openstack::common::nova }
  • 20. class openstack::common::nova ($is_compute = false) { $is_controller = $::openstack::profile::base::is_controller $management_network = $::openstack::config::network_management $management_address = ip_for_network($management_network) $storage_management_address = $::openstack::config::storage_address_management $controller_management_address = $::openstack::config::controller_address_management ! class { '::nova': sql_connection => $::openstack::resources::connectors::nova, glance_api_servers => "http://${storage_management_address}:9292", memcached_servers => ["${controller_management_address}:11211"], rabbit_hosts => [$controller_management_address], rabbit_userid => $::openstack::config::rabbitmq_user, rabbit_password => $::openstack::config::rabbitmq_password, debug => $::openstack::config::debug, verbose => $::openstack::config::verbose, mysql_module => '2.2', } ! nova_config { 'DEFAULT/default_floating_pool': value => 'public' } ! class { '::nova::api': admin_password => $::openstack::config::nova_password, auth_host => $controller_management_address, enabled => $is_controller, neutron_metadata_proxy_shared_secret => $::openstack::config::neutron_shared_secret, } ! class { '::nova::vncproxy': host => $::openstack::config::controller_address_api, enabled => $is_controller, } ! class { [ 'nova::scheduler', 'nova::objectstore', 'nova::cert', 'nova::consoleauth', 'nova::conductor' ]: enabled => $is_controller, } ! class { '::nova::compute': enabled => $is_compute, vnc_enabled => true, vncserver_proxyclient_address => $management_address, vncproxy_host => $::openstack::config::controller_address_api, } ! class { '::nova::compute::neutron': } ! class { '::nova::network::neutron': neutron_admin_password => $::openstack::config::neutron_password, neutron_region_name => $::openstack::config::region, neutron_admin_auth_url => "http://${controller_management_address}:35357/v2.0", neutron_url => "http://${controller_management_address}:9696", vif_plugging_is_fatal => false, vif_plugging_timeout => '0', }
  • 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'] }
  • 23. class openstack::profile::neutron::agent { include ::openstack::common::neutron include ::openstack::common::ovs } !
  • 24. class openstack::common::neutron { $controller_management_address = $::openstack::config::controller_address_management $data_network = $::openstack::config::network_data $data_address = ip_for_network($data_network) # neutron auth depends upon a keystone configuration include ::openstack::common::keystone ! class { '::neutron': rabbit_host => $controller_management_address, core_plugin => 'neutron.plugins.ml2.plugin.Ml2Plugin', allow_overlapping_ips => true, rabbit_user => $::openstack::config::rabbitmq_user, rabbit_password => $::openstack::config::rabbitmq_password, debug => $::openstack::config::debug, verbose => $::openstack::config::verbose, service_plugins => ['neutron.services.l3_router.l3_router_plugin.L3RouterPlugin', 'neutron.services.loadbalancer.plugin.LoadBalancerPlugin', 'neutron.services.vpn.plugin.VPNDriverPlugin', 'neutron.services.firewall.fwaas_plugin.FirewallPlugin', 'neutron.services.metering.metering_plugin.MeteringPlugin'], } ! class { '::neutron::keystone::auth': password => $::openstack::config::neutron_password, 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, } ! class { '::neutron::server': auth_host => $::openstack::config::controller_address_management, auth_password => $::openstack::config::neutron_password, database_connection => $::openstack::resources::connectors::neutron, enabled => $::openstack::profile::base::is_controller, sync_db => $::openstack::profile::base::is_controller, mysql_module => '2.2', } ! class { '::neutron::server::notifications': nova_url => "http://${controller_management_address}:8774/v2/", nova_admin_auth_url => "http://${controller_management_address}:35357/v2.0/", nova_admin_password => $::openstack::config::nova_password, nova_region_name => $::openstack::config::region, } }
  • 25. class openstack::common::ovs { $data_network = $::openstack::config::network_data $data_address = ip_for_network($data_network) $enable_tunneling = $::openstack::config::neutron_tunneling # true $tunnel_types = $::openstack::config::neutron_tunnel_types #['gre'] $tenant_network_type = $::openstack::config::neutron_tenant_network_type # ['gre'] $type_drivers = $::openstack::config::neutron_type_drivers # ['gre'] $mechanism_drivers = $::openstack::config::neutron_mechanism_drivers # ['openvswitch'] $tunnel_id_ranges = $::openstack::config::neutron_tunnel_id_ranges # ['1:1000'] ! class { '::neutron::agents::ml2::ovs': enable_tunneling => $enable_tunneling, local_ip => $data_address, enabled => true, tunnel_types => $tunnel_types, } ! class { '::neutron::plugins::ml2': type_drivers => $type_drivers, tenant_network_types => $tenant_network_type, mechanism_drivers => $mechanism_drivers, tunnel_id_ranges => $tunnel_id_ranges } }
  • 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.