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