Source code for easy_server._server

# 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.

"""
A single server including secrets.
"""

from __future__ import absolute_import, print_function

__all__ = ['Server']


[docs]class Server(object): """ A data object that represents a single server item from a server file, and optionally the corresponding secrets item from a vault file. Objects of this class are not created by the user, but are returned by methods of the :class:`~easy_server.ServerFile` class. Example for a server item in a server file: .. code-block:: yaml myserver1: # nickname of the server description: "my dev system 1" contact_name: "John Doe" access_via: "VPN to dev network" user_defined: # user-defined part stuff: morestuff Example for a corresponding secrets item in a vault file: .. code-block:: yaml myserver1: # nickname of the server host: "10.11.12.13" username: myuser1 password: mypass1 """ def __init__(self, nickname, server_dict, secrets_dict=None): """ Parameters: nickname (:term:`unicode string`): Nickname of the server. server_dict (dict): Dictionary with the properties of the server item from the server file, wherein optional properties omitted in the server file have been set to their default values. secrets_dict (dict): Dictionary with the properties of the secrets item from the vault file, or `None` if no vault file is specified in the server file or if the vault file does not contain a corresponding item. """ self._nickname = nickname self._description = server_dict['description'] self._contact_name = server_dict.get('contact_name', None) self._access_via = server_dict.get('access_via', None) self._user_defined = server_dict.get('user_defined', None) self._secrets = secrets_dict def __repr__(self): secrets = "{...}" if self._secrets else "None" return "Server(" \ "nickname={s._nickname!r}, " \ "description={s._description!r}, " \ "contact_name={s._contact_name!r}, " \ "access_via={s._access_via!r}, " \ "user_defined={s._user_defined!r}, " \ "secrets={secrets})". \ format(s=self, secrets=secrets) @property def nickname(self): """ :term:`unicode string`: Nickname of the server. """ return self._nickname @property def description(self): """ :term:`unicode string`: Short description of the server. This is the value of the ``description`` property of the server item in the server file. """ return self._description @property def contact_name(self): """ :term:`unicode string`: Name of technical contact for the server. This is the value of the ``contact_name`` property of the server item in the server file. It is optional and defaults to `None`. """ return self._contact_name @property def access_via(self): """ :term:`unicode string`: Short reminder on the network/firewall/proxy/vpn used to access the server. This is the value of the ``access_via`` property of the server item in the server file. It is optional and defaults to `None`. """ return self._access_via @property def user_defined(self): """ dict: Additional user-defined properties for the server. This is the value of the ``user_defined`` property of the server item in the server file. This value can have an arbitrary user-defined structure. It is optional and defaults to `None`. """ return self._user_defined @property def secrets(self): """ dict: Secrets defined in the vault file for the server, or `None` if no vault file is specified in the server file or if the vault file does not contain a corresponding item. """ return self._secrets