// This is a graphviz file. To generate a diagram from this source, // you must first install graphviz (available from homebrew). Then run // the following command: // // dot -Tpng -o hardware_install_activity_diagram.png hardware_install_activity_diagram.dot digraph G { graph [fontsize = 14, penwidth = 0, rankdir = LR]; node [shape = "rect"]; edge [fontzize = 9, arrowhead = "empty"]; subgraph cluster_activity { label = "CaaS/PaaS Hardware Installation"; color = black; start_automation [shape = "circle", style = "filled", color = "grey", label = "Start\nautomation"]; start_server_install [shape = "circle", style = "filled", color = "grey", label = "Start\nphysical server\ninstallation"]; start_monitoring [shape = "circle", style = "filled", color = "grey", label = "Start\nmonitoring"]; end_monitoring_fail [shape = "doublecircle", style = "filled", color = "brown1", label = "Monitoring\nCRIT"]; start_firmware_upgrade [shape = "circle", style = "filled", color = "grey", label = "Schedule\nIntel NIC\nfirmware\nupgrade"]; start_wr_install [shape = "circle", style = "filled", color = "grey", label = "Schedule\nWind River\ninstallation"]; end_schedulewr_fail [shape = "doublecircle", style = "filled", color = "brown1", label = "Wind River\ninstallation\nfailed"]; end_schedulefirmware_fail [shape = "doublecircle", style = "filled", color = "brown1", label = "NIC\nfirmware\nupgrade\nfailed"]; start_orchestration [shape = "doublecircle", style = "filled", color = "grey", label = "Start\norchestration"]; subgraph cluster_hardwareinstall { label = "Install hardware"; penwidth = 1; color = "chocolate1"; subgraph cluster_dataimport { label = "Data import"; dataimport_password_import [label = "Import HP passwords"]; dataimport_ciq_import [label = "Import CIQ"]; dataimport_icinga_batch [label = "Icinga job is sent to ansible-queue"]; } subgraph cluster_serialnumber { label = "Link serial numbers/passwords to CIQ"; serialnumber_server_hostalive_p [shape = "diamond", label = "Server pingble\nfrom model_check?"]; serialnumber_collect_vendor [label = "Icinga passes vendor,\nserial number and\nBMC IP to middleware"]; serialnumber_link_blade [label = "Middleware links\nblade to server"]; } subgraph cluster_biosconfig { label = "Configure passwords, DNS, icinga and BIOS"; biosconfig_generate_password [label = "Middleware generates\nunique BMC passwords"]; biosconfig_bmc_batch [label = "BMC job is sent\nto ansible-queue"]; biosconfig_dns_batch [label = "DNS job is sent\nto ansible-queue"]; } } subgraph cluster_icingamonitoring { label = "Monitor hardware"; penwidth = 1; color = "deepskyblue"; subgraph cluster_macnic { label = "Collect BMC MAC and NIC firmware version"; macnic_bmc_push_pxe_mac [label = "BMC playbook pushes\nMAC address and\nNIC firmware version\nto middleware"]; macnic_icinga_monitoring [label = "icinga job is sent\nto ansible-queue"]; macnic_poll_monitoring [label = "icinga_poll job is sent\nto ansible-queue"]; } subgraph cluster_nicfirmware { label = "Intel NIC firmware version"; firmware_upgrade_p [shape = "diamond", label = "Is\nan Intel NIC\nfirmware upgrade\nneeded?"]; } } subgraph cluster_firmwarescheduler { label = "Intel NIC firmware upgrade"; penwidth = 1; color = "darkorchid1"; subgraph cluster_schedulefirmwareschedule { label = "Schedule"; schedulefirmwareschedule_schedule [label = "Schedule firmware\nupgrade"]; } subgraph cluster_schedulefirmwarerun { label = "Run"; schedulefirmwarerun_run [label = "firmware upgrade\njob is sent\nto ansible-queue"]; } subgraph cluster_schedulefirmwareresults { label = "Results"; schedulefirmwareresults_p [shape = "diamond", label = "Did firmware\ninstall successfully?"]; } } subgraph cluster_wrscheduler { label = "Schedule Wind River installation"; penwidth = 1; color = "darkolivegreen4"; subgraph cluster_schedulewrschedule { label = "Schedule"; schedulewrschedule_schedule [label = "Schedule Wind\nRiver install"]; } subgraph cluster_schedulewrrun { label = "Run"; schedulewrrun_run [label = "Wind River\ninstall job is sent\nto ansible-queue"]; } subgraph cluster_schedulewrresults { label = "Results"; schedulewrresults_p [shape = "diamond", label = "Did Wind River\ninstall successfully?"]; } subgraph cluster_schedulewrorchestration { label = "Orchestration"; schedulewrorchestration_orch [label = "Call\norchestration\nendpoint"]; } } subgraph cluster_ansiblequeue { label = "ansible-queue"; penwidth = 1; color = "yellow3"; subgraph cluster_icingaplaybook { label = "Icinga queue"; icingaplaybook_run [label = "Manage ansible host_vars\nand run playbook"]; } subgraph cluster_icingapollplaybook { label = "Icinga Poll queue"; icingapollplaybook_run [label = "Manage ansible host_vars\nand run playbook"]; icingapollplaybook_report [label = "Playbook informs\nmiddleware of result"]; } subgraph cluster_bmcplaybook { label = "BMC queue"; bmcplaybook_run_1 [label = "Manage ansible host_vars\nand run playbook"]; bmcplaybook_run_2 [label = "Manage ansible host_vars\nand run playbook"]; } subgraph cluster_dnsplaybook { label = "DNS queue"; dnsplaybook_run [label = "Manage ansible host_vars\nand run playbook"]; } subgraph cluster_firmwareplaybook { label = "NIC queue"; firmwareplaybook_run [label = "Manage ansible host_vars\nand run playbook"]; firmwareplaybook_report [label = "Playbook informs\nmiddleware of result"]; } subgraph cluster_wrplaybook { label = "Wind River queue"; wrplaybook_run [label = "Manage ansible host_vars\nand run playbook"]; wrplaybook_report [label = "Playbook informs\nmiddleware of result"]; } } subgraph cluster_legend { label = "Legend"; penwidth = 1; node [shape = "rect", style = "filled"]; legend_hardware [label = "Hardware", fillcolor = "chocolate1"]; legend_monitoring [label = "Monitoring", fillcolor = "deepskyblue"]; legend_firmware [label = "NIC firmware", fillcolor = "darkorchid1"]; legend_wr [label = "Wind River", fillcolor = "darkolivegreen4"]; legend_ansible [label = "ansible-queue", fillcolor = "yellow3"]; } start_automation -> dataimport_password_import [color = "chocolate1"]; dataimport_password_import -> dataimport_ciq_import [color = "chocolate1"]; dataimport_ciq_import -> dataimport_icinga_batch [color = "chocolate1"]; dataimport_icinga_batch -> icingaplaybook_run [color = "chocolate1"]; dataimport_icinga_batch -> serialnumber_server_hostalive_p [color = "chocolate1"]; start_server_install -> serialnumber_server_hostalive_p [color = "chocolate1"]; serialnumber_server_hostalive_p -> serialnumber_server_hostalive_p [color = "chocolate1", label = "No"]; serialnumber_server_hostalive_p -> serialnumber_collect_vendor [color = "chocolate1", label = "Yes"]; serialnumber_collect_vendor -> serialnumber_link_blade [color = "chocolate1"]; serialnumber_link_blade -> biosconfig_generate_password [color = "chocolate1"]; biosconfig_generate_password -> biosconfig_dns_batch [color = "chocolate1"]; biosconfig_generate_password -> biosconfig_bmc_batch [color = "chocolate1"]; schedulefirmwareschedule_schedule -> schedulefirmwarerun_run [color = "darkorchid1"]; schedulefirmwarerun_run -> firmwareplaybook_run [color = "darkorchid1"]; firmwareplaybook_run -> firmwareplaybook_report [color = "yellow3"]; firmwareplaybook_report -> schedulefirmwareresults_p [color = "darkorchid1"]; schedulefirmwareresults_p -> end_schedulefirmware_fail [color = "darkorchid1", label = "No"]; schedulefirmwareresults_p -> start_wr_install [color = "darkorchid1", label = "Yes"]; biosconfig_bmc_batch -> bmcplaybook_run_1 [color = "chocolate1"]; biosconfig_dns_batch -> dnsplaybook_run [color = "chocolate1"]; bmcplaybook_run_1 -> start_monitoring [color = "deepskyblue"]; start_monitoring -> macnic_bmc_push_pxe_mac [color = "deepskyblue"]; macnic_bmc_push_pxe_mac -> macnic_icinga_monitoring [color = "deepskyblue"]; macnic_bmc_push_pxe_mac -> macnic_poll_monitoring [color = "deepskyblue"]; macnic_icinga_monitoring -> icingaplaybook_run [color = "deepskyblue"]; macnic_poll_monitoring -> icingapollplaybook_run [color = "deepskyblue"]; icingapollplaybook_run -> icingapollplaybook_report [color = "yellow3"]; icingapollplaybook_report -> firmware_upgrade_p [color = "deepskyblue", label = "Cleared"]; icingapollplaybook_report -> end_monitoring_fail [color = "deepskyblue", label = "Not cleared"]; firmware_upgrade_p -> start_firmware_upgrade [color = "deepskyblue", label = "Yes"]; firmware_upgrade_p -> start_wr_install [color = "deepskyblue", label = "No"]; start_firmware_upgrade -> schedulefirmwareschedule_schedule [color = "darkorchid1"]; start_wr_install -> schedulewrschedule_schedule [color = "darkolivegreen4"]; schedulewrschedule_schedule -> schedulewrrun_run [color = "darkolivegreen4"]; schedulewrrun_run -> wrplaybook_run [color = "darkolivegreen4"]; wrplaybook_run -> wrplaybook_report [color = "yellow3"]; wrplaybook_report -> schedulewrresults_p [color = "darkolivegreen4"]; schedulewrresults_p -> end_schedulewr_fail [color = "darkolivegreen4", label = "No"]; schedulewrresults_p -> schedulewrorchestration_orch [color = "darkolivegreen4", label = "Yes"]; schedulewrorchestration_orch -> start_orchestration [color = "darkolivegreen4"]; } }