Refactored provisioning cookbook for Ocata, ChefDK updates

- changed to a more alive fork of statsd, as att-cloud/statsd has been stale
  for years
- renamed multi-node to multinode to be consistent with OpenStack
  naming conventions
- introduced network node in the multinode scenario
- bumped mysql2 to 0.4.5 to align with upstream
- removed nova cell setup helper since it is no longer needed

Change-Id: If4d4d45981c8895ca57cba9c34fa1eea4b8871e3
Depends-On: I950605f384405b55737af77bc4224f1e18fee8e1
Depends-On: I4c26aea78220eb20fc4e5e964af93414855df5f6
Depends-On: I3112615cec3dd80c63779d164893b4171773856c
Depends-On: I97b453fc419bfbf01679dadf39a256b1f0f99859
Depends-On: Iba9ba7110dfde7635edc6706ecbbafbdbb161002
Depends-On: Ie1d5f27a9cf8803044568a31e4dae7654b02c9a1
Depends-On: I7c2950270f88cc9d54de593460009c6741913796
Depends-On: I16d6f892f325a80eb3eabd10110177246b63663f
Depends-On: Ie61ae3ca685738fe1de98fc9223d3e39535ce000
Depends-On: I63e6680cec8b66e2ece2d2627c0b413f5d401317
This commit is contained in:
Samuel Cassiba 2017-07-11 06:17:35 -07:00
parent 887f82636d
commit 2873826b76
13 changed files with 281 additions and 142 deletions

View File

@ -1,3 +1,5 @@
inherit_from: .rubocop_todo.yml
AllCops:
Include:
- '**/*.rb'

12
.rubocop_todo.yml Normal file
View File

@ -0,0 +1,12 @@
# This configuration was generated by
# `rubocop --auto-gen-config`
# on 2017-08-02 14:33:46 -0400 using RuboCop version 0.47.1.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new
# versions of RuboCop, may require this file to be generated again.
# Offense count: 2
# Configuration parameters: CountComments, ExcludedMethods.
Metrics/BlockLength:
Max: 33

View File

@ -23,4 +23,4 @@ source 'https://supermarket.chef.io'
end
cookbook 'openstackclient', github: 'cloudbau/cookbook-openstackclient'
cookbook 'statsd', github: 'att-cloud/cookbook-statsd'
cookbook 'statsd', github: 'librato/statsd-cookbook'

View File

@ -39,12 +39,12 @@ end
desc "All-in-One build"
task :allinone => :create_key do
run_command("chef-client #{client_opts} -o 'provisioning::vagrant_linux,provisioning::allinone'")
run_command("chef-client #{client_opts} -o 'provisioning::allinone'")
end
desc "Multi-Node build"
task :multi_node => :create_key do
run_command("chef-client #{client_opts} -o 'provisioning::vagrant_linux,provisioning::multi-node'")
desc "Multinode build"
task :multinode => :create_key do
run_command("chef-client #{client_opts} -o 'provisioning::multinode'")
end
desc "Blow everything away"
@ -164,19 +164,6 @@ def _setup_local_network # rubocop:disable Metrics/MethodLength
)
end
# Helper for setting up nova cells
def _setup_nova_cells # rubocop:disable Metrics/MethodLength
_run_commands('nova cells setup', {
'nova-manage cell_v2' => ['list_cells',
'map_cell0 --database_connection mysql+pymysql://nova_cell0:mypass@127.0.0.1/nova_cell0?charset=utf8',
'create_cell --verbose --name cell1',
'discover_hosts',
'list_cells'
],
'nova-manage' => ['db sync'] }
)
end
# Helper for setting up tempest and upload the default cirros image.
def _setup_tempest(client_opts)
sh %(sudo chef-client #{client_opts} -E integration-#{@platform} -r 'recipe[openstack-integration-test::setup]')
@ -199,9 +186,9 @@ task :integration => [:create_key, :berks_vendor] do
_run_env_queries
# Install mysql2 gem to avoid hitting mirror issues
sh %(wget https://rubygems.org/downloads/mysql2-0.4.4.gem)
sh %(wget https://rubygems.org/downloads/mysql2-0.4.5.gem)
sh %(sudo apt-get install -y libmysqlclient-dev)
sh %(chef exec gem install -N ./mysql2-0.4.4.gem)
sh %(chef exec gem install -N ./mysql2-0.4.5.gem)
# Three passes to make sure of cookbooks idempotency
for i in 1..3
@ -210,7 +197,6 @@ task :integration => [:create_key, :berks_vendor] do
# Kick off chef client in local mode, will converge OpenStack right on the gate job "in place"
sh %(sudo chef-client #{client_opts} -E integration-#{@platform} -r 'role[minimal]')
if i == 1
_setup_nova_cells
_setup_tempest(client_opts)
_setup_local_network
end

View File

@ -1,5 +1,5 @@
{
"name": "multi-node-centos7",
"name": "multinode-centos7",
"cookbook_versions": {
},
"json_class": "Chef::Environment",
@ -30,7 +30,8 @@
"compute-novnc": { "host": "192.168.101.60" },
"orchestration-api": { "host": "192.168.101.60" },
"orchestration-api-cfn": { "host": "192.168.101.60" },
"orchestration-api-cloudwatch": { "host": "192.168.101.60" }
"orchestration-api-cloudwatch": { "host": "192.168.101.60" },
"placement-api": { "host": "192.168.101.60" }
},
"internal": {
"identity": { "host": "192.168.101.60" },
@ -43,7 +44,8 @@
"compute-novnc": { "host": "192.168.101.60" },
"orchestration-api": { "host": "192.168.101.60" },
"orchestration-api-cfn": { "host": "192.168.101.60" },
"orchestration-api-cloudwatch": { "host": "192.168.101.60" }
"orchestration-api-cloudwatch": { "host": "192.168.101.60" },
"placement-api": { "host": "192.168.101.60" }
},
"public": {
"identity": { "host": "192.168.101.60" },
@ -56,9 +58,11 @@
"compute-novnc": { "host": "192.168.101.60" },
"orchestration-api": { "host": "192.168.101.60" },
"orchestration-api-cfn": { "host": "192.168.101.60" },
"orchestration-api-cloudwatch": { "host": "192.168.101.60" }
"orchestration-api-cloudwatch": { "host": "192.168.101.60" },
"placement-api": { "host": "192.168.101.60" }
}
},
"bind_interface": "enp0s8",
"bind_service": {
"mq": { "host": "192.168.101.60" },
"main": {
@ -77,7 +81,8 @@
"compute-novnc": { "host": "0.0.0.0" },
"orchestration-api": { "host": "0.0.0.0" },
"orchestration-api-cfn": { "host": "0.0.0.0" },
"orchestration-api-cloudwatch": { "host": "0.0.0.0" }
"orchestration-api-cloudwatch": { "host": "0.0.0.0" },
"placement-api": { "host": "0.0.0.0" }
}
},
"dashboard": {

View File

@ -1,5 +1,5 @@
{
"name": "multi-node-ubuntu16",
"name": "multinode-ubuntu16",
"cookbook_versions": {
},
"json_class": "Chef::Environment",
@ -15,12 +15,16 @@
"override_attributes": {
"openstack": {
"apt": {
"unattended_upgrades": {
"enable": false
},
"update_apt_cache": true
},
"sysctl": {
"net.ipv4.ip_forward": 1
},
"endpoints": {
"db": { "host": "192.168.101.60" },
"mq": { "host": "192.168.101.60" },
"admin": {
"identity": { "host": "192.168.101.60" },
@ -33,7 +37,8 @@
"compute-novnc": { "host": "192.168.101.60" },
"orchestration-api": { "host": "192.168.101.60" },
"orchestration-api-cfn": { "host": "192.168.101.60" },
"orchestration-api-cloudwatch": { "host": "192.168.101.60" }
"orchestration-api-cloudwatch": { "host": "192.168.101.60" },
"placement-api": { "host": "192.168.101.60" }
},
"internal": {
"identity": { "host": "192.168.101.60" },
@ -46,7 +51,8 @@
"compute-novnc": { "host": "192.168.101.60" },
"orchestration-api": { "host": "192.168.101.60" },
"orchestration-api-cfn": { "host": "192.168.101.60" },
"orchestration-api-cloudwatch": { "host": "192.168.101.60" }
"orchestration-api-cloudwatch": { "host": "192.168.101.60" },
"placement-api": { "host": "192.168.101.60" }
},
"public": {
"identity": { "host": "192.168.101.60" },
@ -59,11 +65,13 @@
"compute-novnc": { "host": "192.168.101.60" },
"orchestration-api": { "host": "192.168.101.60" },
"orchestration-api-cfn": { "host": "192.168.101.60" },
"orchestration-api-cloudwatch": { "host": "192.168.101.60" }
"orchestration-api-cloudwatch": { "host": "192.168.101.60" },
"placement-api": { "host": "192.168.101.60" }
}
},
"bind_service": {
"mq": { "host": "0.0.0.0" },
"db": { "host": "192.168.101.60" },
"mq": { "host": "192.168.101.60" },
"main": {
"identity": { "host": "0.0.0.0" }
},
@ -80,7 +88,8 @@
"compute-novnc": { "host": "0.0.0.0" },
"orchestration-api": { "host": "0.0.0.0" },
"orchestration-api-cfn": { "host": "0.0.0.0" },
"orchestration-api-cloudwatch": { "host": "0.0.0.0" }
"orchestration-api-cloudwatch": { "host": "0.0.0.0" },
"placement-api": { "host": "0.0.0.0" }
}
},
"dashboard": {
@ -91,7 +100,7 @@
},
"network": {
"plugins": {
"ml2": {
"ml2_openvswitch": {
"conf": {
"ml2_type_vxlan": {
"vni_ranges": "65537:69999",
@ -105,7 +114,7 @@
"DEFAULT": {
"service_plugins": "router"
},
"oslo_messaging_rabbit": { "rabbit_host": "192.168.101.60" },
"transport_url": { "rabbit_host": "192.168.101.60" },
"ml2": { "tenant_network_types": "vxlan" }
}
},
@ -117,7 +126,7 @@
"libvirt": {
"virt_type": "qemu"
},
"oslo_messaging_rabbit": { "rabbit_host": "192.168.101.60" }
"transport_url": { "rabbit_host": "192.168.101.60" }
}
}
}

View File

@ -1,5 +1,5 @@
{
"name": "multi-node-compute",
"name": "multinode-compute",
"description": "This will deploy a compute node for a scenarios with just compute and controller nodes",
"json_class": "Chef::Role",
"default_attributes": {

View File

@ -1,5 +1,5 @@
{
"name": "multi-node-controller",
"name": "multinode-controller",
"description": "This will deploy a controller node for a scenarios with just compute and controller nodes",
"json_class": "Chef::Role",
"default_attributes": {
@ -22,23 +22,16 @@
"recipe[openstack-image::api]",
"recipe[openstack-image::registry]",
"recipe[openstack-image::identity_registration]",
"recipe[openstack-network::identity_registration]",
"recipe[openstack-network::ml2_core_plugin]",
"recipe[openstack-network::ml2_openvswitch]",
"recipe[openstack-network]",
"recipe[openstack-network::openvswitch]",
"recipe[openstack-network::_bridge_config_example]",
"recipe[openstack-network::plugin_config]",
"recipe[openstack-network::server]",
"recipe[openstack-network::l3_agent]",
"recipe[openstack-network::dhcp_agent]",
"recipe[openstack-network::metadata_agent]",
"recipe[openstack-network::openvswitch_agent]",
"recipe[openstack-network::ml2_core_plugin]",
"recipe[openstack-network::openvswitch]",
"recipe[openstack-compute::nova-setup]",
"recipe[openstack-compute::identity_registration]",
"recipe[openstack-compute::conductor]",
"recipe[openstack-compute::api-os-compute]",
"recipe[openstack-compute::api-metadata]",
"recipe[openstack-compute::placement_api]",
"recipe[openstack-compute::scheduler]",
"recipe[openstack-compute::vncproxy]",
"recipe[openstack-compute::identity_registration]",

View File

@ -0,0 +1,24 @@
{
"name": "multinode-network",
"description": "This will deploy a controller node for a scenarios with just compute and controller nodes",
"json_class": "Chef::Role",
"default_attributes": {
},
"override_attributes": {
},
"chef_type": "role",
"run_list": [
"recipe[build-essential]",
"recipe[openstack-common]",
"recipe[openstack-common::logging]",
"recipe[openstack-common::sysctl]",
"recipe[openstack-network::ml2_openvswitch]",
"recipe[openstack-network::l3_agent]",
"recipe[openstack-network::dhcp_agent]",
"recipe[openstack-network::metadata_agent]",
"recipe[openstack-network::openvswitch_agent]"
],
"env_run_lists": {
}
}

View File

@ -1,11 +1,24 @@
require 'chef/provisioning'
require 'chef/provisioning/vagrant_driver'
default_bridge = '["en0: USB Ethernet","en1: USB Ethernet",'
default_bridge += '"en2: USB Ethernet","en3: USB Ethernet",'
default_bridge += '"en4: USB Ethernet","eth0","wlan0",'
default_bridge += '"en0: Wi-Fi (AirPort)","en1: Wi-Fi (AirPort)",'
default_bridge += '"en2: Wi-Fi (AirPort)",'
default_bridge += '"Intel(R) Centrino(R) Advanced-N 6205"]'
with_driver 'vagrant'
os = 'ubuntu/xenial64'
os = 'centos/7' if ENV['REPO_OS'].to_s.include?('centos')
env = 'allinone-ubuntu16'
env = 'allinone-centos7' if ENV['REPO_OS'].to_s.include?('centos')
# make sure your ethernet interface matches preferred_interfaces, or override
# with OS_BRIDGE
# rubocop:disable LineLength
preferred_interfaces = ['Ethernet', 'eth0', 'enp3s0', 'Wi-Fi',
'Thunderbolt 1', 'Thunderbolt 2', 'Centrino']
host_interfaces = `VBoxManage list bridgedifs | grep ^Name`
.gsub(/Name:\s+/, '').split("\n")
default_bridge = preferred_interfaces.map { |pi| host_interfaces.find { |vm| vm =~ /#{Regexp.quote(pi)}/ } }.compact[0]
# rubocop:enable LineLength
bridge = if ENV['OS_BRIDGE']
"\"#{ENV['OS_BRIDGE']}\""
@ -13,30 +26,42 @@ bridge = if ENV['OS_BRIDGE']
default_bridge
end
controller_config = <<-ENDCONFIG
config.vm.network "forwarded_port", guest: 443, host: 9443
config.vm.network "forwarded_port", guest: 4002, host: 4002
config.vm.network "forwarded_port", guest: 5000, host: 5000
config.vm.network "forwarded_port", guest: 6080, host: 6080
config.vm.network "forwarded_port", guest: 8773, host: 8773
config.vm.network "forwarded_port", guest: 8774, host: 8774
config.vm.network "forwarded_port", guest: 35357, host: 35357
###
# allinone compute controller
###
options = {
vagrant_options: {
'vm.box' => os,
'vm.network' => [
':forwarded_port, guest: 443, host: 9443',
':forwarded_port, guest: 4002, host: 4002',
':forwarded_port, guest: 5000, host: 5000',
':forwarded_port, guest: 6080, host: 6080',
':forwarded_port, guest: 8773, host: 8773',
':forwarded_port, guest: 8774, host: 8774',
':forwarded_port, guest: 35357, host: 35357'
]
},
vagrant_config: <<-EOF
config.vm.provision "chef_solo" do |chef|
chef.version = "12.21.3"
chef.channel = "stable"
end
config.vm.provider "virtualbox" do |v|
v.memory = 8192
v.cpus = 4
v.customize ["modifyvm", :id, "--nicpromisc2", "allow-all"]
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
end
config.vm.network "private_network", :type => 'dhcp', :adapter => 2
config.vm.network "public_network",
bridge: #{bridge}
ENDCONFIG
env = 'allinone-ubuntu16'
env = 'allinone-centos7' if ENV['REPO_OS'].to_s.include?('centos')
config.vm.define "controller" do |cont|
cont.vm.network "private_network", :type => "dhcp", :adapter => 2
cont.vm.network "public_network", :dev => "#{bridge}", :mode => "bridge", :type => "bridge"
end
EOF
}
machine 'controller' do
add_machine_options vagrant_config: controller_config
machine_options options
role 'allinone'
chef_environment env
file('/etc/chef/openstack_data_bag_secret',

View File

@ -1,57 +0,0 @@
require 'chef/provisioning'
# config for controller-node vagrant box
controller_config = <<-ENDCONFIG
config.vm.network "forwarded_port", guest: 443, host: 9443 # dashboard-ssl
config.vm.network "forwarded_port", guest: 4002, host: 4002
config.vm.network "forwarded_port", guest: 5000, host: 5000
config.vm.network "forwarded_port", guest: 8774, host: 8774 # compute-api
config.vm.network "forwarded_port", guest: 35357, host: 35357
config.vm.provider "virtualbox" do |v|
v.memory = 6144
v.cpus = 2
v.customize ["modifyvm", :id, "--nicpromisc2", "allow-all"]
v.customize ["modifyvm", :id, "--nicpromisc3", "allow-all"]
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
end
config.vm.network "private_network", ip: "192.168.100.60"
config.vm.network "private_network", ip: "192.168.101.60"
ENDCONFIG
env = 'multi-node-ubuntu16'
env = 'multi-node-centos7' if ENV['REPO_OS'].to_s.include?('centos')
# create controller-node with config defined above
machine 'controller' do
add_machine_options vagrant_config: controller_config
role 'multi-node-controller'
chef_environment env
file('/etc/chef/openstack_data_bag_secret',
"#{File.dirname(__FILE__)}/../../../../../encrypted_data_bag_secret")
converge true
end
[%w(compute1 61), %w(compute2 62)].each do |name, ip_suff|
# config for compute-node vagrant box
compute_config = <<-ENDCONFIG
config.vm.provider "virtualbox" do |v|
v.memory = 2048
v.cpus = 2
v.customize ["modifyvm", :id, "--nicpromisc2", "allow-all"]
v.customize ["modifyvm", :id, "--nicpromisc3", "allow-all"]
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
end
config.vm.network "private_network", ip: "192.168.100.#{ip_suff}"
config.vm.network "private_network", ip: "192.168.101.#{ip_suff}"
ENDCONFIG
# create compute-node with config defined above
machine name do
add_machine_options vagrant_config: compute_config
role 'multi-node-compute'
chef_environment env
file('/etc/chef/openstack_data_bag_secret',
"#{File.dirname(__FILE__)}/../../../../../encrypted_data_bag_secret")
converge true
end
end

View File

@ -0,0 +1,149 @@
require 'chef/provisioning'
require 'chef/provisioning/vagrant_driver'
with_driver 'vagrant'
os = 'ubuntu/xenial64'
os = 'centos/7' if ENV['REPO_OS'].to_s.include?('centos')
env = 'multinode-ubuntu16'
env = 'multinode-centos7' if ENV['REPO_OS'].to_s.include?('centos')
# make sure your ethernet interface matches preferred_interfaces, or override
# with OS_BRIDGE
# rubocop:disable LineLength
preferred_interfaces = ['Ethernet', 'eth0', 'enp3s0', 'Wi-Fi',
'Thunderbolt 1', 'Thunderbolt 2', 'Centrino']
host_interfaces = `VBoxManage list bridgedifs | grep ^Name`
.gsub(/Name:\s+/, '').split("\n")
default_bridge = preferred_interfaces.map { |pi| host_interfaces.find { |vm| vm =~ /#{Regexp.quote(pi)}/ } }.compact[0]
# rubocop:enable LineLength
bridge = if ENV['OS_BRIDGE']
"\"#{ENV['OS_BRIDGE']}\""
else
default_bridge
end
###
# compute controller
###
controller_options = {
vagrant_options: {
'vm.box' => os,
'vm.network' => [
':private_network, {ip: "192.168.100.60"}',
':private_network, {ip: "192.168.101.60"}',
':forwarded_port, guest: 443, host: 9443',
':forwarded_port, guest: 4002, host: 4002',
':forwarded_port, guest: 5000, host: 5000',
':forwarded_port, guest: 6080, host: 6080',
':forwarded_port, guest: 8773, host: 8773',
':forwarded_port, guest: 8774, host: 8774',
':forwarded_port, guest: 35357, host: 35357'
]
},
vagrant_config: <<-EOH
config.vm.provision "chef_solo" do |chef|
chef.version = "12.21.3"
chef.channel = "stable"
end
config.vm.provider "virtualbox" do |v|
v.memory = 6144
v.cpus = 2
v.customize ["modifyvm", :id, "--nicpromisc2", "allow-all"]
v.customize ["modifyvm", :id, "--nicpromisc3", "allow-all"]
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
end
EOH
}
# create controller node with the config defined above
machine 'controller' do
machine_options controller_options
role 'multinode-controller'
chef_environment env
file('/etc/chef/openstack_data_bag_secret',
"#{File.dirname(__FILE__)}/../../../../../encrypted_data_bag_secret")
converge true
end
###
# network controller config
###
network_options = {
vagrant_options: {
'vm.box' => os,
'vm.network' => [
':private_network, {ip: "192.168.100.70"}',
':private_network, {ip: "192.168.101.70"}'
]
},
vagrant_config: <<-EOH
config.vm.provision "chef_solo" do |chef|
chef.version = "12.21.3"
chef.channel = "stable"
end
config.vm.provider "virtualbox" do |v|
v.memory = 1024
v.cpus = 1
v.customize ["modifyvm", :id, "--nicpromisc2", "allow-all"]
v.customize ["modifyvm", :id, "--nicpromisc3", "allow-all"]
v.customize ["modifyvm", :id, "--nicpromisc4", "allow-all"]
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
end
config.vm.define "network" do |net|
net.vm.network "public_network", :dev => "#{bridge}", :mode => "bridge", :type => "bridge"
end
EOH
}
# create network node with the config defined above
machine 'network' do
machine_options network_options
role 'multinode-network'
chef_environment env
file('/etc/chef/openstack_data_bag_secret',
"#{File.dirname(__FILE__)}/../../../../../encrypted_data_bag_secret")
converge true
end
machine_batch do
compute_nodes = 2
compute_nodes.times do |number|
compute_options = {
vagrant_options: {
'vm.box' => os,
'vm.network' => [
":private_network, {ip: '192.168.100.#{61 + number}'}",
":private_network, {ip: '192.168.101.#{62 + number}'}"
]
},
vagrant_config: <<-EOH
config.vm.provision "chef_solo" do |chef|
chef.version = "12.21.3"
chef.channel = "stable"
end
config.vm.provider "virtualbox" do |v|
v.memory = 1024
v.cpus = 2
v.customize ["modifyvm", :id, "--nicpromisc2", "allow-all"]
v.customize ["modifyvm", :id, "--nicpromisc3", "allow-all"]
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
end
EOH
}
# create compute nodes with the config defined above
machine "compute#{number + 1}" do
machine_options compute_options
role 'multinode-compute'
chef_environment env
file('/etc/chef/openstack_data_bag_secret',
"#{File.dirname(__FILE__)}/../../../../../encrypted_data_bag_secret")
converge true
end
end
end

View File

@ -1,9 +0,0 @@
require 'chef/provisioning/vagrant_driver'
os = 'ubuntu/xenial64'
os = 'centos/7' if ENV['REPO_OS'].to_s.include?('centos')
with_driver 'vagrant'
with_machine_options vagrant_options: {
'vm.box' => os
}