Add sequence diagrams for pxe_ipmi driver

Add sequence diagrams generated by sphinxcontrib-seqdiag
along with the raw text that generated then, so that it can be
updated easily later.

The diagrams were created originally by Devananda van der Veen,
and used in OpenStack Summit YVR.

Ref)
* https://www.openstack.org/summit/vancouver-2015/summit-videos
/presentation/isn-and-039t-it-ironic-the-bare-metal-cloud
* http://devananda.github.io/talks/isnt-it-ironic.html

Change-Id: I47ff02c6cb4764c1740d0924668714ed205b3d9b
This commit is contained in:
Shuichiro MAKIGAKI 2015-06-26 18:28:19 +09:00
parent daeebc0607
commit 428f0367b7
3 changed files with 97 additions and 0 deletions

View File

@ -9,6 +9,7 @@ extensions = ['sphinx.ext.autodoc',
'sphinx.ext.viewcode', 'sphinx.ext.viewcode',
'sphinxcontrib.httpdomain', 'sphinxcontrib.httpdomain',
'sphinxcontrib.pecanwsme.rest', 'sphinxcontrib.pecanwsme.rest',
'sphinxcontrib.seqdiag',
'wsmeext.sphinxext', 'wsmeext.sphinxext',
'oslosphinx', 'oslosphinx',
] ]
@ -80,3 +81,7 @@ latex_documents = [
'manual' 'manual'
), ),
] ]
# -- Options for seqdiag ------------------------------------------------------
seqdiag_html_image_format = "SVG"

View File

@ -235,3 +235,94 @@ Deploy Process
#. The bare metal node status is updated and the node instance is made #. The bare metal node status is updated and the node instance is made
available. available.
Example 1: PXE Deploy Process
--------------------------------
.. seqdiag::
:scale: 80
:alt: pxe_ipmi
diagram {
Nova; API; Conductor; Neutron; "TFTP/HTTPd"; Node;
activation = none;
span_height = 1;
edge_length = 250;
default_note_color = white;
default_fontsize = 14;
Nova -> API [label = "Set instance_info", note = "image_source\n,root_gb,etc."];
Nova -> API [label = "Set provision_state"];
API -> Conductor [label = "do_node_deploy()"];
Conductor -> Conductor [label = "Cache images"];
Conductor -> Conductor [label = "Build TFTP config"];
Conductor -> Neutron [label = "Update DHCPBOOT"];
Conductor -> Node [label = "IPMI power-on"];
Node -> Neutron [label = "DHCP request"];
Neutron -> Node [label = "next-server = Conductor"];
Node -> Conductor [label = "Attempts to tftpboot from Conductor"];
"TFTP/HTTPd" -> Node [label = "Send deploy kernel, ramdisk\nand config"];
Node -> Node [label = "Runs deploy\nramdisk"];
Node -> Node [label = "Exposes disks\nvia iSCSI"];
Node -> API [label = "POST /vendor_passthru?method=pass_deploy_info"];
API -> Conductor [label = "Continue deploy"];
Conductor -> Node [label = "iSCSI attach"];
Conductor -> Node [label = "Copies user image"];
Conductor -> Node [label = "iSCSI detach"];
Conductor -> Node [label = "Sends 'DONE' message"];
Conductor -> Conductor [label = "Mark node as\nACTIVE"];
Node -> Node [label = "Terminates iSCSI endpoint"];
Node -> Node [label = "Reboots into\nuser instance"];
}
(From a `talk`_ and `slides`_)
Example 2: Agent Deploy Process
---------------------------------
.. seqdiag::
:scale: 80
:alt: pxe_ipmi_agent
diagram {
Nova; API; Conductor; Neutron; "TFTP/HTTPd"; Node;
activation = none;
edge_length = 250;
span_height = 1;
default_note_color = white;
default_fontsize = 14;
Nova -> API [label = "Set instance_info", note = "image_source\n,root_gb,etc."];
Nova -> API [label = "Set provision_state"];
API -> Conductor [label = "do_node_deploy()"];
Conductor -> Conductor [label = "Cache images"];
Conductor -> Conductor [label = "Update pxe,\ntftp configs"];
Conductor -> Neutron [label = "Update DHCPBOOT"];
Conductor -> Node [label = "power on"];
Node -> Neutron [label = "DHCP request"];
Neutron -> Node [label = "next-server = Conductor"];
Node -> Conductor [label = "Attempts tftpboot"];
"TFTP/HTTPd" -> Node [label = "Send deploy kernel, ramdisk and config"];
Node -> Node [label = "Runs agent\nramdisk"];
Node -> API [label = "lookup()"];
API -> Conductor [label = "..."];
Conductor -> Node [label = "Pass UUID"];
Node -> API [label = "Heartbeat (UUID)"];
API -> Conductor [label = "Heartbeat"];
Conductor -> Node [label = "Continue deploy: Pass image, disk info"];
=== Node downloads image, writes to disk ===
Node -> API [label = "Heartbeat periodically"];
API -> Conductor [label = "..."];
Conductor -> Node [label = "Is deploy done yet?"];
Node -> Conductor [label = "Still working..."];
=== When deploy is done ===
Conductor -> Neutron [label = "Clear DHCPBOOT"];
Conductor -> Node [label = "Set bootdev HDD"];
Conductor -> Node [label = "Reboot"];
Node -> Node [label = "Reboots into\nuser instance"];
}
(From a `talk`_ and `slides`_)
.. _talk: https://www.openstack.org/summit/vancouver-2015/summit-videos/presentation/isn-and-039t-it-ironic-the-bare-metal-cloud
.. _slides: http://devananda.github.io/talks/isnt-it-ironic.html

View File

@ -18,5 +18,6 @@ testtools>=1.4.0
# Doc requirements # Doc requirements
sphinx!=1.2.0,!=1.3b1,<1.3,>=1.1.2 sphinx!=1.2.0,!=1.3b1,<1.3,>=1.1.2
sphinxcontrib-pecanwsme>=0.8 sphinxcontrib-pecanwsme>=0.8
sphinxcontrib-seqdiag
oslosphinx>=2.5.0 # Apache-2.0 oslosphinx>=2.5.0 # Apache-2.0