Since I do not like manual work and due to the reason that we already had the OpenNebula Puppet module available as OpenSource on GitHub, I started working on OpenNebula types and Providers.
You now can declare your OpenNebula infrastructure in Puppet DSL:
All code can be found on the github project: https://github.com/epost-dev/opennebula-puppet-module
This is a short summary on how to use the OpenNebula Puppet Module and the newly added Types and Providers.
Please note: there is still some functionality missing and the providers do far too much one cli command calls.
All work is based on Ken Barbers initial OpenNebula Puppet Module.
# example usage for opennebula puppet module
#
# 1. Running as OpenNebula Master with Apache and mod_passenger and Sunstone
# using kvm and 802.1q VLAN networking:
#
class { one:
oned => true,
sunstone_passenger => true,
}
# 2. running opennebula vm wirt side
#
class { one: }
# Usage of opennebula puppet resource types
#
# Declare OpenNebula Virtual Network:
#
onevnet { '<name>':
ensure => present | absent,
# name of the bridge to use
bridge => 'basebr0',
# name of the physical interface on which the bridge wiull run
phydev => 'br0',
type => 'ranged' | 'fixed',
# for ranged networking:
network_address => '10.0.2.0',
network_mask => '255.255.0.0',
# if you want to restrict network usage by opennebula:
network_start => '10.0.2.100',
network_end => '10.0.2.240',
dns_servers => ['8.8.8.8', '4.4.4.4'],
gateway => '10.0.2.1',
# select your network type
model => 'vlan' | 'ebtables' | 'ovswitch' | 'vmware' | 'dummy',
# add vlanid
vlanid => '1550',
}
# Declare OpenNebula Datastores
#
onedatastore { '<name>':
ensure => present | absent,
type => 'images' | 'system' | 'files',
dm => 'filesystem' | 'vmware' | 'iscsi' | 'lvm' | 'vmfs' | 'ceph',
tm => 'shared' | 'ssh' | 'qcow2' | 'iscsi' | 'lvm' | 'vmfs' | 'ceph' | 'dummy',
disktype => 'file' | 'block' | 'rdb',
}
# Declare OpenNebula Hosts
#
onehost { '<name>':
ensure => present | absent,
im_mad => 'kvm' | 'xen' | 'vmware' | 'ec2' | 'ganglia' | 'dummy' | 'custom',
vm_mad => 'kvm' | 'xen' | 'vmware' | 'ec2' | 'dummy' | 'custom',
vn_mad => 'dummy' | 'firewall' | 'vlan' | 'ebtables' | 'ovswitch' | 'vmware' | 'custom',
}
# Declare OpenNebula clusters
#
onecluster { '<name>':
ensure => present | absent,
hosts => [ 'host1', 'host2',...],
vnets => [ 'vnet1', 'vnet2', ...],
datastores => [ 'ds1', 'ds2', ...],
}
# Declare OpenNebula images
#
oneimage { '<name>':
ensure => present | absent,
datastore => 'default',
description => 'Image description',
type => 'os' | 'cdrom' | 'datablock' | 'kernel' | 'ramdisk' | 'context',
persistent => 'yes' | 'no',
dev_prefix => 'hd' | 'sd' | 'xvd' | 'vd',
target => 'hda' | 'hdb' | 'sda' | 'sdb',
path => '/tmp/image_file',
driver => 'raw' | 'qcow2' | 'tap:aio' | 'file:',
# non file based images
source => '',
size => '11200' # 11.2 GB
fstype => 'ext3',
}
# Declare OpenNebula templates
#
onetemplate { '<name>':
ensure => present | absent,
memory => '1024',
cpu => '0.2',
vcpu => '4',
os_kernel => '/boot/vmkernel',
os_initrd => '/boot/vminitrd',
os_arch => 'x86_64',
os_root => 'hda1',
os_kernel_cmd => 'quiet',
os_bootloader => '/sbin/lilo',
os_boot => 'hd' | 'fd' | 'cdrom' | 'network',
acpi => 'yes' | 'no',
pae => 'yes' | 'no',
pci_bridge => '4',
disks => [ 'disk1', 'disk2', ...],
nics => [ 'nic1', 'vnet2', .. ],
nic_model => 'virtio',
graphics_type => 'vnc' | 'sdl',
graphics_listen => '0.0.0.0',
graphics_port => '',
graphics_password => 'myvncpass',
graphics_keymap => 'de',
context => { 'VAR1' => 'value1', 'var2' => 'value2', ...},
context_ssh_pubkey => '$USER[SSH_PUBLIC_KEY]',
context_network => 'yes' | 'no',
context_onegate => 'yes' | 'no',
context_files => [ 'init.sh', 'mycontextaddon.sh'],
context_variable => # unused,
context_placemant_host => # unused,
context_placement_cluster => # unused,
context_policy => # unused,
}
# Declare OpenNebula VM's
#
onevm { '<name>':
ensure => present | absent,
template => 'template_name',
}
No comments:
Post a Comment