The one module allows to install and manage your OpenNebula cloud
Ruby HTML Puppet Other
Latest commit c586cb0 Nov 7, 2016 @Xylakant Xylakant committed on GitHub Merge pull request #250 from Xylakant/feature/gh-249-make-sudo-optional
Feature/gh 249 make sudo optional
Permalink
Failed to load latest commit information.
docker update ini_settings with empty section Sep 10, 2015
files Remove sunstone-view/admin.yaml from puppet module Jun 19, 2015
lib/puppet add mtu property for onevnet type/provider Mar 2, 2016
manifests
spec
templates
.fixtures.yml change vmm_exec_kvm.conf handling Sep 4, 2015
.gitignore fix spec and acceptance tests Sep 8, 2015
.travis.yml pruned some ruby versions from the travis.yml Oct 11, 2016
CONTRIBUTING.md Added beaker link May 17, 2016
Gemfile bind rspec to > 3.0.0 Nov 3, 2016
LICENSE
README.md update readme Oct 11, 2016
Rakefile
Vagrantfile Removes sudo package. Oct 13, 2015
metadata.json bump module version in metadata Oct 11, 2016

README.md

opennebula-puppet-module

The one (short for OpenNebula) module allows to install and manage your OpenNebula cloud.

Build Status

Table of Contents

  1. Requirements
  2. Using the Module
  3. Usage of opennebula puppet resource types
  4. Support
  5. License

Requirements

Supported Platforms

Centos

We support Puppet 3.1.1 on CentOS 6.7 with OpenNebula 4.12.1. You need to add the EPEL repository because the module needs some packages from there.

Note, there is a required package on the oned controller node that is not managed by this module, the gem nokogiri (or the yum package rubygem-nokori). This can be installed elsewhere in that node's puppet catalog like this:

package {'rubygem-nokogiri':
  ensure => installed,
} ->
class {'::one':}

Puppet Module Dependencies

The ONe-Module needs the following other modules:

How to install:

puppet module install puppetlabs-stdlib
puppet module install puppetlabs-apt
puppet module install puppetlabs-inifile

Using the 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           => true,
        sunstone_passenger => true,
    }
    

Attn: needs separate apache config for sunstone.

  1. running opennebula node

    class { one: }
    

Usage of opennebula puppet resource types

Create a ONE Vnet

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',
    dnsservers      => ['8.8.8.8', '4.4.4.4'],
    gateway         => '10.0.2.1',
    # add vlanid 
    vlanid          => '1550',
    netmask         => '255.255.0.0',
    network_address => '10.0.2.0',
}

Create onevnet addressrange

onevnet_addressrange { '<name>':
    ensure        => present | absent,
    onevnet_name  => '<name>',            # this has to be an existing onevnet - will be autorequired if declared
    ar_id         => '<INT>',             # read only value
    protocol      => ip4 | ip6 | ip4_6 | ether,
    size          => '10',
    mac           => '02:00:0a:00:00:96', # optional
    # attributes for ip4 and ip4_6:
    ip            => '10.0.2.20'
    # attributes for ip6:
    globalprefix  => '2001:a::',          # optional
    ulaprefix     => 'fd01:a:b::',        # optional
}

Attention: onevnet_addressrange uses the title to uniqly identify address ranges among all Virtual Networks. The title will be set as common attribute with the name PUPPET_NAME. This means: address ranges which are not set by Puppet will not be visible using puppet resource onevnet_addressrange command.

Create a ONE Datastore

onedatastore { '<name>':
    ensure      => present | absent,
    type        => 'IMAGE_DS' | 'SYSTEM_DS' | 'FILE_DS',
    ds_mad      => 'fs' | 'vmware' | 'iscsi' | 'lvm' | 'vmfs' | 'ceph',
    tm_mad      => 'shared' | 'ssh' | 'qcow2' | 'iscsi' | 'lvm' | 'vmfs' | 'ceph' | 'dummy',
    driver      => 'raw | qcow2',
    ceph_host   => 'cephhost', # (optional: ceph only)
    ceph_user   => 'cephuser', # (optional: ceph only)
    ceph_secret => 'ceph-secret-here', # (optional: ceph only)
    pool_name   => 'cephpoolname', # (optional: ceph only)
    bridge_list => 'host1 host2 host3', # (optional: ceph only)
    disk_type   => 'file' | 'block' | 'rdb',
    base_path   => '/some/lib/path/datastore', #Optional
    cluster     => 'somename', # Optional
    cluster_id  => '1234', # Optional
}

Create a ONE Host

onehost { '<name>':
    ensure  => present | absent,
    im_mad  => 'kvm' | 'xen' | 'vmware' | 'ec2' | 'ganglia' | 'dummy' | 'custom',
    vm_mad  => 'kvm' | 'xen' | 'vmware' | 'ec2' | 'dummy' | 'custom' | 'qemu',
    vn_mad  => 'dummy' | 'firewall' | 'vlan' | 'ebtables' | 'ovswitch' | 'vmware' | 'custom',
}

Create a ONE Cluster

onecluster { '<name>':
    ensure     => present | absent,
    hosts      => [ 'host1', 'host2',...],
    vnets      => [ 'vnet1', 'vnet2', ...],
    datastores => [ 'ds1', 'ds2', ...],
}

Create a ONE Image

oneimage { '<name>':
    ensure      => present | absent,
    datastore   => 'default',
    description => 'Image description',
    disk_type   => 'os' | 'cdrom' | 'datablock' | 'kernel' | 'ramdisk' | 'context',
    persistent  => 'true' | 'false',
    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',
}

Create a ONE Template

onetemplate { '<name>':
    ensure                    => present | absent,
    memory                    => '1024',
    cpu                       => '0.2',
    vcpu                      => '4',
    features                  => { 'acpi' => 'yes|no', 'pae' => 'true|false' },
    os                        => { 'kernel' => '/boot/vmkernel', 'initrd' => '/boot/vminitrd', 'arch' => 'x86_64', 'root' => 'hda1', 'bootloader' => '/sbin/lilo', 'boot' => 'hd|fd|cdrom|network' }
    pci_bridge                => '4',
    disks                     => [ 'disk1', 'disk2', ...],
    nics                      => [ 'nic1', 'vnet2', .. ],
    nic_model                 => 'virtio',
    graphics                  => { 'type' => 'vnc|sdl', 'listen' => '0.0.0.0', 'password' => 'myvncpass', '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_placemet_cluster  => # unused,
    context_policy            => # unused,
}

Create a ONE VM

onevm { '<name>':
    ensure   => present | absent,
    template => 'template_name',
}

Create a ONE Security Groups (ONe <= 4.12):

onesecgroup {'securitygroup1':
   description => 'Optional description',
   rules       => [ { protocol      => 'TCP|UDP|ICMP|IPSEC|ALL',
                      rule_type     => 'INBOUND|OUTBOUND',
                      ip            => '192.168.0.0',
                      size          => '255',
                      range         => '22,53,80:90,110,1024:65535',
                      icmp_type     => 'optional, only applies for icmp',
                    },
                    { protocol  => 'ALL',
                      rule_type => 'OUTBOUND',
                    },
                    ...
                  ]
}

Support

For questions or bugs create an issue on Github.

How to contribute: CONTRIBUTING.md

License

Copyright © 2013 - 2016 Deutsche Post E-Post Development GmbH

Distributed under the Apache License, Version 2.0.