summaryrefslogtreecommitdiff
path: root/doc/uml/hardware_install_activity_diagram.dot
blob: 446773f82d77350da1295c34be21347989352e21 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
// 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"];
    }
}