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ライブラリに指定されるパラメータです。
パラメータ | デフォルト |
---|---|
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 |
parameters
: Device固有のメタ情報を指定します。CLIプロキシのコマンドテンプレートやNETCONFプロキシのXMLテンプレートへのレンダリングに使用できます。
aliases
: 包含するDeviceのalias
を列挙します。complex
の場合のみ指定することができます。
role
: Deviceのロールを指定します。ロールには、CLIプロキシを紐付けすることができます。Deviceにロールを指定するとロールに関連付けられたCLIプロキシやNETCONFプロキシの呼び出し処理がDeviceのメソッドとして実装されます。Deviceロールについては、Docs » Lambda » Deviceロール
を参考にしてください。
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
>>>