🎨
NW図 as Code(2) PlantUMLのport
PlantUMLの「port」を使う
PlantUMLの提供する図形には「port」、「portin」、「portout」というものがあります。portという名前が付くからにはネットワーク図のポート(ネットワークインターフェイス)を表現するのに使えるのでは?と思って試してみました。
図
いきなり結果から示します。
ダメじゃないんですが、しっくり来ないです。
なんでオブジェクトが縦長になるのかが分からなくて、高さ調整のパラメータがないか探してみたのですが、挫折しました。
portinはオブジェクトの上側に■が付きます。
portoutはオブジェクトの下側に■が付きます。
portはportinと同じだと思います。
コード
@startuml
top to bottom direction
'left to right direction
skinparam ArrowThickness 3
skinparam ArrowColor Chocolate
skinparam rectangle {
BackgroundColor LemonChiffon
}
skinparam portout {
BackgroundColor PeachPuff
}
skinparam interface {
FontStyle bold
}
' ----------------------------------------
' nodes
rectangle router0 {
portin e0 as router0_e0
portout e2 as router0_e2
}
rectangle router1 {
portin e0 as router1_e0
portout e2 as router1_e2
}
rectangle firewall0 {
portout e0 as firewall0_e0
}
rectangle firewall1 {
portout e0 as firewall1_e0
}
rectangle lb0 {
portin e0 as lb0_e0
}
rectangle lb1 {
portin e0 as lb1_e0
}
rectangle l2sw0 {
portin e0 as l2sw0_e0
portin e1 as l2sw0_e1
portin e2 as l2sw0_e2
portout e3 as l2sw0_e3
portout e4 as l2sw0_e4
}
rectangle l2sw1 {
portin e0 as l2sw1_e0
portin e1 as l2sw1_e1
portin e2 as l2sw1_e2
portout e3 as l2sw1_e3
portout e4 as l2sw1_e4
}
rectangle l3sw0 {
portin e0 as l3sw0_e0
portin e1 as l3sw0_e1
portin e2 as l3sw0_e2
portin e3 as l3sw0_e3
portout e4 as l3sw0_e4
portout e5 as l3sw0_e5
}
rectangle l3sw1 {
portin e0 as l3sw1_e0
portin e1 as l3sw1_e1
portin e2 as l3sw1_e2
portin e3 as l3sw1_e3
portout e4 as l3sw1_e4
portout e5 as l3sw1_e5
}
rectangle host1 {
portin eth0 as host1_eth0
portin eth1 as host1_eth1
}
rectangle host2 {
portin eth0 as host2_eth0
portin eth1 as host2_eth1
}
' cables
router0_e0 - router1_e0
router0_e2 -- l3sw0_e2
router1_e2 -- l3sw1_e2
firewall0_e0 -- l3sw0_e3
firewall1_e0 -- l3sw1_e3
l3sw0_e4 -- lb0_e0
l3sw1_e4 -- lb1_e0
l3sw0_e5 -- l2sw0_e2
l3sw1_e5 -- l2sw1_e2
l3sw0_e0 - l3sw1_e0
l3sw0_e1 - l3sw1_e1
l2sw0_e0 - l2sw1_e0
l2sw0_e1 - l2sw1_e1
l2sw0_e3 -- host1_eth0
l2sw1_e3 -- host1_eth1
l2sw0_e4 -- host2_eth0
l2sw1_e4 -- host2_eth1
' interface align information
router0_e0 -[hidden] router0_e2
router1_e0 -[hidden] router1_e2
l2sw0_e0 -[hidden] l2sw0_e1
l2sw0_e1 -[hidden] l2sw0_e2
l2sw0_e2 -[hidden] l2sw0_e3
l2sw0_e3 -[hidden] l2sw0_e4
l2sw1_e0 -[hidden] l2sw1_e1
l2sw1_e1 -[hidden] l2sw1_e2
l2sw1_e2 -[hidden] l2sw1_e3
l2sw1_e3 -[hidden] l2sw1_e4
l3sw0_e0 -[hidden] l3sw0_e1
l3sw0_e1 -[hidden] l3sw0_e2
l3sw0_e2 -[hidden] l3sw0_e3
l3sw0_e3 -[hidden] l3sw0_e4
l3sw0_e4 -[hidden] l3sw0_e5
l3sw1_e0 -[hidden] l3sw1_e1
l3sw1_e1 -[hidden] l3sw1_e2
l3sw1_e2 -[hidden] l3sw1_e3
l3sw1_e3 -[hidden] l3sw1_e4
l3sw1_e4 -[hidden] l3sw1_e5
host1_eth0 -[hidden] host1_eth1
host2_eth0 -[hidden] host2_eth1
@enduml
Discussion