@startuml

'# Components
component "tacker-client" as client

frame "tacker-server" {
    component server {
        component "VNF Lifecycle\nManagement" as lcm
        component "VNF Package\nManagement" as vnfpkgm
    }
}

frame "tacker-conductor" {
    component "mgmt-driver" as mgmt {
        'component Noop as noop
        component OpenWRT as wrt
    }
    component "monitor-driver" as monitor {
        component Ping as ping
        component Zabbix as zabbix
    }
    component conductor {
        component "Conductor Server" as cond
        component "VNF Lifecycle Driver" as lcm_driver
    }
    component "infra-driver" as infra {
        component "OpenStack Driver" as os_driver
        component "Kubernetes Driver" as ks_driver
    }
}

database "tacker DB" as db {
    component "DB Interface" as db_if
    component "MariaDB" as maria
    db_if <-right-> maria
}

cloud "NFV infrastructures" {
    node "OpenStack" as os {
        node "VNF (VM)" as vm
    }
    node "Kubernetes" as ks {
        node "VNF (Container)" as container
    }
}

'# Relationships
client <-down-> lcm
client <-down-> vnfpkgm

lcm <-down-> db_if
vnfpkgm <-down-> db_if

lcm <-down-> cond
cond <-down-> lcm_driver
vnfpkgm <-down-> cond

cond <-down-> db_if
lcm_driver <-down-> db_if

lcm_driver <-down-> os_driver
os_driver <-down-> os
lcm_driver <-down-> ks_driver
ks_driver <-down-> ks

lcm_driver <-[hidden]down-> mgmt
lcm_driver <-[hidden]down-> monitor
'cond <-down-> mgmt
'cond <-down-> monitor
/'
'cond <-right-> noop
cond <-right-> wrt
wrt <-down-> vm
cond <-down-> ping
ping <-down-> vm
cond <-down-> zabbix
zabbix <-down-> vm
mgmt <-[hidden]down-> monitor
'/

@enduml