135 lines
4.3 KiB
Markdown
135 lines
4.3 KiB
Markdown
# Conn
|
|
[](https://pypi.org/pypi/connpy/)
|
|
[](https://pypi.org/pypi/connpy/)
|
|
[](https://github.com/fluzzi/connpy/blob/main/LICENSE)
|
|
[](https://pypi.org/pypi/connpy/)
|
|
|
|
Connpy is a ssh and telnet connection manager and automation module
|
|
|
|
## Installation
|
|
|
|
pip install connpy
|
|
|
|
## Automation module usage
|
|
### Standalone module
|
|
```
|
|
import connpy
|
|
router = connpy.node("unique name","ip/hostname", user="username", password="password")
|
|
router.run(["term len 0","show run"])
|
|
print(router.output)
|
|
hasip = router.test("show ip int brief","1.1.1.1")
|
|
if hasip:
|
|
print("Router has ip 1.1.1.1")
|
|
else:
|
|
print("router does not have ip 1.1.1.1")
|
|
```
|
|
|
|
### Using manager configuration
|
|
```
|
|
import connpy
|
|
conf = connpy.configfile()
|
|
device = conf.getitem("router@office")
|
|
router = connpy.node("unique name", **device, config=conf)
|
|
result = router.run("show ip int brief")
|
|
print(result)
|
|
```
|
|
### Running parallel tasks on multiple devices
|
|
```
|
|
import connpy
|
|
conf = connpy.configfile()
|
|
#You can get the nodes from the config from a folder and fitlering in it
|
|
nodes = conf.getitem("@office", ["router1", "router2", "router3"])
|
|
#You can also get each node individually:
|
|
nodes = {}
|
|
nodes["router1"] = conf.getitem("router1@office")
|
|
nodes["router2"] = conf.getitem("router2@office")
|
|
nodes["router10"] = conf.getitem("router10@datacenter")
|
|
#Also, you can create the nodes manually:
|
|
nodes = {}
|
|
nodes["router1"] = {"host": "1.1.1.1", "user": "username", "password": "password1"}
|
|
nodes["router2"] = {"host": "1.1.1.2", "user": "username", "password": "password2"}
|
|
nodes["router3"] = {"host": "1.1.1.2", "user": "username", "password": "password3"}
|
|
#Finally you run some tasks on the nodes
|
|
mynodes = connpy.nodes(nodes, config = conf)
|
|
result = mynodes.test(["show ip int br"], "1.1.1.2")
|
|
for i in result:
|
|
print("---" + i + "---")
|
|
print(result[i])
|
|
print()
|
|
# Or for one specific node
|
|
mynodes.router1.run(["term len 0". "show run"], folder = "/home/user/logs")
|
|
```
|
|
|
|
## Connection manager
|
|
### Features
|
|
- You can generate profiles and reference them from nodes using @profilename
|
|
so you dont need to edit multiple nodes when changing password or other
|
|
information.
|
|
- Nodes can be stored on @folder or @subfolder@folder to organize your
|
|
devices. Then can be referenced using node@subfolder@folder or node@folder
|
|
- If you have too many nodes. Get completion script using: conn config
|
|
--completion, or use fzf installing pyfzf and running conn -f
|
|
- Much more!
|
|
|
|
### Usage:
|
|
```
|
|
usage: conn [-h] [--add | --del | --mod | --show | --debug] [node|folder]
|
|
conn {profile,move,mv,copy,cp,list,ls,bulk,config} ...
|
|
|
|
positional arguments:
|
|
node|folder node[@subfolder][@folder]
|
|
Connect to specific node or show all matching nodes
|
|
[@subfolder][@folder]
|
|
Show all available connections globaly or in specified path
|
|
```
|
|
|
|
### Options:
|
|
```
|
|
-h, --help show this help message and exit
|
|
-a, --add Add new node[@subfolder][@folder] or [@subfolder]@folder
|
|
-r, --del, --rm Delete node[@subfolder][@folder] or [@subfolder]@folder
|
|
-e, --mod, --edit Modify node[@subfolder][@folder]
|
|
-s, --show Show node[@subfolder][@folder]
|
|
-d, --debug Display all conections steps
|
|
-v, --version Show version
|
|
|
|
```
|
|
|
|
### Commands:
|
|
```
|
|
profile Manage profiles
|
|
move (mv) Move node
|
|
copy (cp) Copy node
|
|
list (ls) List profiles, nodes or folders
|
|
bulk Add nodes in bulk
|
|
config Manage app config
|
|
```
|
|
|
|
### Manage profiles:
|
|
```
|
|
usage: conn profile [-h] (--add | --del | --mod | --show) profile
|
|
|
|
positional arguments:
|
|
profile Name of profile to manage
|
|
|
|
options:
|
|
-h, --help show this help message and exit
|
|
-a, --add Add new profile
|
|
-r, --del, --rm Delete profile
|
|
-e, --mod, --edit Modify profile
|
|
-s, --show Show profile
|
|
|
|
```
|
|
|
|
### Examples:
|
|
```
|
|
conn profile --add office-user
|
|
conn --add @office
|
|
conn --add @datacenter@office
|
|
conn --add server@datacenter@office
|
|
conn --add pc@office
|
|
conn --show server@datacenter@office
|
|
conn pc@office
|
|
conn server
|
|
```
|