1
0
mirror of https://github.com/openshift/installer.git synced 2026-02-05 06:46:36 +01:00

Merge pull request #10052 from zaneb/agent-systemd-diagrams

NO-ISSUE: Generate the agent systemd diagrams from the unit files
This commit is contained in:
openshift-merge-bot[bot]
2025-11-18 05:36:50 +00:00
committed by GitHub
14 changed files with 2200 additions and 4 deletions

View File

@@ -0,0 +1,7 @@
# Agent Installer Systemd Unit Files
When you modify systemd unit files in the `data/data/agent/systemd/units/` directory, and your changes affect the `[Unit]` section (which contains directives like `After`, `Before`, `PartOf`, etc. that define the relationships between systemd services), you must regenerate the agent installer service diagrams by running:
```bash
make -C docs/user/agent/diagrams/
```

View File

@@ -2,7 +2,7 @@
## Install workflow
![Install workflow](./agent_installer_services-install_workflow.png)
![Install workflow](./agent_installer_services-install_workflow.svg)
In the install workflow, all information needed to configure a cluster is included in the agent ISO.
When the agent ISO is booted, agent-tui and nmstate libraries are copied to the host from initrd. This copy
@@ -27,7 +27,7 @@ step is required because the agent-tui and nmstate libraries are too big to fit
## Add-nodes workflow
![Add-nodes workflow](./agent_installer_services-add_nodes_workflow.png)
![Add-nodes workflow](./agent_installer_services-add_nodes_workflow.svg)
The add-nodes workflow is used to generate an ISO image for adding one or more nodes to a target cluster. It is very similar to the install workflow, with
the following exceptions (highlighted in green in the previous picture):
@@ -41,7 +41,7 @@ the following exceptions (highlighted in green in the previous picture):
## Appliance workflow (unconfigured ignition and config image)
![Appliance workflow](./agent_installer_services-unconfigured_ignition_and_config_image_flow.png)
![Appliance workflow](./agent_installer_services-unconfigured_ignition_and_config_image_flow.svg)
In the appliance workflow, most of the cluster deployment information is included in a config image that is mounted
onto the host running the unconfigured-ignition. The appliance flow does not include the agent-tui or the
@@ -55,7 +55,7 @@ so no connectivity checks to the release image is needed.
## Interactive workflow (unconfigured ignition --interactive)
![Interactive workflow](./agent_installer_services-interactive.png)
![Interactive workflow](./agent_installer_services-interactive.svg)
The interactive workflow allows the user to install a cluster by using the assisted UI running on the rendezvous node. In this workflow
the agent-tui is also used interactively to configure which node will be the rendezvous host, and to configure accordingly the other nodes.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

View File

@@ -0,0 +1,349 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 12.2.1 (20241206.2353)
-->
<!-- Title: agent_installer_services_add_nodes_workflow Pages: 1 -->
<svg width="805pt" height="780pt"
viewBox="0.00 0.00 805.25 780.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 776)">
<title>agent_installer_services_add_nodes_workflow</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-776 801.25,-776 801.25,4 -4,4"/>
<g id="clust2" class="cluster">
<title>cluster_assisted_service_pod</title>
<polygon fill="none" stroke="#666666" stroke-dasharray="5,2" points="8,-352 8,-764 272,-764 272,-352 8,-352"/>
</g>
<!-- agent_auth_token_status -->
<g id="node1" class="node">
<title>agent_auth_token_status</title>
<path fill="#add8e6" stroke="#006400" stroke-width="2" d="M460.62,-252C460.62,-252 367.38,-252 367.38,-252 361.38,-252 355.38,-246 355.38,-240 355.38,-240 355.38,-228 355.38,-228 355.38,-222 361.38,-216 367.38,-216 367.38,-216 460.62,-216 460.62,-216 466.62,-216 472.62,-222 472.62,-228 472.62,-228 472.62,-240 472.62,-240 472.62,-246 466.62,-252 460.62,-252"/>
<text text-anchor="middle" x="414" y="-229.75" font-family="Arial" font-size="10.00" fill="#006400">agent&#45;auth&#45;token&#45;status</text>
</g>
<!-- iscsiadm -->
<g id="node2" class="node">
<title>iscsiadm</title>
<path fill="#add8e6" stroke="black" stroke-width="0.5" d="M673.5,-108C673.5,-108 642.5,-108 642.5,-108 636.5,-108 630.5,-102 630.5,-96 630.5,-96 630.5,-84 630.5,-84 630.5,-78 636.5,-72 642.5,-72 642.5,-72 673.5,-72 673.5,-72 679.5,-72 685.5,-78 685.5,-84 685.5,-84 685.5,-96 685.5,-96 685.5,-102 679.5,-108 673.5,-108"/>
<text text-anchor="middle" x="658" y="-85.75" font-family="Arial" font-size="10.00">iscsiadm</text>
</g>
<!-- iscsistart -->
<g id="node3" class="node">
<title>iscsistart</title>
<path fill="#add8e6" stroke="black" stroke-width="0.5" d="M674.25,-36C674.25,-36 641.75,-36 641.75,-36 635.75,-36 629.75,-30 629.75,-24 629.75,-24 629.75,-12 629.75,-12 629.75,-6 635.75,0 641.75,0 641.75,0 674.25,0 674.25,0 680.25,0 686.25,-6 686.25,-12 686.25,-12 686.25,-24 686.25,-24 686.25,-30 680.25,-36 674.25,-36"/>
<text text-anchor="middle" x="658" y="-13.75" font-family="Arial" font-size="10.00">iscsistart</text>
</g>
<!-- iscsistart&#45;&gt;iscsiadm -->
<g id="edge32" class="edge">
<title>iscsistart&#45;&gt;iscsiadm</title>
<path fill="none" stroke="#333333" d="M658,-35.95C658,-43.43 658,-52.42 658,-60.86"/>
<polygon fill="#333333" stroke="#333333" points="654.5,-60.7 658,-70.7 661.5,-60.7 654.5,-60.7"/>
</g>
<!-- pre_network_manager_config -->
<g id="node4" class="node">
<title>pre_network_manager_config</title>
<path fill="#add8e6" stroke="black" d="M506.38,-36C506.38,-36 393.62,-36 393.62,-36 387.62,-36 381.62,-30 381.62,-24 381.62,-24 381.62,-12 381.62,-12 381.62,-6 387.62,0 393.62,0 393.62,0 506.38,0 506.38,0 512.38,0 518.38,-6 518.38,-12 518.38,-12 518.38,-24 518.38,-24 518.38,-30 512.38,-36 506.38,-36"/>
<text text-anchor="middle" x="450" y="-13.75" font-family="Arial" font-size="10.00">pre&#45;network&#45;manager&#45;config</text>
</g>
<!-- set_hostname -->
<g id="node6" class="node">
<title>set_hostname</title>
<path fill="#add8e6" stroke="black" d="M599.25,-36C599.25,-36 548.75,-36 548.75,-36 542.75,-36 536.75,-30 536.75,-24 536.75,-24 536.75,-12 536.75,-12 536.75,-6 542.75,0 548.75,0 548.75,0 599.25,0 599.25,0 605.25,0 611.25,-6 611.25,-12 611.25,-12 611.25,-24 611.25,-24 611.25,-30 605.25,-36 599.25,-36"/>
<text text-anchor="middle" x="574" y="-13.75" font-family="Arial" font-size="10.00">set&#45;hostname</text>
</g>
<!-- pre_network_manager_config&#45;&gt;set_hostname -->
<!-- agent_interactive_console_serial -->
<g id="node10" class="node">
<title>agent_interactive_console_serial</title>
<path fill="#6495ed" stroke="black" stroke-width="2" d="M345.75,-180C345.75,-180 208.25,-180 208.25,-180 202.25,-180 196.25,-174 196.25,-168 196.25,-168 196.25,-156 196.25,-156 196.25,-150 202.25,-144 208.25,-144 208.25,-144 345.75,-144 345.75,-144 351.75,-144 357.75,-150 357.75,-156 357.75,-156 357.75,-168 357.75,-168 357.75,-174 351.75,-180 345.75,-180"/>
<text text-anchor="middle" x="277" y="-157.75" font-family="Arial" font-size="10.00">agent&#45;interactive&#45;console&#45;serial@</text>
</g>
<!-- pre_network_manager_config&#45;&gt;agent_interactive_console_serial -->
<g id="edge11" class="edge">
<title>pre_network_manager_config&#45;&gt;agent_interactive_console_serial</title>
<path fill="none" stroke="#333333" d="M428.79,-36.41C398.39,-61.36 342.28,-107.42 307.45,-136"/>
<polygon fill="#333333" stroke="#333333" points="305.34,-133.21 299.83,-142.26 309.78,-138.62 305.34,-133.21"/>
</g>
<!-- agent_interactive_console -->
<g id="node11" class="node">
<title>agent_interactive_console</title>
<path fill="#6495ed" stroke="black" stroke-width="2" d="M488,-180C488,-180 388,-180 388,-180 382,-180 376,-174 376,-168 376,-168 376,-156 376,-156 376,-150 382,-144 388,-144 388,-144 488,-144 488,-144 494,-144 500,-150 500,-156 500,-156 500,-168 500,-168 500,-174 494,-180 488,-180"/>
<text text-anchor="middle" x="438" y="-157.75" font-family="Arial" font-size="10.00">agent&#45;interactive&#45;console</text>
</g>
<!-- pre_network_manager_config&#45;&gt;agent_interactive_console -->
<g id="edge16" class="edge">
<title>pre_network_manager_config&#45;&gt;agent_interactive_console</title>
<path fill="none" stroke="#333333" d="M448.53,-36.41C446.51,-60.26 442.87,-103.39 440.44,-132.11"/>
<polygon fill="#333333" stroke="#333333" points="436.97,-131.68 439.61,-141.94 443.94,-132.27 436.97,-131.68"/>
</g>
<!-- selinux -->
<g id="node5" class="node">
<title>selinux</title>
<path fill="#add8e6" stroke="black" d="M352,-36C352,-36 322,-36 322,-36 316,-36 310,-30 310,-24 310,-24 310,-12 310,-12 310,-6 316,0 322,0 322,0 352,0 352,0 358,0 364,-6 364,-12 364,-12 364,-24 364,-24 364,-30 358,-36 352,-36"/>
<text text-anchor="middle" x="337" y="-13.75" font-family="Arial" font-size="10.00">selinux</text>
</g>
<!-- selinux&#45;&gt;pre_network_manager_config -->
<!-- selinux&#45;&gt;agent_interactive_console_serial -->
<g id="edge12" class="edge">
<title>selinux&#45;&gt;agent_interactive_console_serial</title>
<path fill="none" stroke="#333333" d="M309.69,-32.48C306.78,-33.74 303.85,-34.94 301,-36 245.22,-56.78 207.99,-24.59 172,-72 162.33,-84.74 163.61,-94.37 172,-108 179.76,-120.61 191.55,-130.33 204.46,-137.78"/>
<polygon fill="#333333" stroke="#333333" points="202.69,-140.8 213.17,-142.35 205.94,-134.6 202.69,-140.8"/>
</g>
<!-- selinux&#45;&gt;agent_interactive_console -->
<g id="edge17" class="edge">
<title>selinux&#45;&gt;agent_interactive_console</title>
<path fill="none" stroke="#333333" d="M349.38,-36.41C366.8,-60.9 398.68,-105.71 419.07,-134.39"/>
<polygon fill="#333333" stroke="#333333" points="415.99,-136.09 424.64,-142.21 421.69,-132.03 415.99,-136.09"/>
</g>
<!-- set_hostname&#45;&gt;iscsistart -->
<!-- set_hostname&#45;&gt;agent_interactive_console -->
<g id="edge33" class="edge">
<title>set_hostname&#45;&gt;agent_interactive_console</title>
<path fill="none" stroke="#333333" d="M557.32,-36.41C533.67,-61.11 490.2,-106.49 462.77,-135.14"/>
<polygon fill="#333333" stroke="#333333" points="460.25,-132.71 455.86,-142.35 465.3,-137.55 460.25,-132.71"/>
</g>
<!-- agent -->
<g id="node12" class="node">
<title>agent</title>
<path fill="#add8e6" stroke="black" d="M533,-252C533,-252 503,-252 503,-252 497,-252 491,-246 491,-240 491,-240 491,-228 491,-228 491,-222 497,-216 503,-216 503,-216 533,-216 533,-216 539,-216 545,-222 545,-228 545,-228 545,-240 545,-240 545,-246 539,-252 533,-252"/>
<text text-anchor="middle" x="518" y="-229.75" font-family="Arial" font-size="10.00">agent</text>
</g>
<!-- set_hostname&#45;&gt;agent -->
<g id="edge23" class="edge">
<title>set_hostname&#45;&gt;agent</title>
<path fill="none" stroke="#333333" d="M569.51,-36.15C559.89,-72.93 537.18,-159.71 525.39,-204.76"/>
<polygon fill="#333333" stroke="#333333" points="522.04,-203.74 522.89,-214.3 528.81,-205.52 522.04,-203.74"/>
</g>
<!-- _etc_assisted_node0 -->
<g id="node7" class="node">
<title>_etc_assisted_node0</title>
<polygon fill="#fffacd" stroke="black" points="426.75,-324 331.25,-324 331.25,-288 432.75,-288 432.75,-318 426.75,-324"/>
<polyline fill="none" stroke="black" points="426.75,-324 426.75,-318"/>
<polyline fill="none" stroke="black" points="432.75,-318 426.75,-318"/>
<text text-anchor="middle" x="382" y="-301.75" font-family="Arial" font-size="10.00">/etc/assisted/node0</text>
</g>
<!-- install_status -->
<g id="node13" class="node">
<title>install_status</title>
<path fill="#add8e6" stroke="black" d="M341.75,-468C341.75,-468 294.25,-468 294.25,-468 288.25,-468 282.25,-462 282.25,-456 282.25,-456 282.25,-444 282.25,-444 282.25,-438 288.25,-432 294.25,-432 294.25,-432 341.75,-432 341.75,-432 347.75,-432 353.75,-438 353.75,-444 353.75,-444 353.75,-456 353.75,-456 353.75,-462 347.75,-468 341.75,-468"/>
<text text-anchor="middle" x="318" y="-445.75" font-family="Arial" font-size="10.00">install&#45;status</text>
</g>
<!-- _etc_assisted_node0&#45;&gt;install_status -->
<g id="edge31" class="edge">
<title>_etc_assisted_node0&#45;&gt;install_status</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M374.15,-324.41C363.2,-348.71 343.23,-393.03 330.29,-421.73"/>
<polygon fill="#333333" stroke="#333333" points="327.25,-419.95 326.33,-430.51 333.63,-422.83 327.25,-419.95"/>
</g>
<!-- assisted_service_pod -->
<g id="node16" class="node">
<title>assisted_service_pod</title>
<path fill="#add8e6" stroke="black" d="M251.75,-396C251.75,-396 168.25,-396 168.25,-396 162.25,-396 156.25,-390 156.25,-384 156.25,-384 156.25,-372 156.25,-372 156.25,-366 162.25,-360 168.25,-360 168.25,-360 251.75,-360 251.75,-360 257.75,-360 263.75,-366 263.75,-372 263.75,-372 263.75,-384 263.75,-384 263.75,-390 257.75,-396 251.75,-396"/>
<text text-anchor="middle" x="210" y="-373.75" font-family="Arial" font-size="10.00">assisted&#45;service&#45;pod</text>
</g>
<!-- _etc_assisted_node0&#45;&gt;assisted_service_pod -->
<g id="edge29" class="edge">
<title>_etc_assisted_node0&#45;&gt;assisted_service_pod</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M339.04,-324.48C316.07,-333.83 287.58,-345.43 263.22,-355.34"/>
<polygon fill="#333333" stroke="#333333" points="262.05,-352.04 254.11,-359.05 264.69,-358.52 262.05,-352.04"/>
</g>
<!-- agent_add_node -->
<g id="node17" class="node">
<title>agent_add_node</title>
<path fill="#add8e6" stroke="#006400" stroke-width="2" d="M243,-756C243,-756 185,-756 185,-756 179,-756 173,-750 173,-744 173,-744 173,-732 173,-732 173,-726 179,-720 185,-720 185,-720 243,-720 243,-720 249,-720 255,-726 255,-732 255,-732 255,-744 255,-744 255,-750 249,-756 243,-756"/>
<text text-anchor="middle" x="214" y="-733.75" font-family="Arial" font-size="10.00" fill="#006400">agent&#45;add&#45;node</text>
</g>
<!-- _etc_assisted_node0&#45;&gt;agent_add_node -->
<g id="edge7" class="edge">
<title>_etc_assisted_node0&#45;&gt;agent_add_node</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M414.5,-324.46C426.11,-331.83 438.62,-341.22 448,-352 479.57,-388.29 496,-400.9 496,-449 496,-449 496,-449 496,-595 496,-696.33 348.96,-725.36 267.23,-733.67"/>
<polygon fill="#333333" stroke="#333333" points="267.05,-730.17 257.42,-734.59 267.7,-737.14 267.05,-730.17"/>
</g>
<!-- agent_import_cluster -->
<g id="node18" class="node">
<title>agent_import_cluster</title>
<path fill="#add8e6" stroke="#006400" stroke-width="2" d="M249.75,-540C249.75,-540 172.25,-540 172.25,-540 166.25,-540 160.25,-534 160.25,-528 160.25,-528 160.25,-516 160.25,-516 160.25,-510 166.25,-504 172.25,-504 172.25,-504 249.75,-504 249.75,-504 255.75,-504 261.75,-510 261.75,-516 261.75,-516 261.75,-528 261.75,-528 261.75,-534 255.75,-540 249.75,-540"/>
<text text-anchor="middle" x="211" y="-517.75" font-family="Arial" font-size="10.00" fill="#006400">agent&#45;import&#45;cluster</text>
</g>
<!-- _etc_assisted_node0&#45;&gt;agent_import_cluster -->
<g id="edge10" class="edge">
<title>_etc_assisted_node0&#45;&gt;agent_import_cluster</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M385.37,-324.25C390.6,-356.37 396.83,-425.86 363,-468 341.4,-494.9 305.29,-508.19 273.68,-514.73"/>
<polygon fill="#333333" stroke="#333333" points="273.4,-511.22 264.21,-516.49 274.68,-518.1 273.4,-511.22"/>
</g>
<!-- agent_register_infraenv -->
<g id="node19" class="node">
<title>agent_register_infraenv</title>
<path fill="#add8e6" stroke="black" d="M252,-612C252,-612 164,-612 164,-612 158,-612 152,-606 152,-600 152,-600 152,-588 152,-588 152,-582 158,-576 164,-576 164,-576 252,-576 252,-576 258,-576 264,-582 264,-588 264,-588 264,-600 264,-600 264,-606 258,-612 252,-612"/>
<text text-anchor="middle" x="208" y="-589.75" font-family="Arial" font-size="10.00">agent&#45;register&#45;infraenv</text>
</g>
<!-- _etc_assisted_node0&#45;&gt;agent_register_infraenv -->
<g id="edge22" class="edge">
<title>_etc_assisted_node0&#45;&gt;agent_register_infraenv</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M392.25,-324.32C396.47,-332.43 400.87,-342.4 403,-352 414.29,-402.87 415.22,-424.85 386,-468 354.25,-514.88 298.63,-549.73 257.99,-570.56"/>
<polygon fill="#333333" stroke="#333333" points="256.48,-567.4 249.1,-575 259.61,-573.66 256.48,-567.4"/>
</g>
<!-- apply_host_config -->
<g id="node20" class="node">
<title>apply_host_config</title>
<path fill="#add8e6" stroke="black" d="M246.38,-684C246.38,-684 181.62,-684 181.62,-684 175.62,-684 169.62,-678 169.62,-672 169.62,-672 169.62,-660 169.62,-660 169.62,-654 175.62,-648 181.62,-648 181.62,-648 246.38,-648 246.38,-648 252.38,-648 258.38,-654 258.38,-660 258.38,-660 258.38,-672 258.38,-672 258.38,-678 252.38,-684 246.38,-684"/>
<text text-anchor="middle" x="214" y="-661.75" font-family="Arial" font-size="10.00">apply&#45;host&#45;config</text>
</g>
<!-- _etc_assisted_node0&#45;&gt;apply_host_config -->
<g id="edge25" class="edge">
<title>_etc_assisted_node0&#45;&gt;apply_host_config</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M399.49,-324.27C406.85,-332.21 415.05,-342.06 421,-352 444.69,-391.59 458,-402.86 458,-449 458,-449 458,-449 458,-523 458,-609.53 341.94,-644.25 269.91,-657.46"/>
<polygon fill="#333333" stroke="#333333" points="269.5,-653.98 260.24,-659.14 270.7,-660.88 269.5,-653.98"/>
</g>
<!-- _usr_lib_dracut_hooks_pre_pivot_99_agent_copy_files_sh -->
<g id="node8" class="node">
<title>_usr_lib_dracut_hooks_pre_pivot_99_agent_copy_files_sh</title>
<polygon fill="#f5deb3" stroke="black" points="286.25,-36 181.75,-36 181.75,0 292.25,0 292.25,-30 286.25,-36"/>
<polyline fill="none" stroke="black" points="286.25,-36 286.25,-30"/>
<polyline fill="none" stroke="black" points="292.25,-30 286.25,-30"/>
<text text-anchor="middle" x="237" y="-13.75" font-family="Arial" font-size="10.00">99&#45;agent&#45;copy&#45;files.sh</text>
</g>
<!-- _usr_lib_dracut_hooks_pre_pivot_99_agent_copy_files_sh&#45;&gt;selinux -->
<!-- _usr_local_bin_agent_tui -->
<g id="node9" class="node">
<title>_usr_local_bin_agent_tui</title>
<polygon fill="#fffacd" stroke="black" points="286.62,-108 181.38,-108 181.38,-72 292.62,-72 292.62,-102 286.62,-108"/>
<polyline fill="none" stroke="black" points="286.62,-108 286.62,-102"/>
<polyline fill="none" stroke="black" points="292.62,-102 286.62,-102"/>
<text text-anchor="middle" x="237" y="-85.75" font-family="Arial" font-size="10.00">/usr/local/bin/agent&#45;tui</text>
</g>
<!-- _usr_lib_dracut_hooks_pre_pivot_99_agent_copy_files_sh&#45;&gt;_usr_local_bin_agent_tui -->
<g id="edge3" class="edge">
<title>_usr_lib_dracut_hooks_pre_pivot_99_agent_copy_files_sh&#45;&gt;_usr_local_bin_agent_tui</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M237,-36.3C237,-43.59 237,-52.27 237,-60.46"/>
<polygon fill="#333333" stroke="#333333" points="233.5,-60.38 237,-70.38 240.5,-60.38 233.5,-60.38"/>
</g>
<!-- _usr_local_bin_agent_tui&#45;&gt;agent_interactive_console_serial -->
<g id="edge15" class="edge">
<title>_usr_local_bin_agent_tui&#45;&gt;agent_interactive_console_serial</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M240.97,-108.3C244.57,-115.99 249.61,-125.21 254.85,-133.78"/>
<polygon fill="#333333" stroke="#333333" points="251.85,-135.59 260.19,-142.13 257.75,-131.82 251.85,-135.59"/>
</g>
<!-- _usr_local_bin_agent_tui&#45;&gt;agent_interactive_console -->
<g id="edge4" class="edge">
<title>_usr_local_bin_agent_tui&#45;&gt;agent_interactive_console</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M281.27,-108.48C307.24,-117.86 340.54,-129.5 369.78,-139.43"/>
<polygon fill="#333333" stroke="#333333" points="368.33,-142.63 378.92,-142.52 370.57,-136 368.33,-142.63"/>
</g>
<!-- agent_interactive_console_serial&#45;&gt;_usr_local_bin_agent_tui -->
<!-- agent_interactive_console_serial&#45;&gt;agent -->
<g id="edge13" class="edge">
<title>agent_interactive_console_serial&#45;&gt;agent</title>
<path fill="none" stroke="#333333" d="M358.39,-180.32C393.62,-188.69 435.34,-199.76 479.93,-215.57"/>
<polygon fill="#333333" stroke="#333333" points="478.69,-218.84 489.29,-218.95 481.07,-212.26 478.69,-218.84"/>
</g>
<!-- node_zero -->
<g id="node14" class="node">
<title>node_zero</title>
<path fill="#add8e6" stroke="#006400" stroke-width="2" d="M315.25,-252C315.25,-252 276.75,-252 276.75,-252 270.75,-252 264.75,-246 264.75,-240 264.75,-240 264.75,-228 264.75,-228 264.75,-222 270.75,-216 276.75,-216 276.75,-216 315.25,-216 315.25,-216 321.25,-216 327.25,-222 327.25,-228 327.25,-228 327.25,-240 327.25,-240 327.25,-246 321.25,-252 315.25,-252"/>
<text text-anchor="middle" x="296" y="-229.75" font-family="Arial" font-size="10.00" fill="#006400">node&#45;zero*</text>
</g>
<!-- agent_interactive_console_serial&#45;&gt;node_zero -->
<g id="edge14" class="edge">
<title>agent_interactive_console_serial&#45;&gt;node_zero</title>
<path fill="none" stroke="#333333" d="M281.79,-180.66C283.71,-187.74 285.98,-196.08 288.13,-204"/>
<polygon fill="#333333" stroke="#333333" points="284.75,-204.9 290.74,-213.64 291.5,-203.07 284.75,-204.9"/>
</g>
<!-- agent_interactive_console&#45;&gt;agent_auth_token_status -->
<g id="edge8" class="edge">
<title>agent_interactive_console&#45;&gt;agent_auth_token_status</title>
<path fill="none" stroke="#333333" d="M431.94,-180.66C429.49,-187.82 426.59,-196.27 423.85,-204.27"/>
<polygon fill="#333333" stroke="#333333" points="420.56,-203.07 420.63,-213.67 427.18,-205.34 420.56,-203.07"/>
</g>
<!-- agent_interactive_console&#45;&gt;_usr_local_bin_agent_tui -->
<!-- agent_interactive_console&#45;&gt;agent -->
<g id="edge18" class="edge">
<title>agent_interactive_console&#45;&gt;agent</title>
<path fill="none" stroke="#333333" d="M458.19,-180.66C467.73,-189.02 479.3,-199.13 489.7,-208.24"/>
<polygon fill="#333333" stroke="#333333" points="487.13,-210.64 496.96,-214.59 491.74,-205.37 487.13,-210.64"/>
</g>
<!-- agent_interactive_console&#45;&gt;node_zero -->
<g id="edge19" class="edge">
<title>agent_interactive_console&#45;&gt;node_zero</title>
<path fill="none" stroke="#333333" d="M401.8,-180.85C382.35,-190.43 358.26,-202.31 337.99,-212.3"/>
<polygon fill="#333333" stroke="#333333" points="336.56,-209.1 329.14,-216.66 339.66,-215.38 336.56,-209.1"/>
</g>
<!-- node_zero&#45;&gt;_etc_assisted_node0 -->
<g id="edge5" class="edge">
<title>node_zero&#45;&gt;_etc_assisted_node0</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M317.7,-252.66C328.07,-261.1 340.64,-271.34 351.91,-280.51"/>
<polygon fill="#333333" stroke="#333333" points="349.46,-283.03 359.43,-286.63 353.88,-277.6 349.46,-283.03"/>
</g>
<!-- node_zero&#45;&gt;assisted_service_pod -->
<g id="edge27" class="edge">
<title>node_zero&#45;&gt;assisted_service_pod</title>
<path fill="none" stroke="#333333" d="M285.11,-252.98C270.29,-277.44 243.67,-321.41 226.42,-349.88"/>
<polygon fill="#333333" stroke="#333333" points="223.51,-347.94 221.32,-358.31 229.49,-351.57 223.51,-347.94"/>
</g>
<!-- oci_eval_user_data -->
<g id="node15" class="node">
<title>oci_eval_user_data</title>
<path fill="#add8e6" stroke="black" stroke-width="0.5" d="M785.25,-36C785.25,-36 716.75,-36 716.75,-36 710.75,-36 704.75,-30 704.75,-24 704.75,-24 704.75,-12 704.75,-12 704.75,-6 710.75,0 716.75,0 716.75,0 785.25,0 785.25,0 791.25,0 797.25,-6 797.25,-12 797.25,-12 797.25,-24 797.25,-24 797.25,-30 791.25,-36 785.25,-36"/>
<text text-anchor="middle" x="751" y="-13.75" font-family="Arial" font-size="10.00">oci&#45;eval&#45;user&#45;data</text>
</g>
<!-- assisted_service_pod&#45;&gt;install_status -->
<g id="edge30" class="edge">
<title>assisted_service_pod&#45;&gt;install_status</title>
<path fill="none" stroke="#333333" d="M236.97,-396.48C250.61,-405.32 267.34,-416.16 282.05,-425.7"/>
<polygon fill="#333333" stroke="#333333" points="279.8,-428.41 290.1,-430.92 283.61,-422.54 279.8,-428.41"/>
</g>
<!-- assisted_service_pod&#45;&gt;agent_add_node -->
<!-- assisted_service_pod&#45;&gt;agent_import_cluster -->
<!-- assisted_service_db -->
<g id="node21" class="node">
<title>assisted_service_db</title>
<path fill="#add8e6" stroke="black" d="M232.12,-468C232.12,-468 153.88,-468 153.88,-468 147.88,-468 141.88,-462 141.88,-456 141.88,-456 141.88,-444 141.88,-444 141.88,-438 147.88,-432 153.88,-432 153.88,-432 232.12,-432 232.12,-432 238.12,-432 244.12,-438 244.12,-444 244.12,-444 244.12,-456 244.12,-456 244.12,-462 238.12,-468 232.12,-468"/>
<text text-anchor="middle" x="193" y="-445.75" font-family="Arial" font-size="10.00">assisted&#45;service&#45;db</text>
</g>
<!-- assisted_service_pod&#45;&gt;assisted_service_db -->
<g id="edge26" class="edge">
<title>assisted_service_pod&#45;&gt;assisted_service_db</title>
<path fill="none" stroke="#333333" d="M205.8,-396.3C204.01,-403.68 201.87,-412.48 199.86,-420.75"/>
<polygon fill="#333333" stroke="#333333" points="196.47,-419.88 197.51,-430.42 203.27,-421.53 196.47,-419.88"/>
</g>
<!-- assisted_service -->
<g id="node22" class="node">
<title>assisted_service</title>
<path fill="#add8e6" stroke="black" d="M112,-468C112,-468 48,-468 48,-468 42,-468 36,-462 36,-456 36,-456 36,-444 36,-444 36,-438 42,-432 48,-432 48,-432 112,-432 112,-432 118,-432 124,-438 124,-444 124,-444 124,-456 124,-456 124,-462 118,-468 112,-468"/>
<text text-anchor="middle" x="80" y="-445.75" font-family="Arial" font-size="10.00">assisted&#45;service</text>
</g>
<!-- assisted_service_pod&#45;&gt;assisted_service -->
<g id="edge28" class="edge">
<title>assisted_service_pod&#45;&gt;assisted_service</title>
<path fill="none" stroke="#333333" d="M177.53,-396.48C160.73,-405.53 140.02,-416.68 122.02,-426.38"/>
<polygon fill="#333333" stroke="#333333" points="120.53,-423.2 113.39,-431.02 123.85,-429.36 120.53,-423.2"/>
</g>
<!-- agent_import_cluster&#45;&gt;agent_register_infraenv -->
<g id="edge21" class="edge">
<title>agent_import_cluster&#45;&gt;agent_register_infraenv</title>
<path fill="none" stroke="#333333" d="M210.24,-540.66C209.94,-547.76 209.58,-556.14 209.24,-564.08"/>
<polygon fill="#333333" stroke="#333333" points="205.74,-563.93 208.81,-574.07 212.74,-564.23 205.74,-563.93"/>
</g>
<!-- agent_register_infraenv&#45;&gt;apply_host_config -->
<g id="edge24" class="edge">
<title>agent_register_infraenv&#45;&gt;apply_host_config</title>
<path fill="none" stroke="#333333" d="M209.48,-612.3C210.11,-619.59 210.85,-628.27 211.55,-636.46"/>
<polygon fill="#333333" stroke="#333333" points="208.06,-636.72 212.4,-646.39 215.04,-636.13 208.06,-636.72"/>
</g>
<!-- apply_host_config&#45;&gt;agent_add_node -->
<g id="edge6" class="edge">
<title>apply_host_config&#45;&gt;agent_add_node</title>
<path fill="none" stroke="#333333" d="M214,-684.3C214,-691.48 214,-700.01 214,-708.1"/>
<polygon fill="#333333" stroke="#333333" points="210.5,-707.9 214,-717.9 217.5,-707.9 210.5,-707.9"/>
</g>
<!-- assisted_service&#45;&gt;agent_import_cluster -->
<g id="edge9" class="edge">
<title>assisted_service&#45;&gt;agent_import_cluster</title>
<path fill="none" stroke="#333333" d="M112.72,-468.48C129.19,-477.28 149.39,-488.08 167.18,-497.58"/>
<polygon fill="#333333" stroke="#333333" points="165.53,-500.67 176,-502.3 168.83,-494.5 165.53,-500.67"/>
</g>
<!-- assisted_service&#45;&gt;agent_register_infraenv -->
<g id="edge20" class="edge">
<title>assisted_service&#45;&gt;agent_register_infraenv</title>
<path fill="none" stroke="#333333" d="M92.63,-468.35C106.3,-486.75 129.1,-516.37 151,-540 159.86,-549.56 170.14,-559.44 179.51,-568.04"/>
<polygon fill="#333333" stroke="#333333" points="176.9,-570.41 186.66,-574.52 181.6,-565.22 176.9,-570.41"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

View File

@@ -0,0 +1,337 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 12.2.1 (20241206.2353)
-->
<!-- Title: agent_installer_services_install_workflow Pages: 1 -->
<svg width="760pt" height="780pt"
viewBox="0.00 0.00 760.25 780.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 776)">
<title>agent_installer_services_install_workflow</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-776 756.25,-776 756.25,4 -4,4"/>
<g id="clust2" class="cluster">
<title>cluster_assisted_service_pod</title>
<polygon fill="none" stroke="#666666" stroke-dasharray="5,2" points="20,-352 20,-764 284,-764 284,-352 20,-352"/>
</g>
<!-- iscsiadm -->
<g id="node1" class="node">
<title>iscsiadm</title>
<path fill="#add8e6" stroke="black" stroke-width="0.5" d="M628.5,-108C628.5,-108 597.5,-108 597.5,-108 591.5,-108 585.5,-102 585.5,-96 585.5,-96 585.5,-84 585.5,-84 585.5,-78 591.5,-72 597.5,-72 597.5,-72 628.5,-72 628.5,-72 634.5,-72 640.5,-78 640.5,-84 640.5,-84 640.5,-96 640.5,-96 640.5,-102 634.5,-108 628.5,-108"/>
<text text-anchor="middle" x="613" y="-85.75" font-family="Arial" font-size="10.00">iscsiadm</text>
</g>
<!-- iscsistart -->
<g id="node2" class="node">
<title>iscsistart</title>
<path fill="#add8e6" stroke="black" stroke-width="0.5" d="M629.25,-36C629.25,-36 596.75,-36 596.75,-36 590.75,-36 584.75,-30 584.75,-24 584.75,-24 584.75,-12 584.75,-12 584.75,-6 590.75,0 596.75,0 596.75,0 629.25,0 629.25,0 635.25,0 641.25,-6 641.25,-12 641.25,-12 641.25,-24 641.25,-24 641.25,-30 635.25,-36 629.25,-36"/>
<text text-anchor="middle" x="613" y="-13.75" font-family="Arial" font-size="10.00">iscsistart</text>
</g>
<!-- iscsistart&#45;&gt;iscsiadm -->
<g id="edge29" class="edge">
<title>iscsistart&#45;&gt;iscsiadm</title>
<path fill="none" stroke="#333333" d="M613,-35.95C613,-43.43 613,-52.42 613,-60.86"/>
<polygon fill="#333333" stroke="#333333" points="609.5,-60.7 613,-70.7 616.5,-60.7 609.5,-60.7"/>
</g>
<!-- pre_network_manager_config -->
<g id="node3" class="node">
<title>pre_network_manager_config</title>
<path fill="#add8e6" stroke="black" d="M461.38,-36C461.38,-36 348.62,-36 348.62,-36 342.62,-36 336.62,-30 336.62,-24 336.62,-24 336.62,-12 336.62,-12 336.62,-6 342.62,0 348.62,0 348.62,0 461.38,0 461.38,0 467.38,0 473.38,-6 473.38,-12 473.38,-12 473.38,-24 473.38,-24 473.38,-30 467.38,-36 461.38,-36"/>
<text text-anchor="middle" x="405" y="-13.75" font-family="Arial" font-size="10.00">pre&#45;network&#45;manager&#45;config</text>
</g>
<!-- set_hostname -->
<g id="node5" class="node">
<title>set_hostname</title>
<path fill="#add8e6" stroke="black" d="M554.25,-36C554.25,-36 503.75,-36 503.75,-36 497.75,-36 491.75,-30 491.75,-24 491.75,-24 491.75,-12 491.75,-12 491.75,-6 497.75,0 503.75,0 503.75,0 554.25,0 554.25,0 560.25,0 566.25,-6 566.25,-12 566.25,-12 566.25,-24 566.25,-24 566.25,-30 560.25,-36 554.25,-36"/>
<text text-anchor="middle" x="529" y="-13.75" font-family="Arial" font-size="10.00">set&#45;hostname</text>
</g>
<!-- pre_network_manager_config&#45;&gt;set_hostname -->
<!-- agent_interactive_console_serial -->
<g id="node9" class="node">
<title>agent_interactive_console_serial</title>
<path fill="#6495ed" stroke="black" stroke-width="2" d="M300.75,-180C300.75,-180 163.25,-180 163.25,-180 157.25,-180 151.25,-174 151.25,-168 151.25,-168 151.25,-156 151.25,-156 151.25,-150 157.25,-144 163.25,-144 163.25,-144 300.75,-144 300.75,-144 306.75,-144 312.75,-150 312.75,-156 312.75,-156 312.75,-168 312.75,-168 312.75,-174 306.75,-180 300.75,-180"/>
<text text-anchor="middle" x="232" y="-157.75" font-family="Arial" font-size="10.00">agent&#45;interactive&#45;console&#45;serial@</text>
</g>
<!-- pre_network_manager_config&#45;&gt;agent_interactive_console_serial -->
<g id="edge6" class="edge">
<title>pre_network_manager_config&#45;&gt;agent_interactive_console_serial</title>
<path fill="none" stroke="#333333" d="M383.79,-36.41C353.39,-61.36 297.28,-107.42 262.45,-136"/>
<polygon fill="#333333" stroke="#333333" points="260.34,-133.21 254.83,-142.26 264.78,-138.62 260.34,-133.21"/>
</g>
<!-- agent_interactive_console -->
<g id="node10" class="node">
<title>agent_interactive_console</title>
<path fill="#6495ed" stroke="black" stroke-width="2" d="M443,-180C443,-180 343,-180 343,-180 337,-180 331,-174 331,-168 331,-168 331,-156 331,-156 331,-150 337,-144 343,-144 343,-144 443,-144 443,-144 449,-144 455,-150 455,-156 455,-156 455,-168 455,-168 455,-174 449,-180 443,-180"/>
<text text-anchor="middle" x="393" y="-157.75" font-family="Arial" font-size="10.00">agent&#45;interactive&#45;console</text>
</g>
<!-- pre_network_manager_config&#45;&gt;agent_interactive_console -->
<g id="edge11" class="edge">
<title>pre_network_manager_config&#45;&gt;agent_interactive_console</title>
<path fill="none" stroke="#333333" d="M403.53,-36.41C401.51,-60.26 397.87,-103.39 395.44,-132.11"/>
<polygon fill="#333333" stroke="#333333" points="391.97,-131.68 394.61,-141.94 398.94,-132.27 391.97,-131.68"/>
</g>
<!-- selinux -->
<g id="node4" class="node">
<title>selinux</title>
<path fill="#add8e6" stroke="black" d="M307,-36C307,-36 277,-36 277,-36 271,-36 265,-30 265,-24 265,-24 265,-12 265,-12 265,-6 271,0 277,0 277,0 307,0 307,0 313,0 319,-6 319,-12 319,-12 319,-24 319,-24 319,-30 313,-36 307,-36"/>
<text text-anchor="middle" x="292" y="-13.75" font-family="Arial" font-size="10.00">selinux</text>
</g>
<!-- selinux&#45;&gt;pre_network_manager_config -->
<!-- selinux&#45;&gt;agent_interactive_console_serial -->
<g id="edge7" class="edge">
<title>selinux&#45;&gt;agent_interactive_console_serial</title>
<path fill="none" stroke="#333333" d="M264.69,-32.48C261.78,-33.74 258.85,-34.94 256,-36 200.22,-56.78 162.99,-24.59 127,-72 117.33,-84.74 118.61,-94.37 127,-108 134.76,-120.61 146.55,-130.33 159.46,-137.78"/>
<polygon fill="#333333" stroke="#333333" points="157.69,-140.8 168.17,-142.35 160.94,-134.6 157.69,-140.8"/>
</g>
<!-- selinux&#45;&gt;agent_interactive_console -->
<g id="edge12" class="edge">
<title>selinux&#45;&gt;agent_interactive_console</title>
<path fill="none" stroke="#333333" d="M304.38,-36.41C321.8,-60.9 353.68,-105.71 374.07,-134.39"/>
<polygon fill="#333333" stroke="#333333" points="370.99,-136.09 379.64,-142.21 376.69,-132.03 370.99,-136.09"/>
</g>
<!-- set_hostname&#45;&gt;iscsistart -->
<!-- set_hostname&#45;&gt;agent_interactive_console -->
<g id="edge30" class="edge">
<title>set_hostname&#45;&gt;agent_interactive_console</title>
<path fill="none" stroke="#333333" d="M512.32,-36.41C488.67,-61.11 445.2,-106.49 417.77,-135.14"/>
<polygon fill="#333333" stroke="#333333" points="415.25,-132.71 410.86,-142.35 420.3,-137.55 415.25,-132.71"/>
</g>
<!-- agent -->
<g id="node11" class="node">
<title>agent</title>
<path fill="#add8e6" stroke="black" d="M408,-252C408,-252 378,-252 378,-252 372,-252 366,-246 366,-240 366,-240 366,-228 366,-228 366,-222 372,-216 378,-216 378,-216 408,-216 408,-216 414,-216 420,-222 420,-228 420,-228 420,-240 420,-240 420,-246 414,-252 408,-252"/>
<text text-anchor="middle" x="393" y="-229.75" font-family="Arial" font-size="10.00">agent</text>
</g>
<!-- set_hostname&#45;&gt;agent -->
<g id="edge20" class="edge">
<title>set_hostname&#45;&gt;agent</title>
<path fill="none" stroke="#333333" d="M525.35,-36.05C518.03,-67.22 499.15,-134.4 464,-180 454.66,-192.11 441.87,-202.81 429.71,-211.37"/>
<polygon fill="#333333" stroke="#333333" points="427.8,-208.44 421.44,-216.91 431.69,-214.25 427.8,-208.44"/>
</g>
<!-- _etc_assisted_node0 -->
<g id="node6" class="node">
<title>_etc_assisted_node0</title>
<polygon fill="#fffacd" stroke="black" points="374.75,-324 279.25,-324 279.25,-288 380.75,-288 380.75,-318 374.75,-324"/>
<polyline fill="none" stroke="black" points="374.75,-324 374.75,-318"/>
<polyline fill="none" stroke="black" points="380.75,-318 374.75,-318"/>
<text text-anchor="middle" x="330" y="-301.75" font-family="Arial" font-size="10.00">/etc/assisted/node0</text>
</g>
<!-- install_status -->
<g id="node12" class="node">
<title>install_status</title>
<path fill="#add8e6" stroke="black" d="M353.75,-468C353.75,-468 306.25,-468 306.25,-468 300.25,-468 294.25,-462 294.25,-456 294.25,-456 294.25,-444 294.25,-444 294.25,-438 300.25,-432 306.25,-432 306.25,-432 353.75,-432 353.75,-432 359.75,-432 365.75,-438 365.75,-444 365.75,-444 365.75,-456 365.75,-456 365.75,-462 359.75,-468 353.75,-468"/>
<text text-anchor="middle" x="330" y="-445.75" font-family="Arial" font-size="10.00">install&#45;status</text>
</g>
<!-- _etc_assisted_node0&#45;&gt;install_status -->
<g id="edge28" class="edge">
<title>_etc_assisted_node0&#45;&gt;install_status</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M330,-324.41C330,-348.39 330,-391.86 330,-420.58"/>
<polygon fill="#333333" stroke="#333333" points="326.5,-420.38 330,-430.38 333.5,-420.38 326.5,-420.38"/>
</g>
<!-- assisted_service_pod -->
<g id="node15" class="node">
<title>assisted_service_pod</title>
<path fill="#add8e6" stroke="black" d="M263.75,-396C263.75,-396 180.25,-396 180.25,-396 174.25,-396 168.25,-390 168.25,-384 168.25,-384 168.25,-372 168.25,-372 168.25,-366 174.25,-360 180.25,-360 180.25,-360 263.75,-360 263.75,-360 269.75,-360 275.75,-366 275.75,-372 275.75,-372 275.75,-384 275.75,-384 275.75,-390 269.75,-396 263.75,-396"/>
<text text-anchor="middle" x="222" y="-373.75" font-family="Arial" font-size="10.00">assisted&#45;service&#45;pod</text>
</g>
<!-- _etc_assisted_node0&#45;&gt;assisted_service_pod -->
<g id="edge26" class="edge">
<title>_etc_assisted_node0&#45;&gt;assisted_service_pod</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M303.03,-324.48C289.39,-333.32 272.66,-344.16 257.95,-353.7"/>
<polygon fill="#333333" stroke="#333333" points="256.39,-350.54 249.9,-358.92 260.2,-356.41 256.39,-350.54"/>
</g>
<!-- agent_register_cluster -->
<g id="node16" class="node">
<title>agent_register_cluster</title>
<path fill="#add8e6" stroke="black" d="M249.38,-540C249.38,-540 166.62,-540 166.62,-540 160.62,-540 154.62,-534 154.62,-528 154.62,-528 154.62,-516 154.62,-516 154.62,-510 160.62,-504 166.62,-504 166.62,-504 249.38,-504 249.38,-504 255.38,-504 261.38,-510 261.38,-516 261.38,-516 261.38,-528 261.38,-528 261.38,-534 255.38,-540 249.38,-540"/>
<text text-anchor="middle" x="208" y="-517.75" font-family="Arial" font-size="10.00">agent&#45;register&#45;cluster</text>
</g>
<!-- _etc_assisted_node0&#45;&gt;agent_register_cluster -->
<g id="edge16" class="edge">
<title>_etc_assisted_node0&#45;&gt;agent_register_cluster</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M343.56,-324.22C366.57,-355.66 407.74,-423.27 375,-468 351.72,-499.81 309.21,-513 272.91,-518.26"/>
<polygon fill="#333333" stroke="#333333" points="272.86,-514.74 263.38,-519.47 273.74,-521.69 272.86,-514.74"/>
</g>
<!-- agent_register_infraenv -->
<g id="node17" class="node">
<title>agent_register_infraenv</title>
<path fill="#add8e6" stroke="black" d="M197,-612C197,-612 109,-612 109,-612 103,-612 97,-606 97,-600 97,-600 97,-588 97,-588 97,-582 103,-576 109,-576 109,-576 197,-576 197,-576 203,-576 209,-582 209,-588 209,-588 209,-600 209,-600 209,-606 203,-612 197,-612"/>
<text text-anchor="middle" x="153" y="-589.75" font-family="Arial" font-size="10.00">agent&#45;register&#45;infraenv</text>
</g>
<!-- _etc_assisted_node0&#45;&gt;agent_register_infraenv -->
<g id="edge19" class="edge">
<title>_etc_assisted_node0&#45;&gt;agent_register_infraenv</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M360.05,-324.38C369.93,-331.63 379.93,-340.96 386,-352 410.93,-397.31 420.88,-423.23 395,-468 358.54,-531.08 278.31,-563.51 220.2,-579.33"/>
<polygon fill="#333333" stroke="#333333" points="219.52,-575.89 210.73,-581.8 221.29,-582.66 219.52,-575.89"/>
</g>
<!-- apply_host_config -->
<g id="node18" class="node">
<title>apply_host_config</title>
<path fill="#add8e6" stroke="black" d="M185.38,-684C185.38,-684 120.62,-684 120.62,-684 114.62,-684 108.62,-678 108.62,-672 108.62,-672 108.62,-660 108.62,-660 108.62,-654 114.62,-648 120.62,-648 120.62,-648 185.38,-648 185.38,-648 191.38,-648 197.38,-654 197.38,-660 197.38,-660 197.38,-672 197.38,-672 197.38,-678 191.38,-684 185.38,-684"/>
<text text-anchor="middle" x="153" y="-661.75" font-family="Arial" font-size="10.00">apply&#45;host&#45;config</text>
</g>
<!-- _etc_assisted_node0&#45;&gt;apply_host_config -->
<g id="edge22" class="edge">
<title>_etc_assisted_node0&#45;&gt;apply_host_config</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M278.8,-306.72C186.11,-309.2 0,-329.09 0,-449 0,-449 0,-449 0,-523 0,-579.32 56.38,-619.58 100.68,-642.54"/>
<polygon fill="#333333" stroke="#333333" points="98.92,-645.57 109.43,-646.91 102.05,-639.31 98.92,-645.57"/>
</g>
<!-- start_cluster_installation -->
<g id="node21" class="node">
<title>start_cluster_installation</title>
<path fill="#add8e6" stroke="black" d="M230.62,-756C230.62,-756 137.38,-756 137.38,-756 131.38,-756 125.38,-750 125.38,-744 125.38,-744 125.38,-732 125.38,-732 125.38,-726 131.38,-720 137.38,-720 137.38,-720 230.62,-720 230.62,-720 236.62,-720 242.62,-726 242.62,-732 242.62,-732 242.62,-744 242.62,-744 242.62,-750 236.62,-756 230.62,-756"/>
<text text-anchor="middle" x="184" y="-733.75" font-family="Arial" font-size="10.00">start&#45;cluster&#45;installation</text>
</g>
<!-- _etc_assisted_node0&#45;&gt;start_cluster_installation -->
<g id="edge32" class="edge">
<title>_etc_assisted_node0&#45;&gt;start_cluster_installation</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M370.1,-324.48C383.78,-331.69 398.5,-340.97 410,-352 446.58,-387.09 470,-398.31 470,-449 470,-449 470,-449 470,-595 470,-691.06 338.96,-722.14 254.28,-732.19"/>
<polygon fill="#333333" stroke="#333333" points="253.97,-728.7 244.42,-733.28 254.74,-735.66 253.97,-728.7"/>
</g>
<!-- _usr_lib_dracut_hooks_pre_pivot_99_agent_copy_files_sh -->
<g id="node7" class="node">
<title>_usr_lib_dracut_hooks_pre_pivot_99_agent_copy_files_sh</title>
<polygon fill="#f5deb3" stroke="black" points="241.25,-36 136.75,-36 136.75,0 247.25,0 247.25,-30 241.25,-36"/>
<polyline fill="none" stroke="black" points="241.25,-36 241.25,-30"/>
<polyline fill="none" stroke="black" points="247.25,-30 241.25,-30"/>
<text text-anchor="middle" x="192" y="-13.75" font-family="Arial" font-size="10.00">99&#45;agent&#45;copy&#45;files.sh</text>
</g>
<!-- _usr_lib_dracut_hooks_pre_pivot_99_agent_copy_files_sh&#45;&gt;selinux -->
<!-- _usr_local_bin_agent_tui -->
<g id="node8" class="node">
<title>_usr_local_bin_agent_tui</title>
<polygon fill="#fffacd" stroke="black" points="241.62,-108 136.38,-108 136.38,-72 247.62,-72 247.62,-102 241.62,-108"/>
<polyline fill="none" stroke="black" points="241.62,-108 241.62,-102"/>
<polyline fill="none" stroke="black" points="247.62,-102 241.62,-102"/>
<text text-anchor="middle" x="192" y="-85.75" font-family="Arial" font-size="10.00">/usr/local/bin/agent&#45;tui</text>
</g>
<!-- _usr_lib_dracut_hooks_pre_pivot_99_agent_copy_files_sh&#45;&gt;_usr_local_bin_agent_tui -->
<g id="edge3" class="edge">
<title>_usr_lib_dracut_hooks_pre_pivot_99_agent_copy_files_sh&#45;&gt;_usr_local_bin_agent_tui</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M192,-36.3C192,-43.59 192,-52.27 192,-60.46"/>
<polygon fill="#333333" stroke="#333333" points="188.5,-60.38 192,-70.38 195.5,-60.38 188.5,-60.38"/>
</g>
<!-- _usr_local_bin_agent_tui&#45;&gt;agent_interactive_console_serial -->
<g id="edge10" class="edge">
<title>_usr_local_bin_agent_tui&#45;&gt;agent_interactive_console_serial</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M195.97,-108.3C199.57,-115.99 204.61,-125.21 209.85,-133.78"/>
<polygon fill="#333333" stroke="#333333" points="206.85,-135.59 215.19,-142.13 212.75,-131.82 206.85,-135.59"/>
</g>
<!-- _usr_local_bin_agent_tui&#45;&gt;agent_interactive_console -->
<g id="edge4" class="edge">
<title>_usr_local_bin_agent_tui&#45;&gt;agent_interactive_console</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M236.27,-108.48C262.24,-117.86 295.54,-129.5 324.78,-139.43"/>
<polygon fill="#333333" stroke="#333333" points="323.33,-142.63 333.92,-142.52 325.57,-136 323.33,-142.63"/>
</g>
<!-- agent_interactive_console_serial&#45;&gt;_usr_local_bin_agent_tui -->
<!-- agent_interactive_console_serial&#45;&gt;agent -->
<g id="edge8" class="edge">
<title>agent_interactive_console_serial&#45;&gt;agent</title>
<path fill="none" stroke="#333333" d="M273.04,-180.85C298.36,-191.85 330.6,-205.87 355.28,-216.6"/>
<polygon fill="#333333" stroke="#333333" points="353.74,-219.75 364.31,-220.52 356.53,-213.33 353.74,-219.75"/>
</g>
<!-- node_zero -->
<g id="node13" class="node">
<title>node_zero</title>
<path fill="#add8e6" stroke="black" d="M293.38,-252C293.38,-252 258.62,-252 258.62,-252 252.62,-252 246.62,-246 246.62,-240 246.62,-240 246.62,-228 246.62,-228 246.62,-222 252.62,-216 258.62,-216 258.62,-216 293.38,-216 293.38,-216 299.38,-216 305.38,-222 305.38,-228 305.38,-228 305.38,-240 305.38,-240 305.38,-246 299.38,-252 293.38,-252"/>
<text text-anchor="middle" x="276" y="-229.75" font-family="Arial" font-size="10.00">node&#45;zero</text>
</g>
<!-- agent_interactive_console_serial&#45;&gt;node_zero -->
<g id="edge9" class="edge">
<title>agent_interactive_console_serial&#45;&gt;node_zero</title>
<path fill="none" stroke="#333333" d="M243.1,-180.66C247.93,-188.35 253.7,-197.53 259.05,-206.03"/>
<polygon fill="#333333" stroke="#333333" points="255.96,-207.7 264.25,-214.3 261.89,-203.97 255.96,-207.7"/>
</g>
<!-- agent_interactive_console&#45;&gt;_usr_local_bin_agent_tui -->
<!-- agent_interactive_console&#45;&gt;agent -->
<g id="edge13" class="edge">
<title>agent_interactive_console&#45;&gt;agent</title>
<path fill="none" stroke="#333333" d="M393,-180.66C393,-187.76 393,-196.14 393,-204.08"/>
<polygon fill="#333333" stroke="#333333" points="389.5,-204.07 393,-214.07 396.5,-204.07 389.5,-204.07"/>
</g>
<!-- agent_interactive_console&#45;&gt;node_zero -->
<g id="edge14" class="edge">
<title>agent_interactive_console&#45;&gt;node_zero</title>
<path fill="none" stroke="#333333" d="M363.17,-180.85C348.37,-189.7 330.32,-200.5 314.48,-209.97"/>
<polygon fill="#333333" stroke="#333333" points="313.05,-206.76 306.26,-214.89 316.64,-212.76 313.05,-206.76"/>
</g>
<!-- node_zero&#45;&gt;_etc_assisted_node0 -->
<g id="edge5" class="edge">
<title>node_zero&#45;&gt;_etc_assisted_node0</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M289.35,-252.3C295.56,-260.36 303.08,-270.11 309.96,-279.02"/>
<polygon fill="#333333" stroke="#333333" points="307,-280.92 315.88,-286.7 312.54,-276.64 307,-280.92"/>
</g>
<!-- node_zero&#45;&gt;assisted_service_pod -->
<g id="edge24" class="edge">
<title>node_zero&#45;&gt;assisted_service_pod</title>
<path fill="none" stroke="#333333" d="M269.38,-252.41C260.18,-276.6 243.43,-320.64 232.52,-349.35"/>
<polygon fill="#333333" stroke="#333333" points="229.33,-347.88 229.04,-358.47 235.87,-350.37 229.33,-347.88"/>
</g>
<!-- oci_eval_user_data -->
<g id="node14" class="node">
<title>oci_eval_user_data</title>
<path fill="#add8e6" stroke="black" stroke-width="0.5" d="M740.25,-36C740.25,-36 671.75,-36 671.75,-36 665.75,-36 659.75,-30 659.75,-24 659.75,-24 659.75,-12 659.75,-12 659.75,-6 665.75,0 671.75,0 671.75,0 740.25,0 740.25,0 746.25,0 752.25,-6 752.25,-12 752.25,-12 752.25,-24 752.25,-24 752.25,-30 746.25,-36 740.25,-36"/>
<text text-anchor="middle" x="706" y="-13.75" font-family="Arial" font-size="10.00">oci&#45;eval&#45;user&#45;data</text>
</g>
<!-- assisted_service_pod&#45;&gt;install_status -->
<g id="edge27" class="edge">
<title>assisted_service_pod&#45;&gt;install_status</title>
<path fill="none" stroke="#333333" d="M248.97,-396.48C262.61,-405.32 279.34,-416.16 294.05,-425.7"/>
<polygon fill="#333333" stroke="#333333" points="291.8,-428.41 302.1,-430.92 295.61,-422.54 291.8,-428.41"/>
</g>
<!-- assisted_service_pod&#45;&gt;agent_register_cluster -->
<!-- assisted_service_pod&#45;&gt;agent_register_infraenv -->
<!-- assisted_service_db -->
<g id="node19" class="node">
<title>assisted_service_db</title>
<path fill="#add8e6" stroke="black" d="M244.12,-468C244.12,-468 165.88,-468 165.88,-468 159.88,-468 153.88,-462 153.88,-456 153.88,-456 153.88,-444 153.88,-444 153.88,-438 159.88,-432 165.88,-432 165.88,-432 244.12,-432 244.12,-432 250.12,-432 256.12,-438 256.12,-444 256.12,-444 256.12,-456 256.12,-456 256.12,-462 250.12,-468 244.12,-468"/>
<text text-anchor="middle" x="205" y="-445.75" font-family="Arial" font-size="10.00">assisted&#45;service&#45;db</text>
</g>
<!-- assisted_service_pod&#45;&gt;assisted_service_db -->
<g id="edge23" class="edge">
<title>assisted_service_pod&#45;&gt;assisted_service_db</title>
<path fill="none" stroke="#333333" d="M217.8,-396.3C216.01,-403.68 213.87,-412.48 211.86,-420.75"/>
<polygon fill="#333333" stroke="#333333" points="208.47,-419.88 209.51,-430.42 215.27,-421.53 208.47,-419.88"/>
</g>
<!-- assisted_service -->
<g id="node20" class="node">
<title>assisted_service</title>
<path fill="#add8e6" stroke="black" d="M124,-468C124,-468 60,-468 60,-468 54,-468 48,-462 48,-456 48,-456 48,-444 48,-444 48,-438 54,-432 60,-432 60,-432 124,-432 124,-432 130,-432 136,-438 136,-444 136,-444 136,-456 136,-456 136,-462 130,-468 124,-468"/>
<text text-anchor="middle" x="92" y="-445.75" font-family="Arial" font-size="10.00">assisted&#45;service</text>
</g>
<!-- assisted_service_pod&#45;&gt;assisted_service -->
<g id="edge25" class="edge">
<title>assisted_service_pod&#45;&gt;assisted_service</title>
<path fill="none" stroke="#333333" d="M189.53,-396.48C172.73,-405.53 152.02,-416.68 134.02,-426.38"/>
<polygon fill="#333333" stroke="#333333" points="132.53,-423.2 125.39,-431.02 135.85,-429.36 132.53,-423.2"/>
</g>
<!-- agent_register_cluster&#45;&gt;agent_register_infraenv -->
<g id="edge18" class="edge">
<title>agent_register_cluster&#45;&gt;agent_register_infraenv</title>
<path fill="none" stroke="#333333" d="M194.4,-540.3C188.08,-548.36 180.42,-558.11 173.41,-567.02"/>
<polygon fill="#333333" stroke="#333333" points="170.8,-564.68 167.37,-574.71 176.3,-569 170.8,-564.68"/>
</g>
<!-- agent_register_infraenv&#45;&gt;apply_host_config -->
<g id="edge21" class="edge">
<title>agent_register_infraenv&#45;&gt;apply_host_config</title>
<path fill="none" stroke="#333333" d="M153,-612.3C153,-619.59 153,-628.27 153,-636.46"/>
<polygon fill="#333333" stroke="#333333" points="149.5,-636.38 153,-646.38 156.5,-636.38 149.5,-636.38"/>
</g>
<!-- apply_host_config&#45;&gt;start_cluster_installation -->
<g id="edge31" class="edge">
<title>apply_host_config&#45;&gt;start_cluster_installation</title>
<path fill="none" stroke="#333333" d="M160.66,-684.3C164.04,-691.93 168.09,-701.08 171.87,-709.6"/>
<polygon fill="#333333" stroke="#333333" points="168.56,-710.79 175.81,-718.51 174.96,-707.95 168.56,-710.79"/>
</g>
<!-- assisted_service&#45;&gt;agent_register_cluster -->
<g id="edge15" class="edge">
<title>assisted_service&#45;&gt;agent_register_cluster</title>
<path fill="none" stroke="#333333" d="M120.97,-468.48C135.75,-477.4 153.93,-488.37 169.83,-497.97"/>
<polygon fill="#333333" stroke="#333333" points="167.73,-500.79 178.1,-502.96 171.35,-494.79 167.73,-500.79"/>
</g>
<!-- assisted_service&#45;&gt;agent_register_infraenv -->
<g id="edge17" class="edge">
<title>assisted_service&#45;&gt;agent_register_infraenv</title>
<path fill="none" stroke="#333333" d="M99.48,-468.41C109.87,-492.6 128.79,-536.64 141.12,-565.35"/>
<polygon fill="#333333" stroke="#333333" points="137.89,-566.69 145.05,-574.5 144.32,-563.93 137.89,-566.69"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

View File

@@ -0,0 +1,304 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 12.2.1 (20241206.2353)
-->
<!-- Title: agent_installer_services_interactive_workflow Pages: 1 -->
<svg width="718pt" height="636pt"
viewBox="0.00 0.00 718.25 636.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 632)">
<title>agent_installer_services_interactive_workflow</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-632 714.25,-632 714.25,4 -4,4"/>
<g id="clust2" class="cluster">
<title>cluster_assisted_service_pod</title>
<polygon fill="none" stroke="#666666" stroke-dasharray="5,2" points="8,-424 8,-620 252,-620 252,-424 8,-424"/>
</g>
<!-- agent_extract_tui -->
<g id="node1" class="node">
<title>agent_extract_tui</title>
<path fill="#add8e6" stroke="black" d="M254.5,-108C254.5,-108 193.5,-108 193.5,-108 187.5,-108 181.5,-102 181.5,-96 181.5,-96 181.5,-84 181.5,-84 181.5,-78 187.5,-72 193.5,-72 193.5,-72 254.5,-72 254.5,-72 260.5,-72 266.5,-78 266.5,-84 266.5,-84 266.5,-96 266.5,-96 266.5,-102 260.5,-108 254.5,-108"/>
<text text-anchor="middle" x="224" y="-85.75" font-family="Arial" font-size="10.00">agent&#45;extract&#45;tui</text>
</g>
<!-- _usr_local_bin_agent_tui -->
<g id="node9" class="node">
<title>_usr_local_bin_agent_tui</title>
<polygon fill="#fffacd" stroke="black" points="300.62,-180 195.38,-180 195.38,-144 306.62,-144 306.62,-174 300.62,-180"/>
<polyline fill="none" stroke="black" points="300.62,-180 300.62,-174"/>
<polyline fill="none" stroke="black" points="306.62,-174 300.62,-174"/>
<text text-anchor="middle" x="251" y="-157.75" font-family="Arial" font-size="10.00">/usr/local/bin/agent&#45;tui</text>
</g>
<!-- agent_extract_tui&#45;&gt;_usr_local_bin_agent_tui -->
<g id="edge4" class="edge">
<title>agent_extract_tui&#45;&gt;_usr_local_bin_agent_tui</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M230.67,-108.3C233.58,-115.85 237.07,-124.88 240.32,-133.32"/>
<polygon fill="#333333" stroke="#333333" points="236.99,-134.41 243.86,-142.48 243.52,-131.89 236.99,-134.41"/>
</g>
<!-- agent_interactive_console_serial -->
<g id="node10" class="node">
<title>agent_interactive_console_serial</title>
<path fill="#6495ed" stroke="black" stroke-width="2" d="M258.75,-252C258.75,-252 121.25,-252 121.25,-252 115.25,-252 109.25,-246 109.25,-240 109.25,-240 109.25,-228 109.25,-228 109.25,-222 115.25,-216 121.25,-216 121.25,-216 258.75,-216 258.75,-216 264.75,-216 270.75,-222 270.75,-228 270.75,-228 270.75,-240 270.75,-240 270.75,-246 264.75,-252 258.75,-252"/>
<text text-anchor="middle" x="190" y="-229.75" font-family="Arial" font-size="10.00">agent&#45;interactive&#45;console&#45;serial@</text>
</g>
<!-- agent_extract_tui&#45;&gt;agent_interactive_console_serial -->
<g id="edge10" class="edge">
<title>agent_extract_tui&#45;&gt;agent_interactive_console_serial</title>
<path fill="none" stroke="#333333" d="M207.54,-108.08C199.35,-117.78 190.3,-130.63 186,-144 179.81,-163.26 180.99,-186.08 183.62,-203.79"/>
<polygon fill="#333333" stroke="#333333" points="180.18,-204.38 185.35,-213.63 187.07,-203.18 180.18,-204.38"/>
</g>
<!-- agent_interactive_console -->
<g id="node11" class="node">
<title>agent_interactive_console</title>
<path fill="#6495ed" stroke="black" stroke-width="2" d="M404,-252C404,-252 304,-252 304,-252 298,-252 292,-246 292,-240 292,-240 292,-228 292,-228 292,-222 298,-216 304,-216 304,-216 404,-216 404,-216 410,-216 416,-222 416,-228 416,-228 416,-240 416,-240 416,-246 410,-252 404,-252"/>
<text text-anchor="middle" x="354" y="-229.75" font-family="Arial" font-size="10.00">agent&#45;interactive&#45;console</text>
</g>
<!-- agent_extract_tui&#45;&gt;agent_interactive_console -->
<g id="edge6" class="edge">
<title>agent_extract_tui&#45;&gt;agent_interactive_console</title>
<path fill="none" stroke="#333333" d="M266.97,-108.49C284.01,-117.13 302.66,-128.97 316,-144 331.24,-161.17 341.04,-185.37 346.86,-204.2"/>
<polygon fill="#333333" stroke="#333333" points="343.45,-205.01 349.57,-213.66 350.18,-203.09 343.45,-205.01"/>
</g>
<!-- iscsiadm -->
<g id="node2" class="node">
<title>iscsiadm</title>
<path fill="#add8e6" stroke="black" stroke-width="0.5" d="M586.5,-108C586.5,-108 555.5,-108 555.5,-108 549.5,-108 543.5,-102 543.5,-96 543.5,-96 543.5,-84 543.5,-84 543.5,-78 549.5,-72 555.5,-72 555.5,-72 586.5,-72 586.5,-72 592.5,-72 598.5,-78 598.5,-84 598.5,-84 598.5,-96 598.5,-96 598.5,-102 592.5,-108 586.5,-108"/>
<text text-anchor="middle" x="571" y="-85.75" font-family="Arial" font-size="10.00">iscsiadm</text>
</g>
<!-- iscsistart -->
<g id="node3" class="node">
<title>iscsistart</title>
<path fill="#add8e6" stroke="black" stroke-width="0.5" d="M587.25,-36C587.25,-36 554.75,-36 554.75,-36 548.75,-36 542.75,-30 542.75,-24 542.75,-24 542.75,-12 542.75,-12 542.75,-6 548.75,0 554.75,0 554.75,0 587.25,0 587.25,0 593.25,0 599.25,-6 599.25,-12 599.25,-12 599.25,-24 599.25,-24 599.25,-30 593.25,-36 587.25,-36"/>
<text text-anchor="middle" x="571" y="-13.75" font-family="Arial" font-size="10.00">iscsistart</text>
</g>
<!-- iscsistart&#45;&gt;iscsiadm -->
<g id="edge28" class="edge">
<title>iscsistart&#45;&gt;iscsiadm</title>
<path fill="none" stroke="#333333" d="M571,-35.95C571,-43.43 571,-52.42 571,-60.86"/>
<polygon fill="#333333" stroke="#333333" points="567.5,-60.7 571,-70.7 574.5,-60.7 567.5,-60.7"/>
</g>
<!-- pre_network_manager_config -->
<g id="node4" class="node">
<title>pre_network_manager_config</title>
<path fill="#add8e6" stroke="black" d="M419.38,-36C419.38,-36 306.62,-36 306.62,-36 300.62,-36 294.62,-30 294.62,-24 294.62,-24 294.62,-12 294.62,-12 294.62,-6 300.62,0 306.62,0 306.62,0 419.38,0 419.38,0 425.38,0 431.38,-6 431.38,-12 431.38,-12 431.38,-24 431.38,-24 431.38,-30 425.38,-36 419.38,-36"/>
<text text-anchor="middle" x="363" y="-13.75" font-family="Arial" font-size="10.00">pre&#45;network&#45;manager&#45;config</text>
</g>
<!-- pre_network_manager_config&#45;&gt;agent_interactive_console_serial -->
<g id="edge8" class="edge">
<title>pre_network_manager_config&#45;&gt;agent_interactive_console_serial</title>
<path fill="none" stroke="#333333" d="M294.25,-36.1C241.45,-49.57 176.88,-66.89 173,-72 143.78,-110.48 161.47,-169.87 176.24,-204.75"/>
<polygon fill="#333333" stroke="#333333" points="172.99,-206.05 180.26,-213.77 179.39,-203.21 172.99,-206.05"/>
</g>
<!-- pre_network_manager_config&#45;&gt;agent_interactive_console -->
<g id="edge14" class="edge">
<title>pre_network_manager_config&#45;&gt;agent_interactive_console</title>
<path fill="none" stroke="#333333" d="M373.2,-36.5C378.46,-46.53 384.31,-59.56 387,-72 397.13,-118.92 400.19,-133.85 387,-180 384.44,-188.94 379.9,-197.84 374.98,-205.72"/>
<polygon fill="#333333" stroke="#333333" points="372.2,-203.58 369.52,-213.83 378,-207.49 372.2,-203.58"/>
</g>
<!-- selinux -->
<g id="node5" class="node">
<title>selinux</title>
<path fill="#add8e6" stroke="black" d="M141,-36C141,-36 111,-36 111,-36 105,-36 99,-30 99,-24 99,-24 99,-12 99,-12 99,-6 105,0 111,0 111,0 141,0 141,0 147,0 153,-6 153,-12 153,-12 153,-24 153,-24 153,-30 147,-36 141,-36"/>
<text text-anchor="middle" x="126" y="-13.75" font-family="Arial" font-size="10.00">selinux</text>
</g>
<!-- selinux&#45;&gt;agent_extract_tui -->
<g id="edge5" class="edge">
<title>selinux&#45;&gt;agent_extract_tui</title>
<path fill="none" stroke="#333333" d="M150.48,-36.48C162.61,-45.15 177.45,-55.75 190.61,-65.15"/>
<polygon fill="#333333" stroke="#333333" points="188.43,-67.9 198.6,-70.86 192.5,-62.2 188.43,-67.9"/>
</g>
<!-- selinux&#45;&gt;agent_interactive_console_serial -->
<g id="edge9" class="edge">
<title>selinux&#45;&gt;agent_interactive_console_serial</title>
<path fill="none" stroke="#333333" d="M119.3,-36.16C108.44,-66.94 90.52,-132.73 115,-180 121.01,-191.61 130.86,-201.22 141.48,-208.92"/>
<polygon fill="#333333" stroke="#333333" points="139.4,-211.74 149.67,-214.36 143.28,-205.91 139.4,-211.74"/>
</g>
<!-- selinux&#45;&gt;agent_interactive_console -->
<g id="edge15" class="edge">
<title>selinux&#45;&gt;agent_interactive_console</title>
<path fill="none" stroke="#333333" d="M153.35,-32.38C156.25,-33.66 159.17,-34.89 162,-36 211.47,-55.39 231.3,-43.28 276,-72 312.27,-95.31 322.65,-104.99 341,-144 349.79,-162.69 352.97,-185.82 353.99,-203.82"/>
<polygon fill="#333333" stroke="#333333" points="350.48,-203.69 354.33,-213.56 357.47,-203.44 350.48,-203.69"/>
</g>
<!-- set_hostname -->
<g id="node6" class="node">
<title>set_hostname</title>
<path fill="#add8e6" stroke="black" d="M512.25,-36C512.25,-36 461.75,-36 461.75,-36 455.75,-36 449.75,-30 449.75,-24 449.75,-24 449.75,-12 449.75,-12 449.75,-6 455.75,0 461.75,0 461.75,0 512.25,0 512.25,0 518.25,0 524.25,-6 524.25,-12 524.25,-12 524.25,-24 524.25,-24 524.25,-30 518.25,-36 512.25,-36"/>
<text text-anchor="middle" x="487" y="-13.75" font-family="Arial" font-size="10.00">set&#45;hostname</text>
</g>
<!-- set_hostname&#45;&gt;agent_interactive_console -->
<g id="edge29" class="edge">
<title>set_hostname&#45;&gt;agent_interactive_console</title>
<path fill="none" stroke="#333333" d="M480.15,-36.39C467.69,-66.96 439.38,-131.7 405,-180 398.29,-189.42 389.95,-198.81 381.97,-207"/>
<polygon fill="#333333" stroke="#333333" points="379.56,-204.47 374.94,-214 384.5,-209.43 379.56,-204.47"/>
</g>
<!-- agent -->
<g id="node12" class="node">
<title>agent</title>
<path fill="#add8e6" stroke="black" d="M369,-324C369,-324 339,-324 339,-324 333,-324 327,-318 327,-312 327,-312 327,-300 327,-300 327,-294 333,-288 339,-288 339,-288 369,-288 369,-288 375,-288 381,-294 381,-300 381,-300 381,-312 381,-312 381,-318 375,-324 369,-324"/>
<text text-anchor="middle" x="354" y="-301.75" font-family="Arial" font-size="10.00">agent</text>
</g>
<!-- set_hostname&#45;&gt;agent -->
<g id="edge21" class="edge">
<title>set_hostname&#45;&gt;agent</title>
<path fill="none" stroke="#333333" d="M486.43,-36.21C484.27,-77.3 473.99,-182.83 425,-252 416,-264.7 403.02,-275.65 390.62,-284.23"/>
<polygon fill="#333333" stroke="#333333" points="389.02,-281.09 382.58,-289.5 392.86,-286.95 389.02,-281.09"/>
</g>
<!-- _etc_assisted_node0 -->
<g id="node7" class="node">
<title>_etc_assisted_node0</title>
<polygon fill="#fffacd" stroke="black" points="325.75,-396 230.25,-396 230.25,-360 331.75,-360 331.75,-390 325.75,-396"/>
<polyline fill="none" stroke="black" points="325.75,-396 325.75,-390"/>
<polyline fill="none" stroke="black" points="331.75,-390 325.75,-390"/>
<text text-anchor="middle" x="281" y="-373.75" font-family="Arial" font-size="10.00">/etc/assisted/node0</text>
</g>
<!-- install_status -->
<g id="node13" class="node">
<title>install_status</title>
<path fill="#add8e6" stroke="black" d="M321.75,-540C321.75,-540 274.25,-540 274.25,-540 268.25,-540 262.25,-534 262.25,-528 262.25,-528 262.25,-516 262.25,-516 262.25,-510 268.25,-504 274.25,-504 274.25,-504 321.75,-504 321.75,-504 327.75,-504 333.75,-510 333.75,-516 333.75,-516 333.75,-528 333.75,-528 333.75,-534 327.75,-540 321.75,-540"/>
<text text-anchor="middle" x="298" y="-517.75" font-family="Arial" font-size="10.00">install&#45;status</text>
</g>
<!-- _etc_assisted_node0&#45;&gt;install_status -->
<g id="edge27" class="edge">
<title>_etc_assisted_node0&#45;&gt;install_status</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M283.08,-396.41C285.95,-420.39 291.16,-463.86 294.6,-492.58"/>
<polygon fill="#333333" stroke="#333333" points="291.11,-492.87 295.77,-502.39 298.06,-492.04 291.11,-492.87"/>
</g>
<!-- assisted_service_pod -->
<g id="node16" class="node">
<title>assisted_service_pod</title>
<path fill="#add8e6" stroke="black" d="M231.75,-468C231.75,-468 148.25,-468 148.25,-468 142.25,-468 136.25,-462 136.25,-456 136.25,-456 136.25,-444 136.25,-444 136.25,-438 142.25,-432 148.25,-432 148.25,-432 231.75,-432 231.75,-432 237.75,-432 243.75,-438 243.75,-444 243.75,-444 243.75,-456 243.75,-456 243.75,-462 237.75,-468 231.75,-468"/>
<text text-anchor="middle" x="190" y="-445.75" font-family="Arial" font-size="10.00">assisted&#45;service&#45;pod</text>
</g>
<!-- _etc_assisted_node0&#45;&gt;assisted_service_pod -->
<g id="edge25" class="edge">
<title>_etc_assisted_node0&#45;&gt;assisted_service_pod</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M258.51,-396.3C247.35,-404.89 233.69,-415.39 221.51,-424.76"/>
<polygon fill="#333333" stroke="#333333" points="219.54,-421.86 213.75,-430.73 223.81,-427.41 219.54,-421.86"/>
</g>
<!-- agent_start_ui -->
<g id="node17" class="node">
<title>agent_start_ui</title>
<path fill="#add8e6" stroke="black" d="M224.12,-612C224.12,-612 175.88,-612 175.88,-612 169.88,-612 163.88,-606 163.88,-600 163.88,-600 163.88,-588 163.88,-588 163.88,-582 169.88,-576 175.88,-576 175.88,-576 224.12,-576 224.12,-576 230.12,-576 236.12,-582 236.12,-588 236.12,-588 236.12,-600 236.12,-600 236.12,-606 230.12,-612 224.12,-612"/>
<text text-anchor="middle" x="200" y="-589.75" font-family="Arial" font-size="10.00">agent&#45;start&#45;ui</text>
</g>
<!-- _etc_assisted_node0&#45;&gt;agent_start_ui -->
<g id="edge20" class="edge">
<title>_etc_assisted_node0&#45;&gt;agent_start_ui</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M297.72,-396.27C325.61,-427.23 375.5,-493.29 343,-540 321.63,-570.72 280.27,-583.67 247.5,-589.11"/>
<polygon fill="#333333" stroke="#333333" points="247.21,-585.62 237.82,-590.52 248.22,-592.55 247.21,-585.62"/>
</g>
<!-- _etc_assisted_rendezvous_host_env -->
<g id="node8" class="node">
<title>_etc_assisted_rendezvous_host_env</title>
<polygon fill="#fffacd" stroke="black" points="270.62,-36 171.38,-36 171.38,0 276.62,0 276.62,-30 270.62,-36"/>
<polyline fill="none" stroke="black" points="270.62,-36 270.62,-30"/>
<polyline fill="none" stroke="black" points="276.62,-30 270.62,-30"/>
<text text-anchor="middle" x="224" y="-19" font-family="Arial" font-size="10.00">/etc/assisted/</text>
<text text-anchor="middle" x="224" y="-8.5" font-family="Arial" font-size="10.00">rendezvous&#45;host.env</text>
</g>
<!-- _etc_assisted_rendezvous_host_env&#45;&gt;agent_extract_tui -->
<g id="edge7" class="edge">
<title>_etc_assisted_rendezvous_host_env&#45;&gt;agent_extract_tui</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M224,-36.3C224,-43.59 224,-52.27 224,-60.46"/>
<polygon fill="#333333" stroke="#333333" points="220.5,-60.38 224,-70.38 227.5,-60.38 220.5,-60.38"/>
</g>
<!-- _usr_local_bin_agent_tui&#45;&gt;agent_interactive_console_serial -->
<g id="edge13" class="edge">
<title>_usr_local_bin_agent_tui&#45;&gt;agent_interactive_console_serial</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M230.01,-180.3C222.27,-188.24 213.71,-197.81 206.43,-206.62"/>
<polygon fill="#333333" stroke="#333333" points="203.85,-204.23 200.33,-214.23 209.31,-208.61 203.85,-204.23"/>
</g>
<!-- _usr_local_bin_agent_tui&#45;&gt;agent_interactive_console -->
<g id="edge18" class="edge">
<title>_usr_local_bin_agent_tui&#45;&gt;agent_interactive_console</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M270.54,-180.3C282.45,-189 297.99,-199.69 312.47,-209.15"/>
<polygon fill="#333333" stroke="#333333" points="310.22,-211.86 320.52,-214.34 314.01,-205.98 310.22,-211.86"/>
</g>
<!-- agent_interactive_console_serial&#45;&gt;_usr_local_bin_agent_tui -->
<!-- agent_interactive_console_serial&#45;&gt;agent -->
<g id="edge11" class="edge">
<title>agent_interactive_console_serial&#45;&gt;agent</title>
<path fill="none" stroke="#333333" d="M231.81,-252.85C257.88,-263.97 291.16,-278.18 316.4,-288.95"/>
<polygon fill="#333333" stroke="#333333" points="314.72,-292.04 325.29,-292.75 317.47,-285.6 314.72,-292.04"/>
</g>
<!-- node_zero -->
<g id="node14" class="node">
<title>node_zero</title>
<path fill="#add8e6" stroke="black" d="M254.38,-324C254.38,-324 219.62,-324 219.62,-324 213.62,-324 207.62,-318 207.62,-312 207.62,-312 207.62,-300 207.62,-300 207.62,-294 213.62,-288 219.62,-288 219.62,-288 254.38,-288 254.38,-288 260.38,-288 266.38,-294 266.38,-300 266.38,-300 266.38,-312 266.38,-312 266.38,-318 260.38,-324 254.38,-324"/>
<text text-anchor="middle" x="237" y="-301.75" font-family="Arial" font-size="10.00">node&#45;zero</text>
</g>
<!-- agent_interactive_console_serial&#45;&gt;node_zero -->
<g id="edge12" class="edge">
<title>agent_interactive_console_serial&#45;&gt;node_zero</title>
<path fill="none" stroke="#333333" d="M201.86,-252.66C207.02,-260.35 213.18,-269.53 218.89,-278.03"/>
<polygon fill="#333333" stroke="#333333" points="215.98,-279.98 224.46,-286.33 221.79,-276.07 215.98,-279.98"/>
</g>
<!-- agent_interactive_console&#45;&gt;_usr_local_bin_agent_tui -->
<!-- agent_interactive_console&#45;&gt;agent -->
<g id="edge16" class="edge">
<title>agent_interactive_console&#45;&gt;agent</title>
<path fill="none" stroke="#333333" d="M354,-252.66C354,-259.76 354,-268.14 354,-276.08"/>
<polygon fill="#333333" stroke="#333333" points="350.5,-276.07 354,-286.07 357.5,-276.07 350.5,-276.07"/>
</g>
<!-- agent_interactive_console&#45;&gt;node_zero -->
<g id="edge17" class="edge">
<title>agent_interactive_console&#45;&gt;node_zero</title>
<path fill="none" stroke="#333333" d="M324.17,-252.85C309.37,-261.7 291.32,-272.5 275.48,-281.97"/>
<polygon fill="#333333" stroke="#333333" points="274.05,-278.76 267.26,-286.89 277.64,-284.76 274.05,-278.76"/>
</g>
<!-- node_zero&#45;&gt;_etc_assisted_node0 -->
<g id="edge3" class="edge">
<title>node_zero&#45;&gt;_etc_assisted_node0</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M247.88,-324.3C252.78,-332.1 258.68,-341.49 264.14,-350.17"/>
<polygon fill="#333333" stroke="#333333" points="261.16,-352.01 269.44,-358.61 267.08,-348.29 261.16,-352.01"/>
</g>
<!-- node_zero&#45;&gt;assisted_service_pod -->
<g id="edge23" class="edge">
<title>node_zero&#45;&gt;assisted_service_pod</title>
<path fill="none" stroke="#333333" d="M231.24,-324.41C223.27,-348.5 208.78,-392.25 199.28,-420.97"/>
<polygon fill="#333333" stroke="#333333" points="195.96,-419.86 196.14,-430.45 202.6,-422.06 195.96,-419.86"/>
</g>
<!-- oci_eval_user_data -->
<g id="node15" class="node">
<title>oci_eval_user_data</title>
<path fill="#add8e6" stroke="black" stroke-width="0.5" d="M698.25,-36C698.25,-36 629.75,-36 629.75,-36 623.75,-36 617.75,-30 617.75,-24 617.75,-24 617.75,-12 617.75,-12 617.75,-6 623.75,0 629.75,0 629.75,0 698.25,0 698.25,0 704.25,0 710.25,-6 710.25,-12 710.25,-12 710.25,-24 710.25,-24 710.25,-30 704.25,-36 698.25,-36"/>
<text text-anchor="middle" x="664" y="-13.75" font-family="Arial" font-size="10.00">oci&#45;eval&#45;user&#45;data</text>
</g>
<!-- assisted_service_pod&#45;&gt;install_status -->
<g id="edge26" class="edge">
<title>assisted_service_pod&#45;&gt;install_status</title>
<path fill="none" stroke="#333333" d="M216.97,-468.48C230.61,-477.32 247.34,-488.16 262.05,-497.7"/>
<polygon fill="#333333" stroke="#333333" points="259.8,-500.41 270.1,-502.92 263.61,-494.54 259.8,-500.41"/>
</g>
<!-- assisted_service_pod&#45;&gt;agent_start_ui -->
<!-- assisted_service_db -->
<g id="node18" class="node">
<title>assisted_service_db</title>
<path fill="#add8e6" stroke="black" d="M126.12,-540C126.12,-540 47.88,-540 47.88,-540 41.88,-540 35.88,-534 35.88,-528 35.88,-528 35.88,-516 35.88,-516 35.88,-510 41.88,-504 47.88,-504 47.88,-504 126.12,-504 126.12,-504 132.12,-504 138.12,-510 138.12,-516 138.12,-516 138.12,-528 138.12,-528 138.12,-534 132.12,-540 126.12,-540"/>
<text text-anchor="middle" x="87" y="-517.75" font-family="Arial" font-size="10.00">assisted&#45;service&#45;db</text>
</g>
<!-- assisted_service_pod&#45;&gt;assisted_service_db -->
<!-- assisted_service_pod&#45;&gt;assisted_service_db -->
<g id="edge22" class="edge">
<title>assisted_service_pod&#45;&gt;assisted_service_db</title>
<path fill="none" stroke="#333333" d="M170.46,-468.3C158.37,-477.14 142.53,-488.01 127.86,-497.59"/>
<polygon fill="#333333" stroke="#333333" points="126.23,-494.48 119.72,-502.83 130.02,-500.36 126.23,-494.48"/>
</g>
<!-- assisted_service -->
<g id="node19" class="node">
<title>assisted_service</title>
<path fill="#add8e6" stroke="black" d="M232,-540C232,-540 168,-540 168,-540 162,-540 156,-534 156,-528 156,-528 156,-516 156,-516 156,-510 162,-504 168,-504 168,-504 232,-504 232,-504 238,-504 244,-510 244,-516 244,-516 244,-528 244,-528 244,-534 238,-540 232,-540"/>
<text text-anchor="middle" x="200" y="-517.75" font-family="Arial" font-size="10.00">assisted&#45;service</text>
</g>
<!-- assisted_service_pod&#45;&gt;assisted_service -->
<g id="edge24" class="edge">
<title>assisted_service_pod&#45;&gt;assisted_service</title>
<path fill="none" stroke="#333333" d="M192.47,-468.3C193.53,-475.68 194.78,-484.48 195.96,-492.75"/>
<polygon fill="#333333" stroke="#333333" points="192.46,-492.99 197.34,-502.4 199.39,-492 192.46,-492.99"/>
</g>
<!-- assisted_service&#45;&gt;agent_start_ui -->
<g id="edge19" class="edge">
<title>assisted_service&#45;&gt;agent_start_ui</title>
<path fill="none" stroke="#333333" d="M200,-540.3C200,-547.59 200,-556.27 200,-564.46"/>
<polygon fill="#333333" stroke="#333333" points="196.5,-564.38 200,-574.38 203.5,-564.38 196.5,-564.38"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

View File

@@ -0,0 +1,277 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 12.2.1 (20241206.2353)
-->
<!-- Title: agent_installer_services_unconfigured_ignition Pages: 1 -->
<svg width="859pt" height="708pt"
viewBox="0.00 0.00 859.25 708.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 704)">
<title>agent_installer_services_unconfigured_ignition</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-704 855.25,-704 855.25,4 -4,4"/>
<g id="clust2" class="cluster">
<title>cluster_assisted_service_pod</title>
<polygon fill="none" stroke="#666666" stroke-dasharray="5,2" points="363.25,-280 363.25,-692 627.25,-692 627.25,-280 363.25,-280"/>
</g>
<!-- iscsiadm -->
<g id="node1" class="node">
<title>iscsiadm</title>
<path fill="#add8e6" stroke="black" stroke-width="0.5" d="M43.75,-180C43.75,-180 12.75,-180 12.75,-180 6.75,-180 0.75,-174 0.75,-168 0.75,-168 0.75,-156 0.75,-156 0.75,-150 6.75,-144 12.75,-144 12.75,-144 43.75,-144 43.75,-144 49.75,-144 55.75,-150 55.75,-156 55.75,-156 55.75,-168 55.75,-168 55.75,-174 49.75,-180 43.75,-180"/>
<text text-anchor="middle" x="28.25" y="-157.75" font-family="Arial" font-size="10.00">iscsiadm</text>
</g>
<!-- iscsistart -->
<g id="node2" class="node">
<title>iscsistart</title>
<path fill="#add8e6" stroke="black" stroke-width="0.5" d="M44.5,-108C44.5,-108 12,-108 12,-108 6,-108 0,-102 0,-96 0,-96 0,-84 0,-84 0,-78 6,-72 12,-72 12,-72 44.5,-72 44.5,-72 50.5,-72 56.5,-78 56.5,-84 56.5,-84 56.5,-96 56.5,-96 56.5,-102 50.5,-108 44.5,-108"/>
<text text-anchor="middle" x="28.25" y="-85.75" font-family="Arial" font-size="10.00">iscsistart</text>
</g>
<!-- iscsistart&#45;&gt;iscsiadm -->
<g id="edge22" class="edge">
<title>iscsistart&#45;&gt;iscsiadm</title>
<path fill="none" stroke="#333333" d="M28.25,-107.95C28.25,-115.43 28.25,-124.42 28.25,-132.86"/>
<polygon fill="#333333" stroke="#333333" points="24.75,-132.7 28.25,-142.7 31.75,-132.7 24.75,-132.7"/>
</g>
<!-- pre_network_manager_config -->
<g id="node3" class="node">
<title>pre_network_manager_config</title>
<path fill="#add8e6" stroke="black" stroke-width="0.5" d="M199.62,-108C199.62,-108 86.87,-108 86.87,-108 80.88,-108 74.88,-102 74.88,-96 74.88,-96 74.88,-84 74.88,-84 74.88,-78 80.88,-72 86.88,-72 86.88,-72 199.62,-72 199.62,-72 205.62,-72 211.62,-78 211.62,-84 211.62,-84 211.62,-96 211.62,-96 211.62,-102 205.62,-108 199.62,-108"/>
<text text-anchor="middle" x="143.25" y="-85.75" font-family="Arial" font-size="10.00">pre&#45;network&#45;manager&#45;config</text>
</g>
<!-- selinux -->
<g id="node4" class="node">
<title>selinux</title>
<path fill="#add8e6" stroke="black" stroke-width="0.5" d="M271.25,-108C271.25,-108 241.25,-108 241.25,-108 235.25,-108 229.25,-102 229.25,-96 229.25,-96 229.25,-84 229.25,-84 229.25,-78 235.25,-72 241.25,-72 241.25,-72 271.25,-72 271.25,-72 277.25,-72 283.25,-78 283.25,-84 283.25,-84 283.25,-96 283.25,-96 283.25,-102 277.25,-108 271.25,-108"/>
<text text-anchor="middle" x="256.25" y="-85.75" font-family="Arial" font-size="10.00">selinux</text>
</g>
<!-- set_hostname -->
<g id="node5" class="node">
<title>set_hostname</title>
<path fill="#add8e6" stroke="black" stroke-width="0.5" d="M363.5,-108C363.5,-108 313,-108 313,-108 307,-108 301,-102 301,-96 301,-96 301,-84 301,-84 301,-78 307,-72 313,-72 313,-72 363.5,-72 363.5,-72 369.5,-72 375.5,-78 375.5,-84 375.5,-84 375.5,-96 375.5,-96 375.5,-102 369.5,-108 363.5,-108"/>
<text text-anchor="middle" x="338.25" y="-85.75" font-family="Arial" font-size="10.00">set&#45;hostname</text>
</g>
<!-- agent -->
<g id="node9" class="node">
<title>agent</title>
<path fill="#add8e6" stroke="black" stroke-width="0.5" d="M366.25,-180C366.25,-180 336.25,-180 336.25,-180 330.25,-180 324.25,-174 324.25,-168 324.25,-168 324.25,-156 324.25,-156 324.25,-150 330.25,-144 336.25,-144 336.25,-144 366.25,-144 366.25,-144 372.25,-144 378.25,-150 378.25,-156 378.25,-156 378.25,-168 378.25,-168 378.25,-174 372.25,-180 366.25,-180"/>
<text text-anchor="middle" x="351.25" y="-157.75" font-family="Arial" font-size="10.00">agent</text>
</g>
<!-- set_hostname&#45;&gt;agent -->
<g id="edge13" class="edge">
<title>set_hostname&#45;&gt;agent</title>
<path fill="none" stroke="#333333" d="M341.4,-107.95C342.8,-115.51 344.5,-124.63 346.08,-133.15"/>
<polygon fill="#333333" stroke="#333333" points="342.59,-133.53 347.86,-142.72 349.47,-132.25 342.59,-133.53"/>
</g>
<!-- _etc_assisted_node0 -->
<g id="node6" class="node">
<title>_etc_assisted_node0</title>
<polygon fill="#fffacd" stroke="black" points="782,-252 686.5,-252 686.5,-216 788,-216 788,-246 782,-252"/>
<polyline fill="none" stroke="black" points="782,-252 782,-246"/>
<polyline fill="none" stroke="black" points="788,-246 782,-246"/>
<text text-anchor="middle" x="737.25" y="-229.75" font-family="Arial" font-size="10.00">/etc/assisted/node0</text>
</g>
<!-- install_status -->
<g id="node10" class="node">
<title>install_status</title>
<path fill="#add8e6" stroke="black" d="M697,-396C697,-396 649.5,-396 649.5,-396 643.5,-396 637.5,-390 637.5,-384 637.5,-384 637.5,-372 637.5,-372 637.5,-366 643.5,-360 649.5,-360 649.5,-360 697,-360 697,-360 703,-360 709,-366 709,-372 709,-372 709,-384 709,-384 709,-390 703,-396 697,-396"/>
<text text-anchor="middle" x="673.25" y="-373.75" font-family="Arial" font-size="10.00">install&#45;status</text>
</g>
<!-- _etc_assisted_node0&#45;&gt;install_status -->
<g id="edge21" class="edge">
<title>_etc_assisted_node0&#45;&gt;install_status</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M729.4,-252.41C718.45,-276.71 698.48,-321.03 685.54,-349.73"/>
<polygon fill="#333333" stroke="#333333" points="682.5,-347.95 681.58,-358.51 688.88,-350.83 682.5,-347.95"/>
</g>
<!-- assisted_service_pod -->
<g id="node14" class="node">
<title>assisted_service_pod</title>
<path fill="#add8e6" stroke="black" d="M590,-324C590,-324 506.5,-324 506.5,-324 500.5,-324 494.5,-318 494.5,-312 494.5,-312 494.5,-300 494.5,-300 494.5,-294 500.5,-288 506.5,-288 506.5,-288 590,-288 590,-288 596,-288 602,-294 602,-300 602,-300 602,-312 602,-312 602,-318 596,-324 590,-324"/>
<text text-anchor="middle" x="548.25" y="-301.75" font-family="Arial" font-size="10.00">assisted&#45;service&#45;pod</text>
</g>
<!-- _etc_assisted_node0&#45;&gt;assisted_service_pod -->
<g id="edge19" class="edge">
<title>_etc_assisted_node0&#45;&gt;assisted_service_pod</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M690.04,-252.48C664.47,-261.96 632.66,-273.74 605.65,-283.74"/>
<polygon fill="#333333" stroke="#333333" points="604.76,-280.34 596.6,-287.09 607.19,-286.9 604.76,-280.34"/>
</g>
<!-- agent_register_cluster -->
<g id="node15" class="node">
<title>agent_register_cluster</title>
<path fill="#add8e6" stroke="black" d="M502.62,-468C502.62,-468 419.88,-468 419.88,-468 413.88,-468 407.88,-462 407.88,-456 407.88,-456 407.88,-444 407.88,-444 407.88,-438 413.88,-432 419.88,-432 419.88,-432 502.62,-432 502.62,-432 508.62,-432 514.62,-438 514.62,-444 514.62,-444 514.62,-456 514.62,-456 514.62,-462 508.62,-468 502.62,-468"/>
<text text-anchor="middle" x="461.25" y="-445.75" font-family="Arial" font-size="10.00">agent&#45;register&#45;cluster</text>
</g>
<!-- _etc_assisted_node0&#45;&gt;agent_register_cluster -->
<g id="edge9" class="edge">
<title>_etc_assisted_node0&#45;&gt;agent_register_cluster</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M741.08,-252.43C747.17,-285.16 754.88,-356.08 718.25,-396 692.88,-423.65 593.76,-437.66 526.3,-444.13"/>
<polygon fill="#333333" stroke="#333333" points="526.07,-440.64 516.43,-445.05 526.71,-447.61 526.07,-440.64"/>
</g>
<!-- agent_register_infraenv -->
<g id="node16" class="node">
<title>agent_register_infraenv</title>
<path fill="#add8e6" stroke="black" d="M577.25,-540C577.25,-540 489.25,-540 489.25,-540 483.25,-540 477.25,-534 477.25,-528 477.25,-528 477.25,-516 477.25,-516 477.25,-510 483.25,-504 489.25,-504 489.25,-504 577.25,-504 577.25,-504 583.25,-504 589.25,-510 589.25,-516 589.25,-516 589.25,-528 589.25,-528 589.25,-534 583.25,-540 577.25,-540"/>
<text text-anchor="middle" x="533.25" y="-517.75" font-family="Arial" font-size="10.00">agent&#45;register&#45;infraenv</text>
</g>
<!-- _etc_assisted_node0&#45;&gt;agent_register_infraenv -->
<g id="edge12" class="edge">
<title>_etc_assisted_node0&#45;&gt;agent_register_infraenv</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M747.98,-252.26C752.41,-260.36 757.02,-270.34 759.25,-280 771,-330.77 773.02,-353.95 742.25,-396 705.69,-445.96 642.57,-479.66 595.25,-499.36"/>
<polygon fill="#333333" stroke="#333333" points="594.15,-496.02 586.2,-503.02 596.78,-502.51 594.15,-496.02"/>
</g>
<!-- apply_host_config -->
<g id="node17" class="node">
<title>apply_host_config</title>
<path fill="#add8e6" stroke="black" d="M592.62,-612C592.62,-612 527.88,-612 527.88,-612 521.88,-612 515.88,-606 515.88,-600 515.88,-600 515.88,-588 515.88,-588 515.88,-582 521.88,-576 527.88,-576 527.88,-576 592.62,-576 592.62,-576 598.62,-576 604.62,-582 604.62,-588 604.62,-588 604.62,-600 604.62,-600 604.62,-606 598.62,-612 592.62,-612"/>
<text text-anchor="middle" x="560.25" y="-589.75" font-family="Arial" font-size="10.00">apply&#45;host&#45;config</text>
</g>
<!-- _etc_assisted_node0&#45;&gt;apply_host_config -->
<g id="edge15" class="edge">
<title>_etc_assisted_node0&#45;&gt;apply_host_config</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M755.26,-252.17C762.81,-260.1 771.22,-269.96 777.25,-280 800.93,-319.42 813.25,-331.02 813.25,-377 813.25,-377 813.25,-377 813.25,-451 813.25,-540.83 690.46,-574.42 615.97,-586.53"/>
<polygon fill="#333333" stroke="#333333" points="615.75,-583.02 606.39,-588 616.81,-589.94 615.75,-583.02"/>
</g>
<!-- start_cluster_installation -->
<g id="node20" class="node">
<title>start_cluster_installation</title>
<path fill="#add8e6" stroke="black" d="M606.88,-684C606.88,-684 513.62,-684 513.62,-684 507.62,-684 501.62,-678 501.62,-672 501.62,-672 501.62,-660 501.62,-660 501.62,-654 507.62,-648 513.62,-648 513.62,-648 606.88,-648 606.88,-648 612.88,-648 618.88,-654 618.88,-660 618.88,-660 618.88,-672 618.88,-672 618.88,-678 612.88,-684 606.88,-684"/>
<text text-anchor="middle" x="560.25" y="-661.75" font-family="Arial" font-size="10.00">start&#45;cluster&#45;installation</text>
</g>
<!-- _etc_assisted_node0&#45;&gt;start_cluster_installation -->
<g id="edge24" class="edge">
<title>_etc_assisted_node0&#45;&gt;start_cluster_installation</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M770.3,-252.33C782.09,-259.69 794.78,-269.1 804.25,-280 835.67,-316.16 851.25,-329.09 851.25,-377 851.25,-377 851.25,-377 851.25,-523 851.25,-620.91 716.54,-651.33 630.43,-660.76"/>
<polygon fill="#333333" stroke="#333333" points="630.24,-657.26 620.64,-661.76 630.95,-664.23 630.24,-657.26"/>
</g>
<!-- _etc_assisted_rendezvous_host_env -->
<g id="node7" class="node">
<title>_etc_assisted_rendezvous_host_env</title>
<polygon fill="#fffacd" stroke="black" points="492.88,-108 393.62,-108 393.62,-72 498.88,-72 498.88,-102 492.88,-108"/>
<polyline fill="none" stroke="black" points="492.88,-108 492.88,-102"/>
<polyline fill="none" stroke="black" points="498.88,-102 492.88,-102"/>
<text text-anchor="middle" x="446.25" y="-91" font-family="Arial" font-size="10.00">/etc/assisted/</text>
<text text-anchor="middle" x="446.25" y="-80.5" font-family="Arial" font-size="10.00">rendezvous&#45;host.env</text>
</g>
<!-- _etc_assisted_rendezvous_host_env&#45;&gt;agent -->
<g id="edge4" class="edge">
<title>_etc_assisted_rendezvous_host_env&#45;&gt;agent</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M422.77,-108.3C410.83,-117.1 396.14,-127.92 383.19,-137.46"/>
<polygon fill="#333333" stroke="#333333" points="381.33,-134.49 375.35,-143.24 385.48,-140.13 381.33,-134.49"/>
</g>
<!-- node_zero -->
<g id="node12" class="node">
<title>node_zero</title>
<path fill="#add8e6" stroke="black" d="M565.62,-180C565.62,-180 530.88,-180 530.88,-180 524.88,-180 518.88,-174 518.88,-168 518.88,-168 518.88,-156 518.88,-156 518.88,-150 524.88,-144 530.88,-144 530.88,-144 565.62,-144 565.62,-144 571.62,-144 577.62,-150 577.62,-156 577.62,-156 577.62,-168 577.62,-168 577.62,-174 571.62,-180 565.62,-180"/>
<text text-anchor="middle" x="548.25" y="-157.75" font-family="Arial" font-size="10.00">node&#45;zero</text>
</g>
<!-- _etc_assisted_rendezvous_host_env&#45;&gt;node_zero -->
<g id="edge6" class="edge">
<title>_etc_assisted_rendezvous_host_env&#45;&gt;node_zero</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M471.73,-108.48C484.48,-117.24 500.1,-127.96 513.9,-137.42"/>
<polygon fill="#333333" stroke="#333333" points="511.63,-140.11 521.85,-142.88 515.59,-134.34 511.63,-140.11"/>
</g>
<!-- assisted_service -->
<g id="node19" class="node">
<title>assisted_service</title>
<path fill="#add8e6" stroke="black" d="M447.25,-396C447.25,-396 383.25,-396 383.25,-396 377.25,-396 371.25,-390 371.25,-384 371.25,-384 371.25,-372 371.25,-372 371.25,-366 377.25,-360 383.25,-360 383.25,-360 447.25,-360 447.25,-360 453.25,-360 459.25,-366 459.25,-372 459.25,-372 459.25,-384 459.25,-384 459.25,-390 453.25,-396 447.25,-396"/>
<text text-anchor="middle" x="415.25" y="-373.75" font-family="Arial" font-size="10.00">assisted&#45;service</text>
</g>
<!-- _etc_assisted_rendezvous_host_env&#45;&gt;assisted_service -->
<g id="edge5" class="edge">
<title>_etc_assisted_rendezvous_host_env&#45;&gt;assisted_service</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M444.36,-108.46C439.18,-156.24 424.74,-289.49 418.35,-348.39"/>
<polygon fill="#333333" stroke="#333333" points="414.88,-347.94 417.28,-358.26 421.84,-348.7 414.88,-347.94"/>
</g>
<!-- agent_check_config_image -->
<g id="node8" class="node">
<title>agent_check_config_image</title>
<path fill="#add8e6" stroke="black" stroke-width="0.5" d="M710.38,-180C710.38,-180 608.12,-180 608.12,-180 602.12,-180 596.12,-174 596.12,-168 596.12,-168 596.12,-156 596.12,-156 596.12,-150 602.12,-144 608.12,-144 608.12,-144 710.38,-144 710.38,-144 716.38,-144 722.38,-150 722.38,-156 722.38,-156 722.38,-168 722.38,-168 722.38,-174 716.38,-180 710.38,-180"/>
<text text-anchor="middle" x="659.25" y="-157.75" font-family="Arial" font-size="10.00">agent&#45;check&#45;config&#45;image</text>
</g>
<!-- load_config_iso -->
<g id="node11" class="node">
<title>load_config_iso</title>
<path fill="#6495ed" stroke="black" stroke-width="2" d="M506.25,-36C506.25,-36 386.25,-36 386.25,-36 380.25,-36 374.25,-30 374.25,-24 374.25,-24 374.25,-12 374.25,-12 374.25,-6 380.25,0 386.25,0 386.25,0 506.25,0 506.25,0 512.25,0 518.25,-6 518.25,-12 518.25,-12 518.25,-24 518.25,-24 518.25,-30 512.25,-36 506.25,-36"/>
<text text-anchor="middle" x="446.25" y="-13.75" font-family="Arial" font-size="10.00">load&#45;config&#45;iso@</text>
</g>
<!-- load_config_iso&#45;&gt;_etc_assisted_rendezvous_host_env -->
<g id="edge3" class="edge">
<title>load_config_iso&#45;&gt;_etc_assisted_rendezvous_host_env</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M440.3,-36.66C439.58,-43.85 439.34,-52.34 439.6,-60.36"/>
<polygon fill="#333333" stroke="#333333" points="436.09,-60.32 440.23,-70.07 443.08,-59.87 436.09,-60.32"/>
</g>
<!-- load_config_iso&#45;&gt;_etc_assisted_rendezvous_host_env -->
<!-- node_zero&#45;&gt;_etc_assisted_node0 -->
<g id="edge7" class="edge">
<title>node_zero&#45;&gt;_etc_assisted_node0</title>
<path fill="none" stroke="#333333" stroke-dasharray="1,5" d="M577.97,-176.21C581.09,-177.52 584.23,-178.81 587.25,-180 616.06,-191.35 648.41,-202.93 675.66,-212.35"/>
<polygon fill="#333333" stroke="#333333" points="674.21,-215.55 684.8,-215.49 676.48,-208.93 674.21,-215.55"/>
</g>
<!-- node_zero&#45;&gt;assisted_service_pod -->
<g id="edge17" class="edge">
<title>node_zero&#45;&gt;assisted_service_pod</title>
<path fill="none" stroke="#333333" d="M548.25,-180.41C548.25,-204.39 548.25,-247.86 548.25,-276.58"/>
<polygon fill="#333333" stroke="#333333" points="544.75,-276.38 548.25,-286.38 551.75,-276.38 544.75,-276.38"/>
</g>
<!-- oci_eval_user_data -->
<g id="node13" class="node">
<title>oci_eval_user_data</title>
<path fill="#add8e6" stroke="black" stroke-width="0.5" d="M616.5,-36C616.5,-36 548,-36 548,-36 542,-36 536,-30 536,-24 536,-24 536,-12 536,-12 536,-6 542,0 548,0 548,0 616.5,0 616.5,0 622.5,0 628.5,-6 628.5,-12 628.5,-12 628.5,-24 628.5,-24 628.5,-30 622.5,-36 616.5,-36"/>
<text text-anchor="middle" x="582.25" y="-13.75" font-family="Arial" font-size="10.00">oci&#45;eval&#45;user&#45;data</text>
</g>
<!-- assisted_service_pod&#45;&gt;install_status -->
<g id="edge20" class="edge">
<title>assisted_service_pod&#45;&gt;install_status</title>
<path fill="none" stroke="#333333" d="M579.47,-324.48C595.55,-333.49 615.35,-344.58 632.61,-354.24"/>
<polygon fill="#333333" stroke="#333333" points="630.67,-357.17 641.11,-359 634.09,-351.06 630.67,-357.17"/>
</g>
<!-- assisted_service_pod&#45;&gt;agent_register_cluster -->
<!-- assisted_service_pod&#45;&gt;agent_register_infraenv -->
<!-- assisted_service_db -->
<g id="node18" class="node">
<title>assisted_service_db</title>
<path fill="#add8e6" stroke="black" d="M607.38,-396C607.38,-396 529.12,-396 529.12,-396 523.12,-396 517.12,-390 517.12,-384 517.12,-384 517.12,-372 517.12,-372 517.12,-366 523.12,-360 529.12,-360 529.12,-360 607.38,-360 607.38,-360 613.38,-360 619.38,-366 619.38,-372 619.38,-372 619.38,-384 619.38,-384 619.38,-390 613.38,-396 607.38,-396"/>
<text text-anchor="middle" x="568.25" y="-373.75" font-family="Arial" font-size="10.00">assisted&#45;service&#45;db</text>
</g>
<!-- assisted_service_pod&#45;&gt;assisted_service_db -->
<g id="edge16" class="edge">
<title>assisted_service_pod&#45;&gt;assisted_service_db</title>
<path fill="none" stroke="#333333" d="M553.19,-324.3C555.33,-331.76 557.87,-340.68 560.26,-349.03"/>
<polygon fill="#333333" stroke="#333333" points="556.83,-349.79 562.95,-358.44 563.57,-347.86 556.83,-349.79"/>
</g>
<!-- assisted_service_pod&#45;&gt;assisted_service -->
<g id="edge18" class="edge">
<title>assisted_service_pod&#45;&gt;assisted_service</title>
<path fill="none" stroke="#333333" d="M515.03,-324.48C497.76,-333.57 476.46,-344.78 457.98,-354.51"/>
<polygon fill="#333333" stroke="#333333" points="456.6,-351.28 449.38,-359.03 459.86,-357.47 456.6,-351.28"/>
</g>
<!-- agent_register_cluster&#45;&gt;agent_register_infraenv -->
<g id="edge11" class="edge">
<title>agent_register_cluster&#45;&gt;agent_register_infraenv</title>
<path fill="none" stroke="#333333" d="M479.05,-468.3C487.53,-476.55 497.84,-486.57 507.18,-495.65"/>
<polygon fill="#333333" stroke="#333333" points="504.71,-498.14 514.32,-502.6 509.59,-493.12 504.71,-498.14"/>
</g>
<!-- agent_register_infraenv&#45;&gt;apply_host_config -->
<g id="edge14" class="edge">
<title>agent_register_infraenv&#45;&gt;apply_host_config</title>
<path fill="none" stroke="#333333" d="M539.92,-540.3C542.83,-547.85 546.32,-556.88 549.57,-565.32"/>
<polygon fill="#333333" stroke="#333333" points="546.24,-566.41 553.11,-574.48 552.77,-563.89 546.24,-566.41"/>
</g>
<!-- apply_host_config&#45;&gt;start_cluster_installation -->
<g id="edge23" class="edge">
<title>apply_host_config&#45;&gt;start_cluster_installation</title>
<path fill="none" stroke="#333333" d="M560.25,-612.3C560.25,-619.59 560.25,-628.27 560.25,-636.46"/>
<polygon fill="#333333" stroke="#333333" points="556.75,-636.38 560.25,-646.38 563.75,-636.38 556.75,-636.38"/>
</g>
<!-- assisted_service&#45;&gt;agent_register_cluster -->
<g id="edge8" class="edge">
<title>assisted_service&#45;&gt;agent_register_cluster</title>
<path fill="none" stroke="#333333" d="M426.62,-396.3C431.8,-404.19 438.05,-413.7 443.81,-422.45"/>
<polygon fill="#333333" stroke="#333333" points="440.76,-424.2 449.18,-430.63 446.61,-420.35 440.76,-424.2"/>
</g>
<!-- assisted_service&#45;&gt;agent_register_infraenv -->
<g id="edge10" class="edge">
<title>assisted_service&#45;&gt;agent_register_infraenv</title>
<path fill="none" stroke="#333333" d="M405.28,-396.27C395.68,-415.42 384.6,-446.45 399.25,-468 414.44,-490.35 440.67,-503.27 465.92,-510.75"/>
<polygon fill="#333333" stroke="#333333" points="464.99,-514.12 475.56,-513.33 466.81,-507.36 464.99,-514.12"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 20 KiB

3
docs/user/agent/diagrams/.gitignore vendored Normal file
View File

@@ -0,0 +1,3 @@
# Generated .dot files (intermediate products)
*.dot
__pycache__/

View File

@@ -0,0 +1,37 @@
.PHONY: all clean help
SVG_FILES := ../agent_installer_services-install_workflow.svg \
../agent_installer_services-add_nodes_workflow.svg \
../agent_installer_services-unconfigured_ignition_and_config_image_flow.svg \
../agent_installer_services-interactive.svg
DOT_FILES := $(patsubst ../agent_installer_services-%.svg,%.dot,$(SVG_FILES))
# Find all systemd unit files that the generator depends on
SYSTEMD_UNITS := $(wildcard ../../../../data/data/agent/systemd/units/*.service) \
$(wildcard ../../../../data/data/agent/systemd/units/*.service.template)
all: $(SVG_FILES)
# Generate DOT files from systemd units
$(DOT_FILES): generate_diagrams.py $(SYSTEMD_UNITS)
python3 generate_diagrams.py
# Pattern rule: build SVG from DOT file
../agent_installer_services-%.svg: %.dot
dot -Tsvg $< -o $@
clean:
rm -f $(SVG_FILES) $(DOT_FILES)
# Help target
help:
@echo "Available targets:"
@echo " all - Generate all SVG diagrams (auto-generates DOT files from systemd units) (default)"
@echo " clean - Remove generated SVG and DOT files"
@echo " help - Show this help message"
@echo ""
@echo "The diagrams are auto-generated from systemd units in:"
@echo " ../../../../data/data/agent/systemd/units/"
@echo ""
@echo "Generated files:"
@echo " $(SVG_FILES)" | tr ' ' '\n' | sed 's/^/ /'"

View File

@@ -0,0 +1,86 @@
# Agent Installer Service Diagrams
This directory contains the auto-generation system for agent installer service workflow diagrams.
## Structure
- `generate_diagrams.py` - Python script to auto-generate DOT files from systemd units
- `Makefile` - Build script with dependency tracking
- `*.dot` - GraphViz DOT source files (generated, not tracked in git)
- `.gitignore` - Excludes generated .dot files
- `README.md` - This file
## Diagrams
The system generates four workflow diagrams:
1. **install_workflow** - Standard agent-based installation workflow
2. **add_nodes_workflow** - Add-nodes workflow (differences highlighted in green)
3. **unconfigured_ignition** - Appliance/factory workflow with config image
4. **interactive** - Interactive installation workflow using assisted UI
## Building
To regenerate the diagrams:
```bash
cd docs/user/agent/diagrams
make
```
This single command will:
1. Auto-generate `.dot` files from systemd units (if units changed)
2. Generate SVG files from the `.dot` files (if `.dot` files changed)
The diagrams are automatically regenerated when:
- Any systemd unit file in `data/data/agent/systemd/units/` changes
- The `generate_diagrams.py` script changes
Output files are created in the parent directory:
- `agent_installer_services-install_workflow.svg`
- `agent_installer_services-add_nodes_workflow.svg`
- `agent_installer_services-unconfigured_ignition_and_config_image_flow.svg`
- `agent_installer_services-interactive.svg`
## How It Works
The generator parses systemd unit files and extracts:
- **Service dependencies**: `Before=` and `After=` directives become edges
- **Cluster membership**: `PartOf=` and `BindsTo=` define dashed boxes
- **Workflow filters**: `ConditionPathExists` determines which services run in each workflow
- **File dependencies**: `ConditionPathExists` on files creates dotted edges
The system is mostly data-driven with a few hardcoded exceptions:
- `load-config-iso@` is triggered by udev (unconfigured_ignition only)
- `start-cluster-installation` excluded from interactive (transitive dependency)
- `99-agent-copy-files.sh` excluded from interactive (agent-extract-tui provides tui)
## Diagram Features
- **Layout**: Bottom-to-top (dependencies flow upward)
- **Color coding**:
- Light blue - standard services
- Dark blue (thick border) - orchestrator services
- Thin border - disconnected services
- Green border/text - differences in add-nodes workflow
- Yellow - configuration files
- **Dotted edges**: File creation or conditional dependencies
- **Dashed boxes**: Service clusters (PartOf/BindsTo relationships)
## Requirements
- GraphViz (`dot` command) must be installed
- Fedora/RHEL: `dnf install graphviz`
- Ubuntu/Debian: `apt install graphviz`
- macOS: `brew install graphviz`
- Python 3 (for auto-generation)
## Cleaning
To remove all generated files:
```bash
make clean
```
This removes both `.dot` and `.svg` files.

View File

@@ -0,0 +1,796 @@
#!/usr/bin/env python3
"""
Generate agent installer service workflow diagrams from systemd unit files.
Reads systemd unit files from data/data/agent/systemd/units/ and generates
GraphViz DOT files showing service dependencies for each workflow.
"""
import re
import os
from pathlib import Path
from typing import Dict, List, Set, Tuple
from dataclasses import dataclass, field
@dataclass
class SystemdUnit:
"""Represents a parsed systemd unit file."""
name: str
description: str = ""
after: List[str] = field(default_factory=list)
before: List[str] = field(default_factory=list)
requires: List[str] = field(default_factory=list)
wants: List[str] = field(default_factory=list)
binds_to: List[str] = field(default_factory=list)
part_of: List[str] = field(default_factory=list)
conflicts: List[str] = field(default_factory=list)
condition_path_exists: List[str] = field(default_factory=list)
condition_path_not_exists: List[str] = field(default_factory=list)
wanted_by: List[str] = field(default_factory=list)
is_template: bool = False
class SystemdParser:
"""Parse systemd unit files."""
def __init__(self, units_dir: Path):
self.units_dir = units_dir
self.units: Dict[str, SystemdUnit] = {}
def parse_all(self):
"""Parse all unit files in the directory."""
for file_path in self.units_dir.glob("*.service*"):
# Skip template files - we'll handle the base service
if file_path.suffix == '.template':
# Parse it but with the .template removed from name
name = file_path.stem
else:
name = file_path.name
unit = self.parse_unit(file_path, name)
self.units[name] = unit
def parse_unit(self, file_path: Path, name: str) -> SystemdUnit:
"""Parse a single systemd unit file."""
unit = SystemdUnit(name=name)
unit.is_template = '@' in name or file_path.suffix == '.template'
with open(file_path, 'r') as f:
content = f.read()
# Remove Go template syntax for parsing
content = re.sub(r'\{\{[^}]+\}\}', '', content)
content = re.sub(r'\{\{[^}]+\}\}[^{]*\{\{[^}]+\}\}', '', content, flags=re.DOTALL)
current_section = None
for line in content.splitlines():
line = line.strip()
# Skip comments and empty lines
if not line or line.startswith('#') or line.startswith(';'):
continue
# Section headers
if line.startswith('[') and line.endswith(']'):
current_section = line[1:-1]
continue
# Parse key=value pairs
if '=' not in line:
continue
key, value = line.split('=', 1)
key = key.strip()
value = value.strip()
# Parse directives
if key == 'Description':
unit.description = value
elif key == 'After':
unit.after.extend(self._parse_list(value))
elif key == 'Before':
unit.before.extend(self._parse_list(value))
elif key == 'Requires':
unit.requires.extend(self._parse_list(value))
elif key == 'Wants':
unit.wants.extend(self._parse_list(value))
elif key == 'BindsTo':
unit.binds_to.extend(self._parse_list(value))
elif key == 'PartOf':
unit.part_of.extend(self._parse_list(value))
elif key == 'Conflicts':
unit.conflicts.extend(self._parse_list(value))
elif key == 'ConditionPathExists':
if value.startswith('!'):
unit.condition_path_not_exists.append(value[1:])
else:
unit.condition_path_exists.append(value)
elif key == 'WantedBy' and current_section == 'Install':
unit.wanted_by.extend(self._parse_list(value))
return unit
def _parse_list(self, value: str) -> List[str]:
"""Parse space-separated list of services/targets."""
return [item.strip() for item in value.split() if item.strip()]
class WorkflowFilter:
"""Filter services by workflow based on conditions."""
# Workflow discriminators - the key files that distinguish workflows
# Other files like /etc/assisted/node0 are created during workflows and aren't discriminators
WORKFLOW_DISCRIMINATORS = {
'/etc/assisted/add-nodes.env',
'/etc/assisted/interactive-ui',
'/etc/assisted/rendezvous-host.env',
}
WORKFLOWS = {
'install': {
# Base workflow - runs when no discriminator files are present
'workflow_markers': [],
'excluded_markers': ['/etc/assisted/add-nodes.env', '/etc/assisted/interactive-ui',
'/etc/assisted/rendezvous-host.env'],
},
'add_nodes': {
'workflow_markers': ['/etc/assisted/add-nodes.env'],
'excluded_markers': ['/etc/assisted/interactive-ui', '/etc/assisted/rendezvous-host.env'],
},
'interactive': {
'workflow_markers': ['/etc/assisted/interactive-ui', '/etc/assisted/rendezvous-host.env'],
'excluded_markers': ['/etc/assisted/add-nodes.env'],
},
'unconfigured_ignition': {
'workflow_markers': ['/etc/assisted/rendezvous-host.env'],
'excluded_markers': ['/etc/assisted/add-nodes.env', '/etc/assisted/interactive-ui'],
},
}
def _get_transitive_requirements(self, unit: SystemdUnit, units: Dict[str, SystemdUnit],
visited: Set[str] = None) -> Set[str]:
"""Get all services transitively required by this unit."""
if visited is None:
visited = set()
if unit.name in visited:
return set()
visited.add(unit.name)
requirements = set()
# Add direct requirements
for req in unit.requires + unit.binds_to:
if req in units:
requirements.add(req)
# Recursively get requirements of requirements
requirements.update(self._get_transitive_requirements(units[req], units, visited))
return requirements
def filter_workflow(self, units: Dict[str, SystemdUnit], workflow: str) -> Set[str]:
"""Return set of service names for the given workflow.
A service is included if:
1. It has NO conditions on workflow discriminator files (runs in all workflows), OR
2. It requires a workflow marker that matches this workflow, OR
3. It excludes all markers that this workflow excludes (compatible negative conditions)
4. It doesn't transitively require a service that is disabled in this workflow
"""
config = self.WORKFLOWS[workflow]
filtered = set()
# First pass: determine which services are directly enabled/disabled
for name, unit in units.items():
# Skip system targets
if '.target' in name:
continue
# Hard-coded exclusions based on information outside systemd units
# load-config-iso@ is started by udev rule only in unconfigured_ignition
if name == 'load-config-iso@.service' and workflow != 'unconfigured_ignition':
continue
# agent-check-config-image only runs with load-config-iso@
if name == 'agent-check-config-image.service' and workflow != 'unconfigured_ignition':
continue
# agent-interactive-console services are disabled in Go code for unconfigured_ignition workflow
if name in ('agent-interactive-console.service', 'agent-interactive-console-serial@.service'):
if workflow == 'unconfigured_ignition':
continue
# Check if service has conditions on workflow discriminator files
discriminator_conditions_positive = set()
discriminator_conditions_negative = set()
for cond in unit.condition_path_exists:
if cond in self.WORKFLOW_DISCRIMINATORS:
discriminator_conditions_positive.add(cond)
for cond in unit.condition_path_not_exists:
if cond in self.WORKFLOW_DISCRIMINATORS:
discriminator_conditions_negative.add(cond)
# Case 1: Service has NO conditions on discriminator files - runs in all workflows
if not discriminator_conditions_positive and not discriminator_conditions_negative:
filtered.add(name)
continue
# Case 2: Service requires workflow markers - ALL positive conditions must be satisfied
# For example, agent-extract-tui requires both rendezvous-host.env AND interactive-ui
if discriminator_conditions_positive:
# Check if ALL required discriminators are present in this workflow's markers
all_satisfied = discriminator_conditions_positive.issubset(set(config['workflow_markers']))
if all_satisfied:
filtered.add(name)
continue
# Case 3: Service excludes markers, check if compatible with this workflow
# Service is compatible if it doesn't require any markers this workflow excludes
# and it doesn't exclude any markers this workflow requires
if discriminator_conditions_negative:
conflicts = False
# Service requires markers that this workflow excludes?
for req_marker in discriminator_conditions_positive:
if req_marker in config['excluded_markers']:
conflicts = True
break
# Service excludes markers that this workflow requires?
if not conflicts:
for req_marker in config['workflow_markers']:
if req_marker in discriminator_conditions_negative:
conflicts = True
break
if not conflicts:
filtered.add(name)
# Second pass: remove services that transitively require disabled services
disabled = set(units.keys()) - filtered - {name for name in units if '.target' in name}
to_remove = set()
for name in filtered:
unit = units[name]
transitive_reqs = self._get_transitive_requirements(unit, units)
# If any transitive requirement is disabled, this service is also disabled
if transitive_reqs & disabled:
to_remove.add(name)
filtered -= to_remove
return filtered
class GraphVizGenerator:
"""Generate GraphViz DOT files from systemd units."""
# Styling configuration
ORCHESTRATOR_SERVICES = {
'agent-interactive-console.service',
'agent-interactive-console-serial@.service',
'load-config-iso@.service',
}
# Files to show in diagrams
IMPORTANT_FILES = {
'/usr/local/bin/agent-tui',
'/usr/lib/dracut/hooks/pre-pivot/99-agent-copy-files.sh',
'/etc/assisted/node0',
'/etc/assisted/rendezvous-host.env',
}
def __init__(self, units: Dict[str, SystemdUnit], install_services: Set[str] = None):
self.units = units
self.install_services = install_services or set()
def _find_reachable_from_pod(self, services: Set[str]) -> Set[str]:
"""Find all services reachable from assisted-service-pod via dependencies."""
if 'assisted-service-pod.service' not in services:
return set()
reachable = set()
to_visit = ['assisted-service-pod.service']
while to_visit:
current = to_visit.pop()
if current in reachable:
continue
reachable.add(current)
# Follow Before dependencies (what runs before this service)
if current in self.units:
unit = self.units[current]
for dep in unit.before:
if dep in services and dep not in reachable:
to_visit.append(dep)
# Follow After dependencies backwards (what this runs after)
for dep in unit.after:
if dep in services and dep not in reachable:
to_visit.append(dep)
# Also check who lists this service as Before/After
for svc_name in services:
if svc_name in reachable:
continue
if svc_name not in self.units:
continue
other_unit = self.units[svc_name]
if current in other_unit.after or current in other_unit.before:
if svc_name not in reachable:
to_visit.append(svc_name)
return reachable
def _compute_workflow_differences(self, workflow: str, services: Set[str]) -> Set[str]:
"""Compute services that differ from install workflow."""
if workflow != 'add_nodes' or not self.install_services:
return set()
# Services in add-nodes but not in install
only_in_add_nodes = services - self.install_services
# Services that have different conditions or are marked differently
differences = set(only_in_add_nodes)
# Special case: node-zero exists in both but gets an asterisk in add-nodes
if 'node-zero.service' in services and 'node-zero.service' in self.install_services:
differences.add('node-zero.service')
return differences
def generate_workflow(self, workflow: str, services: Set[str]) -> str:
"""Generate GraphViz DOT for a workflow."""
lines = []
# Header
graph_name = f"agent_installer_services_{workflow}_workflow" if workflow != 'unconfigured_ignition' else "agent_installer_services_unconfigured_ignition"
lines.append(f"digraph {graph_name} {{")
lines.append(" rankdir=BT;")
lines.append(" ranksep=0.5;")
lines.append(' node [shape=box, style="rounded,filled", fillcolor="#ADD8E6", fontname="Arial", fontsize=10, penwidth=1];')
lines.append(' edge [color="#333333"];')
lines.append("")
# Collect files referenced in conditions
files = self._collect_files(services, workflow)
# Special handling for unconfigured_ignition workflow
if workflow == 'unconfigured_ignition' and 'load-config-iso@.service' in services:
files.add('/etc/assisted/rendezvous-host.env')
# Compute disconnected services and workflow differences
reachable_from_pod = self._find_reachable_from_pod(services)
disconnected = services - reachable_from_pod
workflow_differences = self._compute_workflow_differences(workflow, services)
# Group services by type
foundation = self._get_foundation_services(services)
initramfs = self._get_initramfs_files(files)
clusters = self._find_clusters(services)
# Flatten all cluster members to exclude from regular services
cluster_members = set()
for members in clusters.values():
cluster_members.update(members)
regular = services - foundation - cluster_members
# Foundation services
if foundation:
lines.append(" // Bottom row - foundation services")
lines.append(" {")
lines.append(' node [fillcolor="#ADD8E6"];')
for svc in sorted(foundation):
label = svc.replace('.service', '')
style = ""
# Disconnected services get thin border
if svc in disconnected:
style = ', penwidth=0.5'
# Workflow differences get green styling
elif svc in workflow_differences:
style = ', color="#006400", fontcolor="#006400", penwidth=2'
if svc == 'node-zero.service':
label += '*'
lines.append(f' {self._service_to_id(svc)} [label="{label}"{style}];')
lines.append(" }")
lines.append("")
# Files
if files:
lines.append(" // Files (document style)")
lines.append(' node [shape=note, fillcolor="#FFFACD"];')
for file_path in sorted(files):
file_id = self._file_to_id(file_path)
label = file_path
fillcolor = '#FFFACD'
if '99-agent-copy-files' in file_path:
fillcolor = '#F5DEB3'
label = label.replace('/usr/lib/dracut/hooks/pre-pivot/', '') # Shorten for display
if 'rendezvous-host.env' in file_path:
label = '/etc/assisted/\\nrendezvous-host.env'
lines.append(f' {file_id} [label="{label}", fillcolor="{fillcolor}"];')
lines.append("")
# Regular services
if regular:
lines.append(" // Middle services")
lines.append(' node [shape=box, style="rounded,filled", fillcolor="#ADD8E6", penwidth=1];')
for svc in sorted(regular):
label = svc.replace('.service', '')
style = []
if svc in self.ORCHESTRATOR_SERVICES:
style.append('fillcolor="#6495ED"')
style.append('penwidth=2')
elif svc in workflow_differences:
style.append('color="#006400"')
style.append('fontcolor="#006400"')
style.append('penwidth=2')
if svc == 'node-zero.service':
label += '*'
elif svc in disconnected:
style.append('penwidth=0.5')
if svc == 'load-config-iso@.service':
style.append('width=2.0')
style_str = ', ' + ', '.join(style) if style else ''
lines.append(f' {self._service_to_id(svc)} [label="{label}"{style_str}];')
lines.append("")
# Clusters (dynamically generated from PartOf relationships)
for cluster_idx, (parent_svc, cluster_members) in enumerate(sorted(clusters.items())):
parent_id = self._service_to_id(parent_svc)
cluster_name = f"cluster_{parent_id}"
lines.append(f" // Cluster: {parent_svc.replace('.service', '')}")
lines.append(f" subgraph {cluster_name} {{")
lines.append(' label="";')
lines.append(' style=dashed;')
lines.append(' color="#666666";')
lines.append(' fillcolor="#FFFFFF";')
lines.append("")
for svc in cluster_members:
label = svc.replace('.service', '')
style = ', fillcolor="#ADD8E6"'
if svc in workflow_differences:
style = ', fillcolor="#ADD8E6", color="#006400", fontcolor="#006400", penwidth=2'
lines.append(f' {self._service_to_id(svc)} [label="{label}"{style}];')
lines.append("")
# Invisible edges for layout (parent to children)
if len(cluster_members) > 1:
for child in cluster_members[1:3]: # First 2 children
child_id = self._service_to_id(child)
lines.append(f" {parent_id} -> {child_id} [style=invis];")
lines.append(" }")
lines.append("")
# Dependencies
lines.append(" // Dependencies (bottom to top flow)")
lines.append("")
lines.extend(self._generate_dependencies(services, files, workflow))
# Rank constraints
lines.append(" // Rank constraints for better layout")
lines.extend(self._generate_rank_constraints(services, files, workflow))
lines.append("}")
return '\n'.join(lines)
def _service_to_id(self, service: str) -> str:
"""Convert service name to GraphViz identifier."""
return service.replace('.service', '').replace('@', '').replace('-', '_')
def _file_to_id(self, file_path: str) -> str:
"""Convert file path to GraphViz identifier."""
return file_path.replace('/', '_').replace('.', '_').replace('-', '_')
def _collect_files(self, services: Set[str], workflow: str) -> Set[str]:
"""Collect important file paths referenced by services."""
files = set()
for svc_name in services:
if svc_name not in self.units:
continue
unit = self.units[svc_name]
for path in unit.condition_path_exists + unit.condition_path_not_exists:
if path in self.IMPORTANT_FILES:
files.add(path)
# Add dracut copy-files hook if agent-tui is present
# In interactive workflow, agent-extract-tui provides agent-tui, not the copy-files hook
if '/usr/local/bin/agent-tui' in files and workflow != 'interactive':
files.add('/usr/lib/dracut/hooks/pre-pivot/99-agent-copy-files.sh')
return files
def _get_foundation_services(self, services: Set[str]) -> Set[str]:
"""Get foundation services (bottom row)."""
foundation = {
'selinux.service',
'pre-network-manager-config.service',
'set-hostname.service',
'iscsistart.service',
'iscsiadm.service',
'agent-auth-token-status.service', # For add-nodes
'agent-extract-tui.service', # For interactive
}
return foundation & services
def _get_initramfs_files(self, files: Set[str]) -> Set[str]:
"""Get initramfs-related files."""
return {f for f in files if 'dracut' in f or 'agent-tui' in f}
def _find_clusters(self, services: Set[str]) -> Dict[str, List[str]]:
"""Find all clusters based on PartOf and BindsTo relationships.
Returns dict mapping parent service -> list of child services (including parent itself)."""
clusters = {}
# Find all services that have other services with PartOf or BindsTo pointing to them
for svc_name in services:
if svc_name not in self.units:
continue
unit = self.units[svc_name]
# Check PartOf relationships
for part_of_target in unit.part_of:
if part_of_target in services:
# This service is part of a cluster
if part_of_target not in clusters:
clusters[part_of_target] = [part_of_target]
if svc_name not in clusters[part_of_target]:
clusters[part_of_target].append(svc_name)
# Check BindsTo relationships (similar to PartOf for clustering purposes)
for binds_to_target in unit.binds_to:
if binds_to_target in services:
# This service binds to a cluster parent
if binds_to_target not in clusters:
clusters[binds_to_target] = [binds_to_target]
if svc_name not in clusters[binds_to_target]:
clusters[binds_to_target].append(svc_name)
# Sort members of each cluster for consistent output
for parent in clusters:
# Keep parent first, then alphabetically sort the rest
members = clusters[parent]
parent_item = [parent] if parent in members else []
others = sorted([s for s in members if s != parent])
clusters[parent] = parent_item + others
return clusters
def _get_pod_services(self, services: Set[str], workflow: str) -> List[str]:
"""Get services that belong in the pod cluster, inferred from PartOf/BindsTo.
DEPRECATED: Use _find_clusters instead."""
clusters = self._find_clusters(services)
# Return the assisted-service-pod cluster if it exists
return clusters.get('assisted-service-pod.service', [])
def _generate_dependencies(self, services: Set[str], files: Set[str], workflow: str) -> List[str]:
"""Generate dependency edges."""
lines = []
edges_added = set()
# Special handling for initramfs files
if '/usr/lib/dracut/hooks/pre-pivot/99-agent-copy-files.sh' in files and '/usr/local/bin/agent-tui' in files:
lines.append(" // File preparation (initramfs phase on the left)")
copy_id = self._file_to_id('/usr/lib/dracut/hooks/pre-pivot/99-agent-copy-files.sh')
tui_id = self._file_to_id('/usr/local/bin/agent-tui')
edge1 = (copy_id, tui_id)
if edge1 not in edges_added:
lines.append(f" {copy_id} -> {tui_id} [style=dotted, weight=10];")
edges_added.add(edge1)
if 'agent-interactive-console.service' in services:
edge2 = (tui_id, 'agent_interactive_console')
if edge2 not in edges_added:
lines.append(f" {tui_id} -> agent_interactive_console [style=dotted, weight=1];")
edges_added.add(edge2)
lines.append("")
# Special handling for unconfigured_ignition workflow
# load-config-iso creates rendezvous-host.env which is needed by agent and assisted-service
if workflow == 'unconfigured_ignition' and 'load-config-iso@.service' in services:
lines.append(" // Config image loading and file creation")
rendezvous_file = '/etc/assisted/rendezvous-host.env'
if rendezvous_file in files:
rendezvous_id = self._file_to_id(rendezvous_file)
# load-config-iso creates the file
edge = ('load_config_iso', rendezvous_id)
if edge not in edges_added:
lines.append(f" load_config_iso -> {rendezvous_id} [style=dotted];")
edges_added.add(edge)
# Services that need this file
for svc in ['agent.service', 'assisted-service.service', 'node-zero.service']:
if svc in services:
svc_id = self._service_to_id(svc)
edge = (rendezvous_id, svc_id)
if edge not in edges_added:
lines.append(f" {rendezvous_id} -> {svc_id} [style=dotted];")
edges_added.add(edge)
lines.append("")
# Show that node-zero creates /etc/assisted/node0
if 'node-zero.service' in services and '/etc/assisted/node0' in files:
node0_id = self._file_to_id('/etc/assisted/node0')
edge = ('node_zero', node0_id)
if edge not in edges_added:
lines.append(" // File creation during workflow")
lines.append(f" node_zero -> {node0_id} [style=dotted];")
edges_added.add(edge)
lines.append("")
# Show that agent-extract-tui creates /usr/local/bin/agent-tui
if 'agent-extract-tui.service' in services and '/usr/local/bin/agent-tui' in files:
tui_id = self._file_to_id('/usr/local/bin/agent-tui')
edge = ('agent_extract_tui', tui_id)
if edge not in edges_added:
lines.append(" // TUI binary extraction in interactive workflow")
lines.append(f" agent_extract_tui -> {tui_id} [style=dotted];")
edges_added.add(edge)
lines.append("")
# Service dependencies from systemd After= and Before= directives
dep_lines = []
for svc_name in sorted(services):
if svc_name not in self.units:
continue
unit = self.units[svc_name]
svc_id = self._service_to_id(svc_name)
# After dependencies (reverse direction for bottom-up graph)
for dep in unit.after:
if dep.endswith('.service') and dep in services:
dep_id = self._service_to_id(dep)
edge = (dep_id, svc_id)
if edge not in edges_added:
dep_lines.append(f" {dep_id} -> {svc_id};")
edges_added.add(edge)
# Before dependencies (forward direction for bottom-up graph)
for dep in unit.before:
if dep.endswith('.service') and dep in services:
dep_id = self._service_to_id(dep)
edge = (svc_id, dep_id)
if edge not in edges_added:
dep_lines.append(f" {svc_id} -> {dep_id};")
edges_added.add(edge)
# File dependencies
for path in unit.condition_path_exists:
if path in files:
file_id = self._file_to_id(path)
edge = (file_id, svc_id)
if edge not in edges_added:
dep_lines.append(f" {file_id} -> {svc_id} [style=dotted];")
edges_added.add(edge)
if dep_lines:
lines.append(" // Service dependencies")
lines.extend(dep_lines)
lines.append("")
return lines
def _generate_rank_constraints(self, services: Set[str], files: Set[str], workflow: str) -> List[str]:
"""Generate rank constraints for layout."""
lines = []
# Bottom row
foundation = ['selinux', 'pre_network_manager_config', 'set_hostname', 'iscsistart']
# Add initramfs file if present
if '/usr/lib/dracut/hooks/pre-pivot/99-agent-copy-files.sh' in files:
copy_id = self._file_to_id('/usr/lib/dracut/hooks/pre-pivot/99-agent-copy-files.sh')
foundation.insert(0, copy_id)
lines.append(" {rank=same; " + "; ".join(foundation) + ";}")
# Agent-tui file
if '/usr/local/bin/agent-tui' in files:
tui_id = self._file_to_id('/usr/local/bin/agent-tui')
lines.append(f" {{rank=same; {tui_id};}}")
# Interactive console / load-config-iso
if 'agent-interactive-console.service' in services:
lines.append(" {rank=same; agent_interactive_console;}")
elif 'load-config-iso@.service' in services:
lines.append(" {rank=same; load_config_iso;}")
# Rendezvous-host.env
if '/etc/assisted/rendezvous-host.env' in files:
env_id = self._file_to_id('/etc/assisted/rendezvous-host.env')
lines.append(f" {{rank=same; {env_id};}}")
# Agent, node-zero
middle = []
if 'agent.service' in services:
middle.append('agent')
if 'agent-check-config-image.service' in services:
middle.append('agent_check_config_image')
if 'node-zero.service' in services:
middle.append('node_zero')
if middle:
lines.append(" {rank=same; " + "; ".join(middle) + ";}")
# Invisible edges for layout to keep initramfs files on the left
if '/usr/local/bin/agent-tui' in files:
tui_id = self._file_to_id('/usr/local/bin/agent-tui')
if 'agent-interactive-console.service' in services:
lines.append(f" agent_interactive_console -> {tui_id} [style=invis, constraint=false];")
if 'agent-interactive-console-serial@.service' in services:
lines.append(f" agent_interactive_console_serial -> {tui_id} [style=invis, constraint=false];")
# Force copy-files to be on the far left
# Create invisible edges to establish left-to-right ordering in the bottom rank
if '/usr/lib/dracut/hooks/pre-pivot/99-agent-copy-files.sh' in files:
copy_id = self._file_to_id('/usr/lib/dracut/hooks/pre-pivot/99-agent-copy-files.sh')
# Create chain: copy-files → selinux → pre-network-manager-config → ...
lines.append(f" {copy_id} -> selinux [style=invis];")
# Continue the chain to establish full ordering
lines.append(f" selinux -> pre_network_manager_config [style=invis];")
lines.append(f" pre_network_manager_config -> set_hostname [style=invis];")
if 'iscsistart.service' in services:
lines.append(f" set_hostname -> iscsistart [style=invis];")
# Keep config-image files on the left in unconfigured_ignition workflow
if workflow == 'unconfigured_ignition':
if 'load-config-iso@.service' in services and '/etc/assisted/rendezvous-host.env' in files:
env_id = self._file_to_id('/etc/assisted/rendezvous-host.env')
lines.append(f" load_config_iso -> {env_id} [style=invis, constraint=false];")
return lines
def main():
"""Generate all workflow diagrams."""
script_dir = Path(__file__).parent
# Go up to project root and find units directory
project_root = script_dir.parent.parent.parent.parent
units_dir = project_root / "data" / "data" / "agent" / "systemd" / "units"
if not units_dir.exists():
print(f"Error: Units directory not found: {units_dir}")
return 1
print(f"Parsing systemd units from: {units_dir}")
parser = SystemdParser(units_dir)
parser.parse_all()
print(f"Parsed {len(parser.units)} unit files")
# Filter by workflow
filter_engine = WorkflowFilter()
workflows = {
'install_workflow': 'install',
'add_nodes_workflow': 'add_nodes',
'interactive': 'interactive',
'unconfigured_ignition_and_config_image_flow': 'unconfigured_ignition',
}
# First get install services for comparison
install_services = filter_engine.filter_workflow(parser.units, 'install')
generator = GraphVizGenerator(parser.units, install_services)
for output_name, workflow_key in workflows.items():
services = filter_engine.filter_workflow(parser.units, workflow_key)
print(f"\nGenerating {output_name}: {len(services)} services")
dot_content = generator.generate_workflow(workflow_key, services)
output_file = script_dir / f"{output_name}.dot"
with open(output_file, 'w') as f:
f.write(dot_content)
print(f" Written to: {output_file}")
print("\nGeneration complete!")
print("Run 'make' to regenerate PNG files from the updated DOT sources")
return 0
if __name__ == '__main__':
exit(main())