🎨

NW図 as Code(2) PlantUMLのport

2022/06/15に公開

PlantUMLの「port」を使う

PlantUMLの提供する図形には「port」、「portin」、「portout」というものがあります。portという名前が付くからにはネットワーク図のポート(ネットワークインターフェイス)を表現するのに使えるのでは?と思って試してみました。

https://plantuml.com/ja/component-diagram

いきなり結果から示します。

ダメじゃないんですが、しっくり来ないです。
なんでオブジェクトが縦長になるのかが分からなくて、高さ調整のパラメータがないか探してみたのですが、挫折しました。

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