The OpenNebula (ON) datasource supports the contextualization disk.
OpenNebula’s virtual machines are contextualized (parametrized) by CD-ROM image, which contains a shell script context.sh with custom variables defined on virtual machine start. There are no fixed contextualization variables, but the datasource accepts many used and recommended across the documentation.
Datasource accepts following configuration options.
dsmode: values: local, net, disabled default: net
Tells if this datasource will be processed in ‘local’ (pre-networking) or ‘net’ (post-networking) stage or even completely ‘disabled’.
parseuser: default: nobody
Unprivileged system user used for contextualization script processing.
The following criteria are required:
- Must be formatted with iso9660 filesystem or have a filesystem label of CONTEXT or CDROM
- Must contain file context.sh with contextualization variables. File is generated by OpenNebula, it has a KEY=’VALUE’ format and can be easily read by bash
There are no fixed contextualization variables in OpenNebula, no standard. Following variables were found on various places and revisions of the OpenNebula documentation. Where multiple similar variables are specified, only first found is taken.
Datasource mode configuration override. Values: local, net, disabled.
DNS ETH<x>_IP ETH<x>_NETWORK ETH<x>_MASK ETH<x>_GATEWAY ETH<x>_DOMAIN ETH<x>_DNS
Static network configuration.
PUBLIC_IP IP_PUBLIC ETH0_IP
If no hostname has been specified, cloud-init will try to create hostname from instance’s IP address in ‘local’ dsmode. In ‘net’ dsmode, cloud-init tries to resolve one of its IP addresses to get hostname.
One or multiple SSH keys (separated by newlines) can be specified.
cloud-init user data.
This example cloud-init configuration (cloud.cfg) enables OpenNebula datasource only in ‘net’ mode.
disable_ec2_metadata: True datasource_list: ['OpenNebula'] datasource: OpenNebula: dsmode: net parseuser: nobody
Example VM’s context section¶
CONTEXT=[ SSH_KEY="$USER[SSH_KEY] $USER[SSH_KEY1] $USER[SSH_KEY2]", PUBLIC_IP="$NIC[IP]", USER_DATA="#cloud-config # see https://help.ubuntu.com/community/CloudInit packages:  mounts: - [vdc,none,swap,sw,0,0] runcmd: - echo 'Instance has been configured by cloud-init.' | wall " ]