def apply_plan(**kwargs):
    """
    Applies a provisioning plan to the cluster

    Variables:
    None

    Arguments:
    None

    Data Block:
    {
        profiles: {},   # A dictionary of profiles where name of profile is the key
        flex_nodes: []  # A list machine mac addresses that will be used for flex
    }

    Result example:
    {"success": true}
    """
    data = request.json
    if not data:
        return make_api_response({}, "There are not profiles to apply", 400)

    profiles = data.get('profiles', {})
    flex_nodes = data.get("flex_nodes", [])

    # Save flex nodes
    for idx, mac in enumerate(flex_nodes):
        profile_id = "flex.%s" % idx
        STORAGE.save_profile(profile_id, {
            'services': {},
            'system_overrides': {},
            'virtual_machines': {}
        })
        node = STORAGE.get_node(mac)
        node['profile'] = profile_id
        STORAGE.save_node(mac, node)

    # Save profiles
    for profile_name, profile_data in profiles.iteritems():
        mac = profile_name.rsplit("-", 1)[1]
        STORAGE.save_profile(profile_name, profile_data)
        node = STORAGE.get_node(mac)
        node['profile'] = profile_name
        STORAGE.save_node(mac, node)

    return make_api_response({"success": True})
Exemple #2
0
def set_host(mac, *args, **kwargs):
    """
    Set the host information
    
    Variables: 
    mac       => MAC Address of the host to get the info
    
    Arguments:
    None
    
    Data Block:
    {
     "profile": "Default profile",  # Host current profile 
     "machine_info": {              # Host Machine info block
       "uid": "Core-001122334455",    # Machine UID
       "ip": "127.0.0.1",             # Machine IP
       "memory": "23.5",              # Machine RAM (GB)
       "cores": 16,                   # Machine Num Cores
       "os": "Linux",                 # Machine OS
       "name": "computer1" },         # Machine Name
     "ip": "127.0.0.1",             # Host IP
     "hostname": "computer1",       # Host Name
     "enabled": true,               # Is host enabled?
     "platform": {                  # Host platform block
       "node": "computer1",           # Node name
       "system": "Linux",             # Node system
       "machine": "x86_64",           # Node Architecture
       "version": "#47-Ubuntu SMP",   # Node Kernel version
       "release": "3.13.0-24",        # Node Kernel release
       "proc": "x86_64" },            # Node proc Architecture
     "mac_address": "001122334455"  # Host Mac address
    }
    
    Result example:
    {
     "status": "success"            # Was saving successful ?
    }
    """
    
    data = request.json
    
    if mac != data['mac_address']:
        raise AccessDeniedException("You are not allowed to change the host MAC Address.")
    
    return make_api_response(STORAGE.save_node(mac, data))