2. Melange
• mélange: noun, a mixture; medley.
• melange or mélange
• 1. a mixture; confusion
• 2. geology a totally disordered mixture of rocks of different shapes,
sizes, ages, and origins
3. History
• Spun out of NetStack work at Diablo summit
• Initial proposal to integrate directly into Nova
• Shifted to incubated project after Essex summit
• Merging into Quantum going forward
• API Doc: http://melange.readthedocs.org
4. Original Melange Blueprint
✓across OpenStack services. network information services for use
Melange is intended to provide
✓The initial focus will be on IP address management (IPAM)
- and address discovery (DHCP/dnsmasq) functionality.
✓Melange is intended to be a standalone service with it's own API.
NOTE: Melange is just a data store - it doesn’t DO anything!
5. Melange Elements
• IP Blocks
• IP Addresses
• Static Routes
• Interfaces
• NAT’ing
• Policies
• MAC address ranges
6. IP Blocks
• Public or private IP space tracking
• {
"ip_block": {
"broadcast": "10.1.1.255",
"cidr": "10.1.1.0/24",
"created_at": "2011-12-01T09:46:22",
"dns1": "8.8.8.8",
"dns2": "8.8.4.4",
"gateway": "10.1.1.1",
"id": "af19f87a-d6a9-4ce5-b30f-4cc9878ec292",
"netmask": "255.255.255.0",
"network_id": "quantum_net_id4",
"parent_id": null,
"policy_id": "2f730874-2088-4f91-87fb-63792c753971",
"tenant_id": "RAX",
"type": "private",
"updated_at": "2011-12-01T09:46:22"
}
}
9. Interface Creation
• Orchestrated creation of interface, MAC and IP assignment
• POST /ipam/interfaces/
• Creates a vif record, allocates a mac and optionally allocates ip address from a network
{
"interface": {
"id": "virt_iface",
"device_id": "instance",
"tenant_id": "tnt",
"network": {
"id": "net1",
"addresses": ["10.0.0.2"],
"tenant_id": "network_owner_tenant_id"
}
}
}
11. Instance Interfaces
• Batch interface for interface creation
• PUT /ipam/instances/{instance_id}/interfaces/
• Create interfaces, allocate macs and ips on all networks provided.
{
"instance": {
"tenant_id": "tnt",
"interfaces": [
{"network": {"id": "public_net1", "tenant_id": "RAX"}, "mac_address": null},
{"network": {"id": "public_net2", "tenant_id": "RAX"}, "mac_address": null},
]
}
}
12. NAT’ing
• Intended for tracking floating IPs or NAT relationships
• Globals - public IPs
• Locals - private IPs
• POST /ipam/ip_blocks/{ip_block_id}/ip_addresses/{address}/inside_globals
• Finds local IpAddress from given ip_block_id and address and creates IpAddresses passed in params as
its inside global.
• {‘ip_addresses’:’[ { “ip_block_id” : “some_global_ip_block_id”, “ip_address” : “some_global_ip_address” }, ..., {....} }
13. Policies
• Create policy (essentially a policy group)
• Create policy elements
• Unusable ranges
• Unusable octets
• Assign policy to block
15. MAC Address Ranges
• Ability to control the range of MAC addresses
melange --host <melangeIP> --port 9898 mac_address_range create
cidr=404040000000/24
mac_address_range:
cidr: 404040000000/24
created_at: '2012-01-25T17:21:46'
id: ad4e7f30-4e11-45b9-b204-c58d194fe5a9
updated_at: '2012-01-25T17:21:46'
16. Known Issues/Limitations
• Woefully behind on user/admin documentation (Sorry!)
• Early integration has focused around Quantum
• DHCP scenario has not been broadly tested (vs. injection)
• Needs more participation/input from broader community