@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 "vim-driver" as vim {
        component "OpenStack Driver" as os_vim
        component "Kubernetes Driver" as ks_vim
    }
}

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-> nfvo

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

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

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

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

cond <-[hidden]left-> server

@enduml