@startuml

'# Components
component "tacker-client" as client

frame "tacker-server" {
    component server {
        component "Vnfm" as vnfm
        component "Nfvo" as nfvo
    }
    component plugin {
        component "VNFMPlugin" as vnfm_plugin
        component "NFVOPlugin" as nfvo_plugin
        'cond <-down-> vnfm_plugin
    }
    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 "infra-driver" as infra {
        component "OpenStack Driver" as os_driver
        component "Kubernetes Driver" as ks_driver
    }
    component "vim-driver" as vim {
        component "OpenStack Driver" as os_vim
        component "Kubernetes Driver" as ks_vim
    }
    component "policy-action-driver" as policy {
        component "AutoHeal" as autoheal
        component "AutoScale" as autoscale
        component "Respawn" as respawn
        component "Log" as log
    }
}

frame "tacker-conductor" as cond {
    component conductor {
        component "Conductor Server"
    }
}

database "tacker DB" as db {
    component "NFVOPluginDb" as db_nfvo
    component "VNFMPluginDb" as db_vnfm
    component "MariaDB" as maria
    db_nfvo <-down-> maria
    db_vnfm <-down-> maria
}

cloud "NFV infrastructures" as nfv_infra {
    node "OpenStack" as os {
        node "VNF (VM)" as vm
    }
    node "Kubernetes" as ks {
        node "VNF (Container)" as container
    }
    'vm -[hidden]up- ks
}

'# Relationships
client <-down-> vnfm
client <-down-> nfvo

vnfm <-down-> vnfm_plugin
nfvo <-down-> nfvo_plugin

vnfm_plugin <-down-> db_vnfm
nfvo_plugin <-down-> db_nfvo

vnfm_plugin <-down-> os_driver
vnfm_plugin <-down-> ks_driver

vnfm_plugin <-down-> policy
vnfm_plugin <-down-> mgmt
vnfm_plugin <-down-> monitor
/'
vnfm_plugin <-down-> autoheal
vnfm_plugin <-down-> autoscale
vnfm_plugin <-down-> respawn
vnfm_plugin <-down-> log
vnfm_plugin <-down-> wrt
vnfm_plugin <-down-> ping
vnfm_plugin <-down-> zabbix
'/

nfvo_plugin <-down-> os_vim
nfvo_plugin <-down-> ks_vim

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

os_vim <-down-> os
ks_vim <-down-> ks

cond <-[hidden]left-> server
mgmt <-[hidden]down-> monitor
monitor <-[hidden]down-> nfv_infra

@enduml