PK œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/proxy/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : //proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/proxy/arista_pyeapi.py |
""" Arista pyeapi ============= .. versionadded:: 2019.2.0 Proxy module for managing Arista switches via the eAPI using the `pyeapi <http://pyeapi.readthedocs.io/en/master/index.html>`_ library. :codeauthor: Mircea Ulinic <ping@mirceaulinic.net> :maturity: new :depends: pyeapi :platform: unix .. note:: To understand how to correctly enable the eAPI on your switch, please check https://eos.arista.com/arista-eapi-101/. Dependencies ------------ The ``pyeapi`` Proxy module requires pyeapi to be installed: ``pip install pyeapi``. Pillar ------ The ``pyeapi`` proxy configuration requires the following parameters in order to connect to the network device: transport: ``https`` Specifies the type of connection transport to use. Valid values for the connection are ``socket``, ``http_local``, ``http``, and ``https``. host: ``localhost`` The IP address or DNS host name of the connection device. username: ``admin`` The username to pass to the device to authenticate the eAPI connection. password The password to pass to the device to authenticate the eAPI connection. port The TCP port of the endpoint for the eAPI connection. If this keyword is not specified, the default value is automatically determined by the transport type (``80`` for ``http``, or ``443`` for ``https``). enablepwd The enable mode password if required by the destination node. All the arguments may be optional, depending on your setup. Proxy Pillar Example -------------------- .. code-block:: yaml proxy: proxytype: pyeapi host: router1.example.com username: example password: example """ import logging # Import salt modules from salt.utils.args import clean_kwargs try: import pyeapi HAS_PYEAPI = True except ImportError: HAS_PYEAPI = False # ----------------------------------------------------------------------------- # proxy properties # ----------------------------------------------------------------------------- __proxyenabled__ = ["pyeapi"] # proxy name # ----------------------------------------------------------------------------- # globals # ----------------------------------------------------------------------------- __virtualname__ = "pyeapi" log = logging.getLogger(__name__) pyeapi_device = {} # ----------------------------------------------------------------------------- # property functions # ----------------------------------------------------------------------------- def __virtual__(): """ Proxy module available only if pyeapi is installed. """ if not HAS_PYEAPI: return ( False, "The pyeapi proxy module requires the pyeapi library to be installed.", ) return __virtualname__ # ----------------------------------------------------------------------------- # proxy functions # ----------------------------------------------------------------------------- def init(opts): """ Open the connection to the Arista switch over the eAPI. """ proxy_dict = opts.get("proxy", {}) conn_args = proxy_dict.copy() conn_args.pop("proxytype", None) opts["multiprocessing"] = conn_args.get("multiprocessing", True) # This is not a SSH-based proxy, so it should be safe to enable # multiprocessing. try: conn = pyeapi.client.connect(**conn_args) node = pyeapi.client.Node(conn, enablepwd=conn_args.get("enablepwd")) pyeapi_device["connection"] = node pyeapi_device["initialized"] = True pyeapi_device["up"] = True except pyeapi.eapilib.ConnectionError as cerr: log.error("Unable to connect to %s", conn_args["host"], exc_info=True) return False return True def ping(): """ Connection open successfully? """ return pyeapi_device.get("up", False) def initialized(): """ Connection finished initializing? """ return pyeapi_device.get("initialized", False) def shutdown(opts): """ Closes connection with the device. """ log.debug("Shutting down the pyeapi Proxy Minion %s", opts["id"]) # ----------------------------------------------------------------------------- # callable functions # ----------------------------------------------------------------------------- def conn(): """ Return the connection object. """ return pyeapi_device.get("connection") def call(method, *args, **kwargs): """ Calls an arbitrary pyeapi method. """ kwargs = clean_kwargs(**kwargs) return getattr(pyeapi_device["connection"], method)(*args, **kwargs)