Groups
| Description | This REST API allows users to access various groups data in NEO | 
| Request URL | http://<NEO_SERVER_ADDRESS>/neo/resources/groups | 
| Main Operations | 
 | 
| Description | Get all available groups | 
| Request URL | GET /neo/resources/groups | 
| Request Data | N/A | 
Response:
One group:
            
            [{
		"groupType": "System",
		"elementName": "group1",
		"description": "",
		"instanceID": "group.group1 ",
		"hasSettings": false,
		"readOnly": false
	}
]
    
Multiple groups:
            
            [{
		"groupType": "System",
		"elementName": "group1",
		"description": "",
		"instanceID": "group.group1 ",
		"hasSettings": false,
		"readOnly": false
	}, {
		"groupType": "System",
		"elementName": "group2",
		"description": "",
		"instanceID": "group.group2",
		"hasSettings": false,
		"readOnly": false
	}
]
    
Result Data includes custom groups created by users & global groups that are a part of NEO by default.
| Description | Retrieves a specific set of groups | 
| Request URL | 
 | 
| Request Data | N/A | 
Response:
One group:
            
            {
	"elementName": "group1",
	"instanceID": "group.group1 ",
	"groupType": "System",
	"description": "",
	"hasSettings": false,
	"readOnly": false
}
    
Multiple groups:
            
            [{
		"elementName": "group1",
		"instanceID": "group.group1 ",
		"groupType": "System",
		"description": "",
		"hasSettings": false,
		"readOnly": false
	}, {
		"elementName": "group2",
		"instanceID": "group.group2 ",
		"groupType": "System",
		"description": "",
		"hasSettings": false,
		"readOnly": false
	}
]
    
| Description | This interface is used to add a group | 
| Request URL | POST /neo/resources/groups | 
| Request Data | { "elementName": "custom_group1", "description": "NEOcustom group", "groyp_type": "System" } | 
| Response | URI: /neo/resources/groups/custom_group1 | 
- Group should have a unique name as an identifier 
- Group description is optional 
| Description | Update an existing group | 
| Request URL | PUT /neo/resources/groups/<group_name> | 
| Request Data | {  | 
| Response | "" | 
| Description | Remove an existing group | 
| Request URL | DELETE /neo/resources/groups/<group_name> | 
| Request Data | N/A | 
| Response | Location header includes a URI with a Job ID for group deletion | 
| Status Codes | Note: Status code "202 ACCEPTED" means that an asynchronous job has been created and that the job ID has been returned into the location header | 
| Description | Add a member as members to custom groups | 
| Request URL | POST /neo/resources/groups/<group_name>/members | 
| Response | 
 | 
| Status Codes | Note: Status code "403 FORBIDDEN" could be due to the following: 
 | 
Request Data:
            
            [
	"<first_system_IP>.system",
	"<_second_system_IP>.system", …
]
    
Add System members
            
            [
	"10.0.0.1.system",
	"10.0.0.2.system"
]
    
Add network port members
            
            [
	"10.0.0.1.network_port.eth1.2",
	"10.0.0.2.network_port.eth1.3"
]
    
- Members can be added to a group of the same type only (a system member can be added to a system group, and network port members can be added to network port groups) 
- Any member can be added to multiple groups at the same time 
- A system can only be a member of one group for which access credentials are set 
| Description | Retrieve all systems that are members of the specified group | 
| Request URL | GET /neo/resources/groups/<group_name>/members | 
Request Data:
System members:
            
            [{
		"status": "Pending Reboot",
		"profile": "Eth Single Switch",
		"mlag": {
			"iplLag": "Po2",
			"name": "",
			"macAddress": "00:00:5E:00:01:00",
			"virtualIp": "192.168.1.1/24",
			…
		},
		"vendor": "Mellanox",
		"macAddress": "24:8A:07:81:B0:80",
		"swVersion": "X86_64 VERIFICATION_3.6.5961-41 2018-02-20 16:53:59 x86_64",
		"id": "10.209.36.162.system",
		"statusDescriptions": [
			"Pending Reboot Due to SW Upgrade"
		],
		"healthState": "OK",
		"name": "r-ufm-sw75",
		"sysType": "Mellanox Switch",
		"caption": "MLNX-OS",
		"model": "MSN2100",
		"ipAddress": "10.209.36.162",
		"isManagement": true
	}, {
		"status": "Communication OK",
		"profile": "Eth Single Switch",
		"mlag": null,
		"vendor": "Mellanox",
		"macAddress": "N/A",
		"swVersion": "X86_64 3.6.5000 2017-11-10 18:14:32 x86_64",
		"id": "10.209.36.161.system",
		"statusDescriptions": [],
		"healthState": "OK",
		"name": "r-ufm-sw74",
		"sysType": "Mellanox Switch",
		"caption": "MLNX-OS",
		"model": "MSN2100",
		"ipAddress": "10.209.36.161",
		"isManagement": true
	}
    
Network port members:
            
            [{
		"instanceID": "10.0.0.1.networkport.eth1.1"
	}, {
		"instanceID": "10.0.0.2.networkport.eth1.2"
	}
]
    
| Description | Used to retrieve systems and specify additional system properties (not just instanceID which is returned by default) from a specified custom group. | 
| Request URL | GET /neo/resources/groups/<group_name>/members?props=<list_of_properties> Where <list_of_properties> includes comma supported properties as they appear in NEO | 
| Request Data | N/A | 
| Response | [     {"id": "<system_IP>.system", "<property_1>": "prop_value", … } ] | 
| Example (specifying 2 system properties: status and name): GET /neo/resources/groups/<group_name>/members?props=status,name | 
Result:
            
            [{
		"instanceID": "10.0.0.1.system",
		"status": "OK",
		"name": "switch"
	}
]
    
The supported system properties are the ones that are returned from "Get Members in Group."
| Description | Remove members from a custom group. | 
| Request URL | DELETE /neo/resources/groups/<group_name>/members | 
| Response | N/A (No Content) | 
| Status Codes | Note: Status code "204 NO CONTENT" means that the system was removed from the group | 
Request Data:
System group:
            
            ["10.0.0.1. system", "10.0.0.2. system" ]
    
Network port group:
            
            [
	"10.0.0.1. network_port.eth1.1",
	"10.0.0.2. network_port.eth1.2"
]
    
Users can remove multiple members from one group at the same time by adding the member IDs as a list in the request body.
| Description | Remove all members from a custom group | 
| Request URL | DELETE /neo/resources/groups/<group_name>/members | 
| Request Data | N/A | 
| Response | N/A (No Content) | 
| Status Codes | Note: Status code "204 NO CONTENT" means that member was removed from the group | 
| Description | Used to retrieve groups by specifying a member ID that is a member of those groups | |
| Request URL | GET /neo/resources/groups?member=<member_IP> 
 | |
| Request Data | N/A | |
| Example | (system: 10.0.0.1; where system is a member of a group: test_group) GET /neo/resources/groups?member=10.0.0.1.system | |
| Result | [ | |
| Note: The result will contain a list of groups, since any member (system/port) can be a member of multiple groups at the same time. | ||
Response:
System member:
            
            [{
		"groupType":
		"System",
		"elementName": "group1",
		"description": "",
		"instanceID":
		"group.group1 ",
		"hasSettings": false,
		"readOnly": false
	}
]
    
Network port member:
            
            [{
		"groupType":
		"NetworkPort",
		"elementName":
		"group1",
		"description": "",
		"instanceID": "group.group1 ",
		"hasSettings": false,
		"readOnly": fals
	}
]
    
| Description | This API gets all available systems for all groups | |
| Request URL | GET neo/resources/groups/members/available | |
| Request Data | N/A | |
| peerIplIp | peerIplIp | The IP of the peer in the IPL | 
| peerMgmtIp | The management IP of the peer system | |
| iplLag | IPL LAG identifier | |
| localIplIp | The IP of the device in the IPL | |
| role | The role of the system in the MLAG Can be either master/standby | |
Response:
            
            [{
		"status": "Communication OK",
		"profile": "Eth Single Switch",
		"healthState": "OK",
		"mlag": {
			"peerIplIp": "10.10.10.2",
			"peerMgmtIp": "10.224.15.90",
			"iplLag": "",
			"macAddress": "00:00:5E:00:01:5D",
			"virtualIp": "10.10.10.254/24",
			"localIplIp": "10.10.10.1",
			"adminState": "Disabled",
			"role": "master",
			"vlanInterface": "4000",
			"operationalState": "Down",
			"id": "10.224.15.89.mlag.1",
			"name": ""
		},
		"vendor": "Mellanox",
		"name": "ufm-switch19",
		"ipAddress": "10.224.15.89",
		"swVersion": "X86_64 3.6.3130 2017-02-27 18:57:09 x86_64",
		"id": "10.224.15.89.system",
		"caption": "Mellanox Onyx",
		"model": "MSN2700",
		"sysType": "Mellanox Switch",
		"isManagement": true
	}, {
		"status": "Communication OK",
		"profile": "Eth Single Switch",
		"healthState": "OK",
		"mlag": null,
		"vendor": "Mellanox",
		"name": "ufm-switch20",
		"ipAddress": "10.224.15.90",
		"swVersion": "X86_64 3.6.1002 2016-06-09 20:24:31 x86_64",
		"id": "10.224.15.90.system",
		"caption": "Mellanox Onyx",
		"model": "MSN2700",
		"sysType": "Mellanox Switch",
		"isManagement": true
	}
]
    
| Description | Retrieves a set of group by type | 
| Request URL | 
 | 
| Request Data | N/A | 
Response:
System groups:
            
            [{
		"groupType": "System",
		"elementName": "systemGroup1",
		"description": "",
		"instanceID": "group.systemGroup1 ",
		"hasSettings": false,
		"readOnly": false
	}, {
		"groupType": "System",
		"elementName": "systemGroup2",
		"description": "",
		"instanceID": "group.systemGroup2",
		"hasSettings": false,
		"readOnly": false
	}
]
    
Network port groups:
            
            [{
		"groupType": "System",
		"elementName": "systemGroup1",
		"description": "",
		"instanceID": "group.systemGroup1 ",
		"hasSettings": false,
		"readOnly": false
	}, {
		"groupType": "System",
		"elementName": "systemGroup2",
		"description": "",
		"instanceID": "group.systemGroup2",
		"hasSettings": false,
		"readOnly": false
	}
]