Overview
Target
Progress
Current source 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
...
- Hyper-V Server 2012
- Hyper-V 3.0
- WMI for VMM control
- No NFS client
...
Strategy
- Java-based Container executes on each Hyper-V
- Business Logic accesses WMI via scripts
- Use existing SystemVMs
- Run on surrogate XenServer cluster
Current Limits
- Business logic in ServerResource accesses WMI
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
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
Architecture
- Reuse KVM-style Agent Container
- Java-based agent executes on hypervisor
- Call out to WMI
- Use existing SystemVMs
- Local Primary Storage
- Secondary storage accessed as NFS/SMB via Windows Server 2012
- Free license Hyper-V Server 2012 has no NFS client
- Admin manually mounts secondary storage to appear as local folder
Design changes
Adopt Javelin Storage model
Agent model
- Cloudstack agent model.
- C# based agent which makes WMI calls for operations on the hypervisor.
- Agent accepts json requests and does the necessary operations on the hypervisor.
V2 WMI API
- 2012 R2 supports only root/virtualization/v2 namespace. WMI calls on the agent will use the same namespace.
- 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 folder
- NFS Secondary storage via Windows Server 2012 Windows Server 2012 exposes share as NFS and SMB
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
Test Plan
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)
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
- 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.
Road Map
- Tests written to work only on Hyper-V 2012
Scope
- Pure hyperv zone will be supported. No mixed zone.
- Support for SMB/CIFS as primary and secondary.
- VM Compute
- Start, stop, reboot, destroy
- Migrate - Live
- Service offerings. Scale up is allowed on stopped VM.
- Console access
- SSH keys, user data.
- Create VM from template
- Create VM from iso
- Attach, Detach ISO
- User provided internal name
- Storage
- Primary storage
- Shared Storage (SMB)
- Local Storage
- Root & data volumes – local and shared storage
- Add, delete, attach & detach volumes
- Secondary storage (SMB). Single secondary storage per zone.
- Network
- VLANs (isolated, shared, mgmt.)
- External device support? NS, F5, SRX, Juniper – both isolated and shared n/w
- All VR services supported: DNS, DHCP, LB, PF, StaticNAT, SourceNAT, NetworkACL, UserData, VPN
- Dedicate IP range, Public VLANs (to account)
- Restart (destroy/recreate) routers, system VMs, restart n/w – all cases
- Different n/w configurations:
- Storage in one NIC, Management in another, guest in another etc
- Management and guest in one, storage in another
- All in one network
- L4-L7 services in shared n/w
- Multiple IP range (restarts and DNS should pick up the specified ranges…)
- Persistent network
- Host tags
- Storage tags
- 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