Device
Deviceサービスは、CLIプロキシやNETCONFプロキシの制御対象となるネットワーク機器やサーバのエンドポイントを管理する機能です。
Deviceには、単一の制御エンドポイント(simplex device)と複数の制御エンドポイント(complex device)を表現する2種類の概念があります。
Deviceの定義項目
属性 | 概要 | 備考 |
---|---|---|
alias |
Deviceをユニークに識別する名前を指定します。 | - |
class |
Deviceエンドポイントの種別を指定します。 | simplex とcomplex のいづれかを指定します。デフォルトは、simplex です。 |
host |
DeviceのIPアドレスを指定します。 | simplex の場合のみ指定する必要があります。 |
port |
Deviceの制御ポート番号を指定します。 | デフォルトは、23 TELNET ポートです。simplex の場合のみ指定する必要があります。 |
username |
Deviceを制御するユーザ名を指定します。 | simplex の場合のみ指定する必要があります。 |
password |
Deviceを制御するユーザのパスワードを指定します。 | simplex の場合のみ指定する必要があります。 |
secret |
Deviceを制御するユーザのシークレットパスワードを指定します。 | simplex の場合のみ指定する必要があります。 |
device |
Deviceの種別を指定します。 | サポートされている種別は、cisco_ios cisco_xe cisco_asa cisco_nxos cisco_xr arista_eos hp_procurve hp_comware juniper juniper_junos linux のいづれかです。simplex の場合のみ指定する必要があります。 |
options |
SSH等に関する各種パラメータを指定します。 | simplex の場合のみ指定することができます。CLIプロキシではnetmiko(https://github.com/ktbyers/netmiko) を使用しているため、これらのパラメータはnetmikoライブラリに指定されるパラメータです。 |
parameters |
Device固有のメタ情報を指定します。 | CLIプロキシのコマンドテンプレートやNETCONFプロキシのXMLテンプレートへのレンダリングに使用できます。 |
aliases |
包含するDeviceのalias を列挙します。 |
complex の場合のみ指定することができます。 |
role |
Deviceのロールを指定します。 | ロールには、CLIプロキシを紐付けすることができます。Deviceにロールを指定するとロールに関連付けられたCLIプロキシやNETCONFプロキシの呼び出し処理がDeviceのメソッドとして実装されます。Deviceロールについては、Docs » Lambda » Deviceロール を参考にしてください。 |
Note
options
のパラメータ、デフォルト設定は以下の通りです。
パラメータ | デフォルト |
---|---|
verbose | False |
global_delay_factor | 1 |
use_keys | False |
key_file | None |
ssh_strict | False |
system_host_keys | False |
alt_host_keys | False |
alt_key_file | None |
timeout | 20 |
Deviceロールの割付例
Docs » Lambda » CLIプロキシ
のチュートリアルで作成したCLIプロキシを使ってDeviceロールをDeviceに付与した場合の動作を見てみましょう。
最初にDeviceロールを作成します。
role: sampleRole
actions:
- southbound_api_path: /showVersion
tag: showVersion
- southbound_api_path: /config
tag: setInterface
作成したDeviceロールをDeviceに付与します。
alias: csr1000v
class: simplex
device: cisco_ios
host: 192.168.2.200
port: '22'
username: qmonus
password: qmonus
secret: qmonus
role: sampleRole
parameters: {}
ロールを付与したDeviceは、ロールに関連付けられたCLIプロキシをメソッドとして利用することができます。
>>> device = await Device.load("csr1000v")↵
... r = await device.showVersion()↵
... ↵
Connecting...
Done.
csr1000v#
show ver | inc (Cisco IOS XE Software, Version)
Cisco IOS XE Software, Version 03.15.00.S - Standard Support Release
csr1000v#
Qmonus> version = '03.15.00.S'
↵
disable
csr1000v>
Disconnecting...
Done.
>>> print(r.output.bindings.version)↵
... ↵
↵
03.15.00.S
>>> print(r.yaml_format)↵
... ↵
↵
code: 200
output:
bindings:
$alias: csr1000v
$host: 192.168.2.200
$password: qmonus
$port: '22'
$secret: qmonus
$username: qmonus
version: 03.15.00.S
message: null
responses:
- |-
show ver | inc (Cisco IOS XE Software, Version)
Cisco IOS XE Software, Version 03.15.00.S - Standard Support Release
csr1000v#
status: Complete
>>> r = await device.setInterface(iface="GigabitEthernet3", address="172.16.100.1", netmask="255.255.255.0")↵
... ↵
Connecting...
Done.
csr1000v#
config term
Enter configuration commands, one per line. End with CNTL/Z.
csr1000v(config)#
interface GigabitEthernet3
csr1000v(config-if)#
ip address 172.16.100.1 255.255.255.0
csr1000v(config-if)#
no shutdown
csr1000v(config-if)#
do show ip interface brief | inc GigabitEthernet3
GigabitEthernet3 172.16.100.1 YES manual up up
csr1000v(config-if)#
Qmonus> status = 'up'
↵
disable
csr1000v>
Disconnecting...
Done.
>>> print(r.yaml_format)↵
... ↵
↵
code: 200
output:
bindings:
$alias: csr1000v
$host: 192.168.2.200
$password: qmonus
$port: '22'
$secret: qmonus
$username: qmonus
address: 172.16.100.1
iface: GigabitEthernet3
netmask: 255.255.255.0
status: up
message: null
responses:
- |-
interface GigabitEthernet3
csr1000v(config-if)#
- |-
ip address 172.16.100.1 255.255.255.0
csr1000v(config-if)#
- |-
no shutdown
csr1000v(config-if)#
- "do show ip interface brief | inc GigabitEthernet3\nGigabitEthernet3 172.16.100.1\
\ YES manual up up \ncsr1000v(config-if)#"
status: Complete
>>>
Deviceロールの継承について
ロールの継承は、super_role
に上位のロールを指定することで実現できます。
最初に上位のロールを作成しましょう。
role: parentRole
actions:
- southbound_api_path: /showVersion
tag: showVersion
作成した上位のロールをsuper_role
に指定して子のロールを作成します。
role: childRole
super_role: parentRole
actions:
- southbound_api_path: /config
tag: setInterface
子のロールをDeviceに付与します。
alias: csr1000v
class: simplex
device: cisco_ios
host: 192.168.2.200
password: qmonus
port: '22'
role: childRole
secret: qmonus
username: qmonus
parameters: {}
ロールからDeviceに実装されたメソッドは、actions
プロパティで参照できます。
setInterface
は、childRoleから実装され、showVersion
は、parentRoleから継承実装されていることが確認できます。
>>> d = await Device.load("csr1000v")↵
... print(d.actions)↵
... ↵
↵
setInterface:
inherit: false
path: /config
schema: |
properties:
address:
anyOf:
- type: boolean
- type: 'null'
- type: number
- type: string
title: address
iface:
anyOf:
- type: boolean
- type: 'null'
- type: number
- type: string
title: iface
netmask:
anyOf:
- type: boolean
- type: 'null'
- type: number
- type: string
title: netmask
required:
- address
- iface
- netmask
type: object
showVersion:
inherit: true
path: /showVersion
schema: |
properties: {}
type: object
>>>