| #!/bin/bash |
| # |
| # lib/nova_plugins/hypervisor-xenserver |
| # Configure the XenServer hypervisor |
| |
| # Enable with: |
| # VIRT_DRIVER=xenserver |
| |
| # Dependencies: |
| # ``functions`` file |
| # ``nova`` configuration |
| |
| # install_nova_hypervisor - install any external requirements |
| # configure_nova_hypervisor - make configuration changes, including those to other services |
| # start_nova_hypervisor - start any external services |
| # stop_nova_hypervisor - stop any external services |
| # cleanup_nova_hypervisor - remove transient data and cache |
| |
| # Save trace setting |
| _XTRACE_XENSERVER=$(set +o | grep xtrace) |
| set +o xtrace |
| |
| |
| # Defaults |
| # -------- |
| |
| # Allow ``build_domU.sh`` to specify the flat network bridge via kernel args |
| FLAT_NETWORK_BRIDGE_DEFAULT=$(sed -e 's/.* flat_network_bridge=\([[:alnum:]]*\).*$/\1/g' /proc/cmdline) |
| if is_service_enabled neutron; then |
| XEN_INTEGRATION_BRIDGE_DEFAULT=$(sed -e 's/.* xen_integration_bridge=\([[:alnum:]]*\).*$/\1/g' /proc/cmdline) |
| XEN_INTEGRATION_BRIDGE=${XEN_INTEGRATION_BRIDGE:-$XEN_INTEGRATION_BRIDGE_DEFAULT} |
| fi |
| |
| VNCSERVER_PROXYCLIENT_ADDRESS=${VNCSERVER_PROXYCLIENT_ADDRESS=169.254.0.1} |
| |
| |
| # Entry Points |
| # ------------ |
| |
| # clean_nova_hypervisor - Clean up an installation |
| function cleanup_nova_hypervisor { |
| # This function intentionally left blank |
| : |
| } |
| |
| # configure_nova_hypervisor - Set config files, create data dirs, etc |
| function configure_nova_hypervisor { |
| if [ -z "$XENAPI_CONNECTION_URL" ]; then |
| die $LINENO "XENAPI_CONNECTION_URL is not specified" |
| fi |
| read_password XENAPI_PASSWORD "ENTER A PASSWORD TO USE FOR XEN." |
| iniset $NOVA_CONF DEFAULT compute_driver "xenapi.XenAPIDriver" |
| iniset $NOVA_CONF xenserver connection_url "$XENAPI_CONNECTION_URL" |
| iniset $NOVA_CONF xenserver connection_username "$XENAPI_USER" |
| iniset $NOVA_CONF xenserver connection_password "$XENAPI_PASSWORD" |
| iniset $NOVA_CONF DEFAULT flat_injected "False" |
| # Need to avoid crash due to new firewall support |
| XEN_FIREWALL_DRIVER=${XEN_FIREWALL_DRIVER:-"nova.virt.firewall.IptablesFirewallDriver"} |
| iniset $NOVA_CONF DEFAULT firewall_driver "$XEN_FIREWALL_DRIVER" |
| |
| local dom0_ip |
| dom0_ip=$(echo "$XENAPI_CONNECTION_URL" | cut -d "/" -f 3-) |
| |
| local ssh_dom0 |
| ssh_dom0="sudo -u $DOMZERO_USER ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null root@$dom0_ip" |
| |
| # Find where the plugins should go in dom0 |
| xen_functions=`cat $TOP_DIR/tools/xen/functions` |
| PLUGIN_DIR=`$ssh_dom0 "$xen_functions; set -eux; xapi_plugin_location"` |
| |
| # install nova plugins to dom0 |
| tar -czf - -C $NOVA_DIR/plugins/xenserver/xenapi/etc/xapi.d/plugins/ ./ | |
| $ssh_dom0 "tar -xzf - -C $PLUGIN_DIR && chmod a+x $PLUGIN_DIR/*" |
| |
| # install console logrotate script |
| tar -czf - -C $NOVA_DIR/tools/xenserver/ rotate_xen_guest_logs.sh | |
| $ssh_dom0 'tar -xzf - -C /root/ && chmod +x /root/rotate_xen_guest_logs.sh && mkdir -p /var/log/xen/guest' |
| |
| # Create a cron job that will rotate guest logs |
| $ssh_dom0 crontab - << CRONTAB |
| * * * * * /root/rotate_xen_guest_logs.sh >/dev/null 2>&1 |
| CRONTAB |
| |
| # Create directories for kernels and images |
| { |
| echo "set -eux" |
| cat $TOP_DIR/tools/xen/functions |
| echo "create_directory_for_images" |
| echo "create_directory_for_kernels" |
| } | $ssh_dom0 |
| |
| } |
| |
| # install_nova_hypervisor() - Install external components |
| function install_nova_hypervisor { |
| pip_install_gr xenapi |
| } |
| |
| # start_nova_hypervisor - Start any required external services |
| function start_nova_hypervisor { |
| # This function intentionally left blank |
| : |
| } |
| |
| # stop_nova_hypervisor - Stop any external services |
| function stop_nova_hypervisor { |
| # This function intentionally left blank |
| : |
| } |
| |
| |
| # Restore xtrace |
| $_XTRACE_XENSERVER |
| |
| # Local variables: |
| # mode: shell-script |
| # End: |