Overview
Target
- Hyper-V Server 2012
- WMI for VMM control
Strategy
- CloudStack Agent Model
- Business logic in ServerResource accesses WMI
Phase 1
Support basic commands
- VM lifecycle
- Local disk creation from template
- VM creation, start/stop, and destruction
- VMM monitoring
- Host, VM and storage stats returned to CloudStack Server
VM network isolation using VLANs
Basic template management
Phase 2
Expand networking support
- Flat networking with Security Groups for VM isolation
Volume service
- Volumes management independent of VMs
Expand VM management
Shared storage
Native SystemVMs
- Console access
- RDP sessions to Hyper-V VMs
Progress
Progress
Current source GitHub repository https://github.com/lafferty/cshv3
- Plugin is cloud-plugin-hypervisor-hyperv, under ./plugins/hypervisor/hyperv
- Minor changes to UI required for template creation
CS 4.0 Hyper-V Plugin
Target Hyper-V Server 2012
- Hyper-V 3.0
- WMI for VMM control
- No NFS client
Architecture
...
- Reuse KVM-style Agent Container
- Container each
- hypervisor
- Call out to WMI via Hyper-V
Business Logic accesses WMI via - Use existing SystemVMs
- Run on surrogate XenServer cluster
Current Limits
- Include XenServer cluster to run SSVM and Virtual Router
- Reduced set of commands and command options
- VLAN isolation only
- Use virtual router SystemVM for isolation
- Local Primary Storage
- Admin manually configures shares to appear as local Local folder
- NFS Secondary storage accessed as NFS/SMB via Windows Server 2012
- Windows Free license Hyper-V Server 2012 exposes share as NFS and SMB
Problem Areas
Lack of detail for Service Contract parameters
- The meaning of parameters in Command objects not clear. E.g. Volume objects in CreateCommand
- If volumes keyed by UUID, does the plugin need to persist the volume name?
- If UUIDs are arbitrary, can they include the volume file extension?
- Can the volume path include the file name?
NFS configuration on Windows Server
- Need technical assistance, as XenServer SSVM not able to mount NFS folder shared by a Windows Server 2012. Work around is manually mirroring templates on share mounted on Hyper-V.
Surrogate System VMs
- No SystemVMs to run on Hyper-V
Future
- has no NFS client
- Admin manually mounts secondary storage to appear as local folder
- Executes in Cygwin
Design changes
Near
Adopt Javelin Storage model
Far
V2 WMI API
- Currently mix of v1 and v2
Access WMI from Java
- Remove use of scripts
- Remove agent from Hyper-V server
- WMI expertise
- Examples from OpenStack driver not in depth enough
- Java / WMI interop Recommendations for avoiding calling WMI through Python welcome. Calling scripts problematic if it turns out that they freeze.
Misc Design Notes
Local Storage
- UUIDs for volumes correspond to their file names on disk. Only this UUID is persisted on the Hyper-V Server
Secondary Storage
- Windows Server 2012 exposes share as NFS and SMB
Misc QA Notes
Unit tests
- Each test corresponds to one or more Command objects sent to a ServerResource
- No unit tests for server-side objects (Discoverer or HypervisorGuru)
- Tests written to work only on a Hyper-V 2012
Road Map
- Provide Windows Service for connected agent
- Windows Service is equivalent to Linux daemons.
- Integrate with Javelin storage model
- Add Hyper-V system VMs
- Make WMI access more robust.
- Access WMI directly from Plugin to avoid script maintenance.
- Support basic networking
- Support broader set of CloudStack commands
Background
Original Feature Spec