geofront.remote — Remote sets¶
Every remote set is represented as a mapping (which is immutable, or mutable) of alias str to Remote object e.g.:
{
'web-1': Remote('ubuntu', '192.168.0.5'),
'web-2': Remote('ubuntu', '192.168.0.6'),
'web-3': Remote('ubuntu', '192.168.0.7'),
'worker-1': Remote('ubuntu', '192.168.0.25'),
'worker-2': Remote('ubuntu', '192.168.0.26'),
'db-1': Remote('ubuntu', '192.168.0.50'),
'db-2': Remote('ubuntu', '192.168.0.51')
}
However, in the age of the cloud, you don’t have to manage the remote set since the most of cloud providers offer their API to list provisioned remote nodes.
This module provides CloudRemoteSet, a subtype of collections.abc.Mapping, that proxies to the list dynamically made by cloud providers.
- class geofront.remote.AuthorizedKeyList(sftp_client: paramiko.sftp_client.SFTPClient)¶
List-like abstraction for remote authorized_keys.
Note that the contents are all lazily evaluated, so in order to pretend heavy duplicate communications over SFTP use list() to eagerly evaluate e.g.:
lazy_list = AuthorizedKeyList(sftp_client) eager_list = list(lazy_list) # ... some modifications on eager_list ... lazy_list[:] = eager_list
Parameters: sftp_client (paramiko.sftp_client.SFTPClient) – the remote sftp connection to access authorized_keys
- class geofront.remote.CloudRemoteSet(driver: libcloud.compute.base.NodeDriver, user: str='ec2-user', port: numbers.Integral=22)¶
Libcloud-backed remote set. It supports more than 20 cloud providers through the efforts of Libcloud.
from geofront.remote import CloudRemoteSet from libcloud.compute.types import Provider from libcloud.compute.providers import get_driver driver_cls = get_driver(Provider.EC2_US_WEST) driver = driver_cls('access id', 'secret key') REMOTE_SET = CloudRemoteSet(driver)
Parameters: - driver (libcloud.compute.base.NodeDriver) – libcloud compute driver
- user (str) – the username to ssh. the default is 'ec2-user' which is the default user of amazon linux ami
- port (numbers.Integral) – the port number to ssh. the default is 22 which is the default ssh port
See also
- Compute — Libcloud
- The compute component of libcloud allows you to manage cloud and virtual servers offered by different providers, more than 20 in total.
- class geofront.remote.Remote(user: str, host: str, port: numbers.Integral=22)¶
Remote node to SSH.
Parameters: - user (str) – the username to ssh
- host (str) – the host to access
- port (numbers.Integral) – the port number to ssh. the default is 22 which is the default ssh port
- host = None¶
(Address) The hostname to access.
- port = None¶
(numbers.Integral) The port number to SSH.
Make an one-time authorization to the remote, and then revokes it when timeout reaches soon.
Parameters: - public_keys (collections.abc.Set) – the set of public keys (paramiko.pkey.PKey) to authorize
- master_key (paramiko.pkey.PKey) – the master key (not owner’s key)
- remote (Remote) – a remote to grant access permission
- timeout (datetime.timedelta) – the time an authorization keeps alive
Returns: the expiration time
Return type: