..
..
.. Licensed under the Apache License, Version 2.0 (the "License");
.. you may not use this file except in compliance with the License.
.. You may obtain a copy of the License at
..
..     http://www.apache.org/licenses/LICENSE-2.0
..
.. Unless required by applicable law or agreed to in writing, software
.. distributed under the License is distributed on an "AS IS" BASIS,
.. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
.. See the License for the specific language governing permissions and
.. limitations under the License.
..

.. _to-api-v2-servers:

***********
``servers``
***********

``GET``
=======
Retrieves properties of all servers across all CDNs.

:Auth. Required: Yes
:Roles Required: None
:Response Type:  Array

Request Structure
-----------------
.. table:: Request Query Parameters

	+------------+----------+-------------------------------------------------------------------------------------------------------------------+
	| Name       | Required | Description                                                                                                       |
	+============+==========+===================================================================================================================+
	| cachegroup | no       | Return only those servers within the :term:`Cache Group` that has this :ref:`cache-group-id`                      |
	+------------+----------+-------------------------------------------------------------------------------------------------------------------+
	| dsId       | no       | Return only those servers assigned to the :term:`Delivery Service` identified by this integral, unique identifier |
	+------------+----------+-------------------------------------------------------------------------------------------------------------------+
	| hostName   | no       | Return only those servers that have this (short) hostname                                                         |
	+------------+----------+-------------------------------------------------------------------------------------------------------------------+
	| id         | no       | Return only the server with this integral, unique identifier                                                      |
	+------------+----------+-------------------------------------------------------------------------------------------------------------------+
	| profileId  | no       | Return only those servers that are using the :term:`Profile` that has this :ref:`profile-id`                      |
	+------------+----------+-------------------------------------------------------------------------------------------------------------------+
	| status     | no       | Return only those servers with this status - see :ref:`health-proto`                                              |
	+------------+----------+-------------------------------------------------------------------------------------------------------------------+
	| type       | no       | Return only servers of this :term:`Type`                                                                          |
	+------------+----------+-------------------------------------------------------------------------------------------------------------------+
	| sortOrder  | no       | Changes the order of sorting. Either ascending (default or "asc") or descending ("desc")                          |
	+------------+----------+-------------------------------------------------------------------------------------------------------------------+
	| limit      | no       | Choose the maximum number of results to return                                                                    |
	+------------+----------+-------------------------------------------------------------------------------------------------------------------+
	| offset     | no       | The number of results to skip before beginning to return results. Must use in conjunction with limit              |
	+------------+----------+-------------------------------------------------------------------------------------------------------------------+
	| page       | no       | Return the n\ :sup:`th` page of results, where "n" is the value of this parameter, pages are ``limit`` long and   |
	|            |          | the first page is 1. If ``offset`` was defined, this query parameter has no effect. ``limit`` must be defined to  |
	|            |          | make use of ``page``.                                                                                             |
	+------------+----------+-------------------------------------------------------------------------------------------------------------------+

.. code-block:: http
	:caption: Request Example

	GET /api/2.0/servers?hostName=mid HTTP/1.1
	Host: trafficops.infra.ciab.test
	User-Agent: curl/7.47.0
	Accept: */*
	Cookie: mojolicious=...

Response Structure
------------------
:cachegroup:     A string that is the :ref:`name of the Cache Group <cache-group-name>` to which the server belongs
:cachegroupId:   An integer that is the :ref:`ID of the Cache Group <cache-group-id>` to which the server belongs
:cdnId:          The integral, unique identifier of the CDN to which the server belongs
:cdnName:        Name of the CDN to which the server belongs
:domainName:     The domain part of the server's :abbr:`FQDN (Fully Qualified Domain Name)`
:guid:           An identifier used to uniquely identify the server

	.. note:: This is a legacy key which only still exists for compatibility reasons - it should always be ``null``

:hostName:       The (short) hostname of the server
:httpsPort:      The port on which the server listens for incoming HTTPS connections/requests
:id:             An integral, unique identifier for this server
:iloIpAddress:   The IPv4 address of the server's :abbr:`ILO (Integrated Lights-Out)` service\ [1]_
:iloIpGateway:   The IPv4 gateway address of the server's :abbr:`ILO (Integrated Lights-Out)` service\ [1]_
:iloIpNetmask:   The IPv4 subnet mask of the server's :abbr:`ILO (Integrated Lights-Out)` service\ [1]_
:iloPassword:    The password of the of the server's :abbr:`ILO (Integrated Lights-Out)` service user\ [1]_ - displays as simply ``******`` if the currently logged-in user does not have the 'admin' or 'operations' :term:`Role(s) <Role>`
:iloUsername:    The user name for the server's :abbr:`ILO (Integrated Lights-Out)` service\ [1]_
:interfaceMtu:   The :abbr:`MTU (Maximum Transmission Unit)` configured on ``interfaceName``
:interfaceName:  The name of the primary network interface used by the server
:ip6Address:     The IPv6 address and subnet mask of ``interfaceName``
:ip6IsService:   A boolean value which if ``true`` indicates that the IPv6 address will be used for routing content.
:ip6Gateway:     The IPv6 address of the gateway used by ``interfaceName``
:ipAddress:      The IPv4 address of ``interfaceName``
:ipIsService:    A boolean value which if ``true`` indicates that the IPv4 address will be used for routing content.
:ipGateway:      The IPv4 address of the gateway used by ``interfaceName``
:ipNetmask:      The IPv4 subnet mask used by ``interfaceName``
:lastUpdated:    The date and time at which this server description was last modified
:mgmtIpAddress:  The IPv4 address of some network interface on the server used for 'management'
:mgmtIpGateway:  The IPv4 address of a gateway used by some network interface on the server used for 'management'
:mgmtIpNetmask:  The IPv4 subnet mask used by some network interface on the server used for 'management'
:offlineReason:  A user-entered reason why the server is in ADMIN_DOWN or OFFLINE status
:physLocation:   The name of the physical location where the server resides
:physLocationId: An integral, unique identifier for the physical location where the server resides
:profile:        The :ref:`profile-name` of the :term:`Profile` used by this server
:profileDesc:    A :ref:`profile-description` of the :term:`Profile` used by this server
:profileId:      The :ref:`profile-id` the :term:`Profile` used by this server
:revalPending:   A boolean value which, if ``true`` indicates that this server has pending content invalidation/revalidation
:rack:           A string indicating "server rack" location
:routerHostName: The human-readable name of the router responsible for reaching this server
:routerPortName: The human-readable name of the port used by the router responsible for reaching this server
:status:         The :term:`Status` of the server

	.. seealso:: :ref:`health-proto`

:statusId: The integral, unique identifier of the status of this server

	.. seealso:: :ref:`health-proto`

:tcpPort: The port on which this server listens for incoming TCP connections

	.. note:: This is typically thought of as synonymous with "HTTP port", as the port specified by ``httpsPort`` may also be used for incoming TCP connections.

:type:       The name of the :term:`Type` of this server
:typeId:     The integral, unique identifier of the 'type' of this server
:updPending: A boolean value which, if ``true``, indicates that the server has updates of some kind pending, typically to be acted upon by Traffic Ops ORT
:xmppId:     A system-generated UUID used to generate a server hashId for use in Traffic Router's consistent hashing algorithm. This value is set when a server is created and cannot be changed afterwards.
:xmppPasswd: The password used in XMPP communications with the server

.. code-block:: http
	:caption: Response Example

	HTTP/1.1 200 OK
	Access-Control-Allow-Credentials: true
	Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Set-Cookie, Cookie
	Access-Control-Allow-Methods: POST,GET,OPTIONS,PUT,DELETE
	Access-Control-Allow-Origin: *
	Content-Type: application/json
	Set-Cookie: mojolicious=...; Path=/; Expires=Mon, 18 Nov 2019 17:40:54 GMT; Max-Age=3600; HttpOnly
	Whole-Content-Sha512: WyapQctUIhjzEALka5QbBiZRZ58Mlc6MJSwjBeGyJS2UzbL3W6lN/4kvAZtPrP4qMWQBWz6JjbF7Y5lNRASUmQ==
	X-Server-Name: traffic_ops_golang/
	Date: Mon, 10 Dec 2018 16:13:31 GMT
	Content-Length: 939

	{ "response": [
		{
			"cachegroup": "CDN_in_a_Box_Mid",
			"cachegroupId": 6,
			"cdnId": 2,
			"cdnName": "CDN-in-a-Box",
			"domainName": "infra.ciab.test",
			"guid": null,
			"hostName": "mid",
			"httpsPort": 443,
			"id": 10,
			"iloIpAddress": "",
			"iloIpGateway": "",
			"iloIpNetmask": "",
			"iloPassword": "",
			"iloUsername": "",
			"interfaceMtu": 1500,
			"interfaceName": "eth0",
			"ip6Address": "fc01:9400:1000:8::120",
			"ip6Gateway": "fc01:9400:1000:8::1",
			"ipAddress": "172.16.239.120",
			"ipGateway": "172.16.239.1",
			"ipNetmask": "255.255.255.0",
			"lastUpdated": "2018-12-05 18:45:05+00",
			"mgmtIpAddress": "",
			"mgmtIpGateway": "",
			"mgmtIpNetmask": "",
			"offlineReason": "",
			"physLocation": "Apachecon North America 2018",
			"physLocationId": 1,
			"profile": "ATS_MID_TIER_CACHE",
			"profileDesc": "Mid Cache - Apache Traffic Server",
			"profileId": 10,
			"rack": "",
			"revalPending": false,
			"routerHostName": "",
			"routerPortName": "",
			"status": "REPORTED",
			"statusId": 3,
			"tcpPort": 80,
			"type": "MID",
			"typeId": 12,
			"updPending": false,
			"xmppId": "mid",
			"xmppPasswd": "",
			"ipIsService": true,
			"ip6IsService": true
		}
	]}

``POST``
========
Allows a user to create a new server.

:Auth. Required: Yes
:Roles Required: "admin" or "operations"
:Response Type:  Object

Request Structure
-----------------
:cachegroupId: An integer that is the :ref:`ID of the Cache Group <cache-group-id>` to which the server shall belong
:cdnId:        The integral, unique identifier of the CDN to which the server shall belong
:domainName:   The domain part of the server's :abbr:`FQDN (Fully Qualified Domain Name)`
:hostName:     The (short) hostname of the server
:httpsPort:    An optional port number on which the server listens for incoming HTTPS connections/requests
:iloIpAddress: An optional IPv4 address of the server's :abbr:`ILO (Integrated Lights-Out)` service\ [1]_
:iloIpGateway: An optional IPv4 gateway address of the server's :abbr:`ILO (Integrated Lights-Out)` service\ [1]_
:iloIpNetmask: An optional IPv4 subnet mask of the server's :abbr:`ILO (Integrated Lights-Out)` service\ [1]_
:iloPassword:  An optional string containing the password of the of the server's :abbr:`ILO (Integrated Lights-Out)` service user\ [1]_ - displays as simply ``******`` if the currently logged-in user does not have the 'admin' or 'operations' :term:`Role(s) <Role>`
:iloUsername:  An optional string containing the user name for the server's :abbr:`ILO (Integrated Lights-Out)` service\ [1]_
:interfaceMtu: The :abbr:`MTU (Maximum Transmission Unit)` configured on ``interfaceName``

	.. note:: In virtually all cases this ought to be 1500. Further note that the only acceptable values are 1500 and 9000.

:interfaceName:  The name of the primary network interface used by the server
:ip6Address:     An optional IPv6 address and subnet mask of ``interfaceName``
:ip6IsService:   An optional boolean value which if ``true`` indicates that the IPv6 address will be used for routing content.  Defaults to ``true``.
:ip6Gateway:     An optional IPv6 address of the gateway used by ``interfaceName``
:ipAddress:      The IPv4 address of ``interfaceName``
:ipIsService:    An optional boolean value which if ``true`` indicates that the IPv4 address will be used for routing content.  Defaults to ``true``.
:ipGateway:      The IPv4 address of the gateway used by ``interfaceName``
:ipNetmask:      The IPv4 subnet mask used by ``interfaceName``
:mgmtIpAddress:  An optional IPv4 address of some network interface on the server used for 'management'
:mgmtIpGateway:  An optional IPv4 address of a gateway used by some network interface on the server used for 'management'
:mgmtIpNetmask:  An optional IPv4 subnet mask used by some network interface on the server used for 'management'
:physLocationId: An integral, unique identifier for the physical location where the server resides
:profileId:      The :ref:`profile-id` the :term:`Profile` that shall be used by this server
:revalPending:   A boolean value which, if ``true`` indicates that this server has pending content invalidation/revalidation
:rack:           An optional string indicating "server rack" location
:routerHostName: An optional string containing the human-readable name of the router responsible for reaching this server
:routerPortName: An optional string containing the human-readable name of the port used by the router responsible for reaching this server
:statusId:       The integral, unique identifier of the status of this server

	.. seealso:: :ref:`health-proto`

:tcpPort: An optional port number on which this server listens for incoming TCP connections

	.. note:: This is typically thought of as synonymous with "HTTP port", as the port specified by ``httpsPort`` may also be used for incoming TCP connections.

:typeId:     The integral, unique identifier of the 'type' of this server
:updPending: A boolean value which, if ``true``, indicates that the server has updates of some kind pending, typically to be acted upon by Traffic Ops ORT
:xmppId:    A system-generated UUID used to generate a server hashId for use in Traffic Router's consistent hashing algorithm. This value is set when a server is created and cannot be changed afterwards.
:xmppPasswd: An optional password used in XMPP communications with the server

.. code-block:: http
	:caption: Request Example

	POST /api/2.0/servers HTTP/1.1
	Host: trafficops.infra.ciab.test
	User-Agent: curl/7.47.0
	Accept: */*
	Cookie: mojolicious=...
	Content-Length: 599
	Content-Type: application/json

	{
		"cachegroupId": 6,
		"cdnId": 2,
		"domainName": "infra.ciab.test",
		"hostName": "test",
		"httpsPort": 443,
		"iloIpAddress": "",
		"iloIpGateway": "",
		"iloIpNetmask": "",
		"iloPassword": "",
		"iloUsername": "",
		"interfaceMtu": 1500,
		"interfaceName": "eth0",
		"ip6Address": "::1",
		"ip6Gateway": "::2",
		"ipAddress": "0.0.0.1",
		"ipGateway": "0.0.0.2",
		"ipNetmask": "255.255.255.0",
		"mgmtIpAddress": "",
		"mgmtIpGateway": "",
		"mgmtIpNetmask": "",
		"offlineReason": "",
		"physLocationId": 1,
		"profileId": 10,
		"routerHostName": "",
		"routerPortName": "",
		"statusId": 3,
		"tcpPort": 80,
		"typeId": 12,
		"updPending": false,
		"ipIsService": true,
		"ip6IsService": true
	}

Response Structure
------------------
:cachegroup:     A string that is the :ref:`name of the Cache Group <cache-group-name>` to which the server belongs
:cachegroupId:   An integer that is the :ref:`ID of the Cache Group <cache-group-id>` to which the server belongs
:cdnId:          The integral, unique identifier of the CDN to which the server belongs
:cdnName:        Name of the CDN to which the server belongs
:domainName:     The domain part of the server's :abbr:`FQDN (Fully Qualified Domain Name)`
:guid:           An identifier used to uniquely identify the server

	.. note:: This is a legacy key which only still exists for compatibility reasons - it should always be ``null``

:hostName:       The (short) hostname of the server
:httpsPort:      The port on which the server listens for incoming HTTPS connections/requests
:id:             An integral, unique identifier for this server
:iloIpAddress:   The IPv4 address of the server's :abbr:`ILO (Integrated Lights-Out)` service\ [1]_
:iloIpGateway:   The IPv4 gateway address of the server's :abbr:`ILO (Integrated Lights-Out)` service\ [1]_
:iloIpNetmask:   The IPv4 subnet mask of the server's :abbr:`ILO (Integrated Lights-Out)` service\ [1]_
:iloPassword:    The password of the of the server's :abbr:`ILO (Integrated Lights-Out)` service user\ [1]_ - displays as simply ``******`` if the currently logged-in user does not have the 'admin' or 'operations' :abbr:`Role(s) <Role>`
:iloUsername:    The user name for the server's :abbr:`ILO (Integrated Lights-Out)` service\ [1]_
:interfaceMtu:   The :abbr:`MTU (Maximum Transmission Unit)` configured on ``interfaceName``
:interfaceName:  The name of the primary network interface used by the server
:ip6Address:     The IPv6 address and subnet mask of ``interfaceName``
:ip6IsService:   A boolean value which if ``true`` indicates that the IPv6 address will be used for routing content.
:ip6Gateway:     The IPv6 address of the gateway used by ``interfaceName``
:ipAddress:      The IPv4 address of ``interfaceName``
:ipIsService:   A boolean value which if ``true`` indicates that the IPv4 address will be used for routing content.
:ipGateway:      The IPv4 address of the gateway used by ``interfaceName``
:ipNetmask:      The IPv4 subnet mask used by ``interfaceName``
:lastUpdated:    The date and time at which this server description was last modified
:mgmtIpAddress:  The IPv4 address of some network interface on the server used for 'management'
:mgmtIpGateway:  The IPv4 address of a gateway used by some network interface on the server used for 'management'
:mgmtIpNetmask:  The IPv4 subnet mask used by some network interface on the server used for 'management'
:offlineReason:  A user-entered reason why the server is in ADMIN_DOWN or OFFLINE status
:physLocation:   The name of the :term:`Physical Location` where the server resides
:physLocationId: An integral, unique identifier for the :term:`Physical Location` where the server resides
:profile:        The :ref:`profile-name` of the :term:`Profile` used by this server
:profileDesc:    A :ref:`profile-description` of the :term:`Profile` used by this server
:profileId:      The :ref:`profile-id` the :term:`Profile` used by this server
:revalPending:   A boolean value which, if ``true`` indicates that this server has pending content invalidation/revalidation
:rack:           A string indicating "server rack" location
:routerHostName: The human-readable name of the router responsible for reaching this server
:routerPortName: The human-readable name of the port used by the router responsible for reaching this server
:status:         The status of the server

	.. seealso:: :ref:`health-proto`

:statusId: The integral, unique identifier of the status of this server

	.. seealso:: :ref:`health-proto`

:tcpPort: The port on which this server listens for incoming TCP connections

	.. note:: This is typically thought of as synonymous with "HTTP port", as the port specified by ``httpsPort`` may also be used for incoming TCP connections.

:type:       The name of the 'type' of this server
:typeId:     The integral, unique identifier of the 'type' of this server
:updPending: A boolean value which, if ``true``, indicates that the server has updates of some kind pending, typically to be acted upon by Traffic Ops ORT
:xmppId:     A system-generated UUID used to generate a server hashId for use in Traffic Router's consistent hashing algorithm. This value is set when a server is created and cannot be changed afterwards.
:xmppPasswd: The password used in XMPP communications with the server

.. code-block:: http
	:caption: Response Example

	HTTP/1.1 200 OK
	Access-Control-Allow-Credentials: true
	Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Set-Cookie, Cookie
	Access-Control-Allow-Methods: POST,GET,OPTIONS,PUT,DELETE
	Access-Control-Allow-Origin: *
	Content-Type: application/json
	Set-Cookie: mojolicious=...; Path=/; Expires=Mon, 18 Nov 2019 17:40:54 GMT; Max-Age=3600; HttpOnly
	Whole-Content-Sha512: mcGmmu5ONDg3jmvlkItcw6jxiT1ecmePYujZfmKiZrn5ThKjsSadeJIynaeOK0XVUjHuYHdtdynSqxr2rdzEyA==
	X-Server-Name: traffic_ops_golang/
	Date: Mon, 10 Dec 2018 17:44:04 GMT
	Content-Length: 850

	{ "alerts": [
		{
			"text": "server was created.",
			"level": "success"
		}
	],
	"response": {
		"cachegroup": null,
		"cachegroupId": 6,
		"cdnId": 2,
		"cdnName": null,
		"domainName": "infra.ciab.test",
		"guid": null,
		"hostName": "test",
		"httpsPort": 443,
		"id": 13,
		"iloIpAddress": "",
		"iloIpGateway": "",
		"iloIpNetmask": "",
		"iloPassword": "",
		"iloUsername": "",
		"interfaceMtu": 1500,
		"interfaceName": "eth0",
		"ip6Address": "::1",
		"ip6Gateway": "::2",
		"ipAddress": "0.0.0.1",
		"ipGateway": "0.0.0.2",
		"ipNetmask": "255.255.255.0",
		"lastUpdated": "2018-12-10 17:44:04+00",
		"mgmtIpAddress": "",
		"mgmtIpGateway": "",
		"mgmtIpNetmask": "",
		"offlineReason": "",
		"physLocation": null,
		"physLocationId": 1,
		"profile": null,
		"profileDesc": null,
		"profileId": 10,
		"rack": null,
		"revalPending": null,
		"routerHostName": "",
		"routerPortName": "",
		"status": null,
		"statusId": 3,
		"tcpPort": 80,
		"type": "",
		"typeId": 12,
		"updPending": false,
		"xmppId": "test",
		"xmppPasswd": null,
		"ipIsService": true,
		"ip6IsService": true
	}}

.. [1] For more information see the `Wikipedia page on Lights-Out management <https://en.wikipedia.org/wiki/Out-of-band_management>`_\ .
