Compare commits

..

1816 commits

Author SHA1 Message Date
Zuul
09761d9549 Merge "Add positive port api category/vendor field test" 2026-01-15 18:23:15 +00:00
Zuul
83d48c2c56 Merge "fix: port endpoints did not return vendor and category and fix docs" 2026-01-15 18:23:09 +00:00
Zuul
ca6390f98b Merge "Simplify ovn vtep microversion logic" 2026-01-15 08:31:06 +00:00
Julia Kreger
7b4699f409 Add positive port api category/vendor field test
Looking at the reported issues with tests/responses,
I wondered how it was missed, and it was because there
was no test. So now that we are fixing it, add the test.

Change-Id: Ia1f5dee01d31880aedd1e78710054ef079708d10
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2026-01-14 07:05:44 -08:00
Zuul
d40ec68fac Merge "Soft power off before cleaning up inspection ramdisk" 2026-01-14 00:35:42 +00:00
Zuul
af5a52bea3 Merge "Fix order of disable_ramdisk validation" 2026-01-14 00:18:06 +00:00
Zuul
a80a81f105 Merge "Use common request_id middleware" 2026-01-14 00:18:01 +00:00
Zuul
ce0ce2ee0b Merge "Clear image cache on deployment failure" 2026-01-14 00:17:55 +00:00
Jay Faulkner
3f0f733892 Simplify ovn vtep microversion logic
During review for the commit that introduced this microversion, it was
pointed out that a single method was more readable. This is the promised
follow-up to that request.

Signed-off-by: Jay Faulkner <jay@jvf.cc>
Change-Id: Id7fed978e7e6c5d739906576de1ed339fe5b28d9
2026-01-13 14:48:25 -08:00
Doug Goldstein
b262302921
fix: port endpoints did not return vendor and category and fix docs
The port API endpoints were not returning the vendor and category fields
when they should have been. A number of places the api-ref was incorrect
and missed adding information about the vendor and category fields but
other fields were omitted as well.

Change-Id: Iaa19c384556b4c7453141c14ea76700c6ecae05d
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2026-01-13 13:47:23 -06:00
Zuul
d747354017 Merge "Fix async periodic on redfish for servicewait" 2026-01-12 14:11:18 +00:00
Zuul
29039b1fa9 Merge "Add generic switch driver support" 2026-01-12 13:50:08 +00:00
Zuul
0c2a8f7c29 Merge "Introduce switch driver base class" 2026-01-12 13:50:00 +00:00
Zuul
a2594a6e5b Merge "Add two phase driver factor initialization" 2026-01-12 13:49:54 +00:00
Afonne-CID
922f56eb12 Fix order of disable_ramdisk validation
Validate ``disable_ramdisk`` after runbook resolution, when available.

Partial-Bug: #2137065
Change-Id: I775120d263177f56bd4b96e435a553dc2f52be9e
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2026-01-12 02:42:23 +01:00
Zuul
118d2e3284 Merge "Silence loud logging when no NetworkAdapters" 2026-01-10 20:33:14 +00:00
Zuul
4d061bea72 Merge "Add release mapping alias for 2025.2" 2026-01-10 18:01:37 +00:00
Zuul
e76ff8222c Merge "fix: bios fields could not be fetched via the API" 2026-01-07 22:11:52 +00:00
Julia Kreger
a0968f8413 Add release mapping alias for 2025.2
When we create major release mappings, we should not forget to
include the alias mapping so users don't have to look it up
separately.

Change-Id: If1970f0d63be220c45bec272187502954ced2adf
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2026-01-07 10:42:16 -08:00
Zuul
c2b5580b75 Merge "fix: report a better error in validate-interfaces" 2026-01-07 15:20:01 +00:00
Doug Goldstein
aa748ea919
fix: bios fields could not be fetched via the API
In Ie86ec57e428e2bb2efd099a839105e51a94824ab this code was added but it
appears to have been targeting an earlier version of the spec index
Ib93e62076207e3e25960111bd0b46b83fe481c69. Up to version 8 of the spec
there is mention of a 'registry' DB field which would have been added
and then parsed in a get_registry_fields() helper method. But it was
ultimately dropped. This bit of code still contained those references
resulting in the endpoint returning errors.

Closes-Bug: 2137596
Change-Id: I79ed016edd2ea6bfb94bf303f1e815b4d9b16dfd
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2026-01-06 16:37:54 -06:00
Jay Faulkner
18bedb69fd Silence loud logging when no NetworkAdapters
This reduces logging when NetworkAdapters are missing from a redfish bmc
from warning level to debug level. This resolves an issue where loud
logging was reporting on hardware without redfish NetworkAdapters
support.

Generated-by: Claude-code 2.0
Closes-bug: #2133727
Signed-off-by: Jay Faulkner <jay@jvf.cc>
Change-Id: If48757c6ec4a1f7978bd973830020161c55922e4
2026-01-06 10:31:13 -08:00
Doug Goldstein
d56a70e8ab
fix: report a better error in validate-interfaces
When validate-interfaces runs if there is no interfaces key then we
would just have a KeyError exception that would be logged to the node.
This provides a clearer message back as to why this happened.

Change-Id: I307848a9a1733ecff534ae37541e59465b4e96b7
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2026-01-06 09:04:26 -06:00
Julia Kreger
98cda8f2c5 Fix async periodic on redfish for servicewait
sdmitriev1 reported issues using the service verb to perform firmware
updates utilizing the management interface. Turns out we had a bug
which was not detected previously as the tested paths went through
firmware interface updates and the dell idrac variation interface.

In any event, this change should fix these issues. Also adds deploywait,
because operators can choose different firmware for deploy templates as
well, and just to be on the safe side while also matching the other
step handling logic.

Further enough, we needed to properly call resumption of the next
step, which was furhter pointed out by the reporter.

Claude was kind enough to write some unit tests, and noted as assisted
by for it's assistance.

Closes-Bug: 2136895
Assisted-By: Claude Code/Claude Sonnet 4
Change-Id: I786c90effda9892bfef3a90700d1fc2a3372cfde
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
Co-Authored-By: Stanislav Dmitriev <sdmitriev1@gmail.com>
2026-01-05 09:05:03 -08:00
MahnoorAsghar
7b79d62a9d Soft power off before cleaning up inspection ramdisk
Change-Id: I86a2b0bdf6ca51e8be1e1350e7e1d69ae9721cea
Signed-off-by: Mahnoor Asghar <masghar@redhat.com>
2026-01-05 16:33:44 +01:00
Takashi Kajinami
5f59aa0b28 Use common utility to wrap IPv6 address
A similar function is provided by oslo_utils.netutils .

Change-Id: I6b24ab9deedf9e9802ef1bb5701ddeea91caed69
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-12-26 03:40:10 +00:00
Takashi Kajinami
8200f0f5df Adjust url to pull dnsmasq
It seems http:// is quite unstable while git:// is stable.

Change-Id: Iedd7356eb3777ce829961ee6392fbb677f26ae22
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-12-24 14:45:12 +00:00
Zuul
6a18c386a6 Merge "Use oslo.config to split [console] port_range" 2025-12-22 21:02:58 +00:00
Takashi Kajinami
9c5fb01f39 Use oslo.config to split [console] port_range
Change-Id: I5687c400b3aa7a8c99e4bfb09ec283ea8808cfd2
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-12-20 15:49:05 +00:00
Takashi Kajinami
b51930c0d2 Validate [molds] storage while loading config files
... instead of only documenting the valid choices.

Change-Id: I5f73da7f69242ec21dd60da36e7b176213888db1
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-12-20 19:38:05 +09:00
Takashi Kajinami
43c599750a Use common request_id middleware
... instead of duplicating similar logics.

Note that this introduces the X-OpenStack-Request-Id response header,
along with the existing OpenStack-Request-Id , because X-... is
globally used in multiple OpenStack services.

Change-Id: Ieeb9ed606af615f97373a4d37c7d3954b2845bd5
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-12-20 19:30:43 +09:00
Zuul
534e9ff6b8 Merge "Support filtering portgroups by shard" 2025-12-19 16:51:36 +00:00
Zuul
3b4e3801a1 Merge "Remove ovn vtep support" 2025-12-18 23:10:55 +00:00
Zuul
0b6126ce28 Merge "OCI Basic Auth/Tag access" 2025-12-18 22:57:32 +00:00
Zuul
d069f2a886 Merge "fix redfish inspect system product name" 2025-12-18 21:01:37 +00:00
Jay Faulkner
4b58b8a823 Support filtering portgroups by shard
This was somehow missed during initial implementation. Adding ability to
filter portgroup by shard. This was mostly vibe coded with claude, with
me interupting to suggest better implementations when it did something
silly. Tested manually by a human using fake drivers :).

Closes-bug: #2134566
Generated-by: Claude code (claude)
Signed-off-by: Jay Faulkner <jay@jvf.cc>
Change-Id: Ic67c02763c2d832f616dc4526e4be891d639b976
2025-12-18 11:24:34 -08:00
Zuul
92ef93c384 Merge "fix: iPXE boot interface PXE capability detection" 2025-12-18 17:54:36 +00:00
Zuul
50aa083013 Merge "OCI: Add an option to fallback to HTTP" 2025-12-18 16:31:46 +00:00
Milan Fencik
9e47609f00 fix: iPXE boot interface PXE capability detection
The neutron network interface's add_ports_to_network() function only
checked for 'pxe_boot' capability when determining PXE capability,
but iPXE is also a form of PXE booting and should be treated the
same way. This caused inconsistent behavior for boot interfaces like
'http-ipxe' that have 'ipxe_boot' capability but not 'pxe_boot'
capability.

Without this fix, iPXE boot interfaces were incorrectly treated as
non-PXE capable, causing the neutron interface to create ports for
all baremetal ports with local_link_connection info during cleaning
operations, regardless of their pxe_enabled setting.

This change adds 'pxe_boot' capability to both iPXEBoot and
iPXEHttpBoot classes, ensuring that iPXE boot interfaces are
correctly recognized as PXE-capable.

Additionally, this adds the missing pxe_boot capability check to
the remove_ports_from_network() function, which was previously
missing this logic entirely. This ensures consistent port creation
and deletion behavior, preventing orphaned neutron ports after
cleaning operations.

Change-Id: I7721f917fb723e8a4cef69e0f7be1ece0238d7ed
Signed-off-by: Milan Fencik <milan.fencik@rackspace.co.uk>
2025-12-18 12:35:48 +00:00
Zuul
4bef17b9bc Merge "fix loading of built-in inspection rules" 2025-12-18 07:37:56 +00:00
Doug Goldstein
555c019bb7
fix loading of built-in inspection rules
The built-in inspection rules cannot be loaded because the jsonschema
validates them against the expected API however the built-in rules had a
'built-in' key that is not part of the schema and included the 'scope'
key which was ultimately dropped before inspection rules support landed.
The built-in rules also did not validate that the data was a list of
rules before attempting to utilize it giving an incorrect error.

Closes-Bug: 2136776
Change-Id: I36c290c9f92189281e11633e9a587918b0699ae3
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-12-17 16:44:09 -06:00
Zuul
1fecbce515 Merge "fix: inspection rules docs to match the code" 2025-12-17 19:48:01 +00:00
Zuul
78323a9016 Merge "update inspection rules docs and code to the same order" 2025-12-17 19:47:56 +00:00
Doug Goldstein
2c118a4d4c
fix: inspection rules docs to match the code
These inspection rules actions are implemented but were not documented
so add some documentation for them. The redfish inspection interface
also supports inspection rules.

Change-Id: I65894191affd9171bf68dc9b15725ed34a9724f9
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-12-17 10:18:52 -06:00
Afonne-CID
c11e12a45b Omit CapacityBytes for Redfish RAID MAX size_gb
When size_gb='MAX' is specified, Ironic was calculating the maximum
volume size and including it in ``CapacityBytes``. This calculated size
doesn't account for controller metadata overhead, causing iLO and other
controllers to reject the request with UnsupportedOperation.

Fix by omitting ``CapacityBytes`` from the Redfish payload when
size_gb='MAX', allowing the controller to calculate the optimal size
automatically and the actual volume size is queried and stored after
creation via ``update_raid_config()``.

Unit tests generated by AI.

Closes-Bug: #2132936
Assisted-by: Claude Sonnet 4.5
Change-Id: Ica2e31783b18fc2306369b0ee0d467aca17d4975
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-12-17 13:39:23 +01:00
Doug Goldstein
ade41cae47
fix redfish inspect system product name
The intention of this code is to read the system product name which is
stored in the model field per the Redfish spec and not in the name field
which will always store the name of the object we are working with. This
results in the value always being 'System'.

Closes-Bug: 2136233
Change-Id: I375fbe27253d7965e458be7b147d5b72cffa4e89
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-12-16 16:55:13 -06:00
Doug Goldstein
0255cc98a7
update inspection rules docs and code to the same order
Updated the docs and code to match the same order and to break out each
operation like it is in the code. Fixed incorrect indent of an example.
This is just mechanical to make visual inspection of the docs to the
code easier.

Change-Id: Ic96c5a1993d20347968c23c60393a4cde2de9a0c
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-12-16 16:42:51 -06:00
Zuul
6362fa4663 Merge "Trait Based Networking Simulator" 2025-12-16 20:37:00 +00:00
Allain Legacy
a6b3f1e331 Add generic switch driver support
Implements the generic-switch wrapper around the
networking-generic-switch implementation.

- GenericSwitchDriver implementation integrating with the
  networking-generic-switch library for managing physical network
  switches from multiple vendors
- Switchport configuration operations (update_port, reset_port) with
  support for access/trunk modes and VLAN management
- LAG method stubs for future implementation
- Configuration translation using driver_translators from the
  framework to convert between ironic and driver formats

This driver enables the networking service to manage physical switch
port configurations for bare metal node network connectivity. The
driver is loaded and managed through the driver factory and adapter
infrastructure from earlier commits.

Related-Bug: 2113769
Assisted-by: Claude/sonnet-4.5
Change-Id: I7f5d3c9996e1641ce3b309dbd67ba6a0c6c47d78
Signed-off-by: Allain Legacy <alegacy@redhat.com>
2025-12-16 09:50:08 -05:00
Allain Legacy
006ca964bc Introduce switch driver base class
This change establishes the base framework for switch drivers in the
networking service by introducing the SwitchDriverBase abstract class
that defines the required interface for all switch driver implementations.

It also restructures how the adapter and translators are wired
together.  This is now done implicitly based on the loaded drivers
rather than explicitly using hard coded driver names.

Key changes:
- Add SwitchDriverBase abstract class defining the switch driver interface
- Add NoOpSwitchDriver implementation for testing and development
- Move BaseTranslator from driver_translators module to base module
- Refactor driver adapter to accept drivers and register their translators
- Update networking manager initialization order
- Add entry point for noop switch driver

Related-Bug: 2113769
Assisted-by: Claude/sonnet-4.5
Change-Id: I2feaad3058717e11948fa476debe038ef5b9caf8
Signed-off-by: Allain Legacy <alegacy@redhat.com>
2025-12-16 09:50:08 -05:00
Allain Legacy
4ce577d28d Add two phase driver factor initialization
This extends the base driver factory to allow for a 2 phase
initialization of drivers for some use cases.  This allows
loading the classes separately from initialization the
instances of the drivers in cases where the class needs to
be examined or a class method needs to be invoked prior
to initialization of the driver.

Related-Bug: 2113769
Assisted-by: Claude/sonnet-4.5
Change-Id: Ifc505abd86c7b425c12de2090f2bc0262ff17527
Signed-off-by: Allain Legacy <alegacy@redhat.com>
2025-12-16 09:50:08 -05:00
Zuul
1c1d885e8e Merge "Use per-node external_http_url for configdrive ISO" 2025-12-16 09:33:14 +00:00
Zuul
6fec6712f8 Merge "Add Redfish LLDP data collection support to the Redfish inspection interface." 2025-12-16 00:20:45 +00:00
Julia Kreger
52300e0a62 OCI Basic Auth/Tag access
In order to support the deployment of OCI images utilizing bifrost,
we also need to explicitly support basic authentication.

This has been extended to support inclusion of the authentication
credentials into the pull secret string, and fallback on the deploy
interface settings for static configuration. While this will likely
never be perfect, it is at least a forward step to better supporting
a variety of use cases.

Additionally, doing some of this highlighted some extraneous guard
rail style checks which exist elsewhere in the overall image handling
flow. A exeception check was added to prevent tag based deployments
from failing because the existing code structure of the guard rail
checks cannot gain the context around basic auth.
In part becasue the check directly uses the image_source as well,
as opposed to any other state data which is presently available
in deploy_utils when the image information is identified.
That situation highlights why additional fixes are needed,
but bug 2133885 was opened for that separately.

Claude also helped me out with the unit tests.

Assisted-By: Claude Code - Claude Sonnet 4.5
Change-Id: I13f4d5cd8b98ad88e7b6088c79c7b014b6461668
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-12-15 13:13:52 -08:00
Julia Kreger
595258da9f OCI: Add an option to fallback to HTTP
While working on trying to get OCI support in CI, I realized that the
default pattern setup with Bifrost was to setup a registry *without*
HTTPS.

This is different from the common practice and expectation of operational
OCI registries always utilizing HTTPS as the underlying transport mechanism.

The net result is an idea of offering the ability to "fall back" to HTTP
automatically, and make it a configuration option which needs to be
chosen by an operator.

The code pattern is such that the invocation of the client code paths
automatically identify the SSLError, and then attempt to fallback
to HTTP, while also saving the fallback on the class instance so the
additional URL generation calls for the underlying HTTP(S) client
gets an appropriate URL.

By default, this new option is disabled.

Claude helped with the tests, which was nice of it.

Assisted-By: Claude Code - Claude Sonnet 4.5
Change-Id: I3f28c8d6debe25b63ca836d488bc9fd8541b04d9
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-12-15 13:08:50 -08:00
Zuul
9c00256b3b Merge "fix: agent inspection hooks failure does not clean up" 2025-12-15 10:17:53 +00:00
Zuul
bdbb371ecd Merge "Use native override of RequestContext.from_environ" 2025-12-15 10:15:34 +00:00
Zuul
7fe20fe31f Merge "Replace remaining usage of policy.json" 2025-12-15 01:11:35 +00:00
Zuul
078728aa34 Merge "doc: trivial: Quick revision of README" 2025-12-15 01:11:24 +00:00
Zuul
6ed4f6f561 Merge "remove sushy_oem_idrac usage" 2025-12-15 01:11:18 +00:00
Takashi Kajinami
2570f7559f Use native override of RequestContext.from_environ
The from_environ method provides the native interface (by keyword
arguments) to pass additional arguments to build a RequestContext
instance.

Also fix the ignored kwargs.

Change-Id: Id02e2212e1877c7913218d87188ba8b359ce2757
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-12-14 19:38:10 +09:00
Zuul
aa8ae96017 Merge "Move check_image_size to deploy_utils" 2025-12-14 08:11:28 +00:00
Doug Goldstein
30113a4c23
fix: agent inspection hooks failure does not clean up
When the using the agent inspector interface and an exception happens
during execution of the hook, the node is not cleaned up resulting in
stale Neutron ports and ramdisk files.

Closes-Bug: 2135265
Change-Id: I69ceec12fc0beea586176a768d864a22261cdb93
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-12-12 15:23:57 -06:00
Zuul
42883161cb Merge "docs: a little more clarity around the state of ipxe+uefi" 2025-12-12 19:00:01 +00:00
Zuul
a4250a6d62 Merge "Include all relevant error messages in exception" 2025-12-12 18:17:01 +00:00
Nidhi Rai
e273bb958a Add Redfish LLDP data collection support to the Redfish inspection interface.
- _collect_lldp_data(): Collects LLDP data from Redfish NetworkAdapter Ports via Sushy library, walking the Chassis/NetworkAdapter/Port hierarchy
- Integration with inspect_hardware(): LLDP collection is called during hardware inspection and results are stored in plugin_data['parsed_lldp']

The implementation supports standard Redfish LLDP data from Port.Ethernet.LLDPReceive fields and can be extended by vendor-specific implementations (like,  Dell DRAC OEM endpoints) through method overriding.

Change-Id: I25889b2a2eb8f6a2d796dfbeb598875a7c07b22c
Signed-off-by: Nidhi Rai <nidhi.rai94@gmail.com>
2025-12-12 09:40:00 +05:30
Takashi Kajinami
dcc668fae9 Replace remaining usage of policy.json
It was deprecated long ago in favor of policy.yaml and is being removed
soon.

Change-Id: I1a5804cd15e1bc79ad1dc9900e61584902ef4468
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-12-12 01:40:56 +09:00
Zuul
530c88757a Merge "[api-ref] Fix api-ref to mention list port by cg" 2025-12-11 14:46:30 +00:00
Doug Goldstein
b47afbca31
remove sushy_oem_idrac usage
Ironic now depends on a minimum version of sushy that has integrated
sushy_oem_idrac into the code base so there is no point in falling back
to pulling in sushy_oem_idrac so remove the path.

Change-Id: I17217e0fe07b4819863706f473af12d87da46429
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-12-11 08:19:20 -06:00
Zuul
9fdd30545c Merge "is-empty inspection rule to handle missing field" 2025-12-11 12:15:42 +00:00
Zuul
f09d80cce5 Merge "Separate states code from states constants" 2025-12-11 05:33:25 +00:00
Jay Faulkner
2622864b70 [api-ref] Fix api-ref to mention list port by cg
Ports can be listed by conductor group since Flamingo, but due to an
error in the api-ref update, we weren't properly documenting it.

Change-Id: I98b329897946ef05ff82df5f1683075f17ecd3c0
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
Signed-off-by: Jay Faulkner <jay@jvf.cc>
2025-12-10 11:17:07 -08:00
cid
7e4ffe7c80 Include all relevant error messages in exception
Retry failures report only the last error which could be misleading,
so include all relevant errors in the final exception.

Closes-Bug: #2098977
Change-Id: I8c0fb0328a6b3ee084813961d9a959af996a6dcb
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-12-10 19:31:27 +01:00
Afonne-CID
ca0ee56ccc is-empty inspection rule to handle missing field
Pass the ``is-empty`` rule check when checking fields that don't
exist in the inventory.

Closes-Bug: #2132346
Change-Id: I177740dd3a8558ed357af22c581e5cbf1c3e862a
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-12-10 15:32:29 +01:00
Afonne-CID
041f0a586d Move check_image_size to deploy_utils
Move the image size check earlier in the deploy flow so it runs only
when it matters and reuses already-fetched image info.

Closes-Bug: #2133885
Change-Id: I40518762e3032bbdcfe1d8e7e929147a761a95f8
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-12-10 15:14:15 +01:00
Zuul
4c5cbeb1ef Merge "Add PCIe function fields to redfish inspection" 2025-12-10 04:11:33 +00:00
Zuul
a7dc759140 Merge "fix: do not allow nested paths in loader_file_paths" 2025-12-09 22:41:27 +00:00
Zuul
6ed4bfa5d8 Merge "Trivial: Fix instance_name policy name" 2025-12-09 21:33:34 +00:00
Zuul
f0d8016bdb Merge "Add documentation regarding the is_root_volume RAID config" 2025-12-09 19:53:10 +00:00
Zuul
d32a13212a Merge "Implement networking service RPC API methods" 2025-12-09 17:33:02 +00:00
Doug Goldstein
a382b21e6e
fix: do not allow nested paths in loader_file_paths
The intention was not to allow nested paths here but instead to only use
base paths to files we will serve up.

Change-Id: I877a7da4ed41bceb9f6f4ee229e8e9dc938d9e5b
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-12-09 09:43:13 -06:00
Jay Faulkner
c69caf28e8
Separate states code from states constants
Currently, the nova virt driver for ironic has a file containing nothing
but our states as constants. A recent bug was caused, in part, by these
not being properly updated. The goal here is to move ironic state
machine code and constants into separate files -- once merged, I will
update the nova driver to use a copy of this file (and add a comment to
the file here saying it's synced over there). This should help prevent
this kinda issue in the future and in the long run cause less duplicated
work.

Assisted-by: Claude Code (claude)
Signed-off-by: Jay Faulkner <jay@jvf.cc>
Change-Id: Ief4533b69899c893f150ef3a7006fb99f7e42964
2025-12-08 14:17:14 -08:00
Julia Kreger
094337f14d Remove ovn vtep support
As discussed during the PTG, VTEP support for OVN is being
removed in order to eliminate confusion and also the Ironic
community is working on a suitable solution to these problems
which integrates with Neutron.

Closes-Bug: 2106460
Change-Id: I4147371c28cf786edb6f29ea83e3b7103f268347
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
Signed-off-by: Jay Faulkner <jay@jvf.cc>
2025-12-08 13:28:30 -08:00
Zuul
04aa88aae4 Merge "Use new bifrost ci job name" 2025-12-06 19:03:52 +00:00
Afonne-CID
2756b8e81b Trivial: Fix instance_name policy name
Change-Id: Ie9c8eb16747a7abd21fb08cf8d34226c22157d89
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-12-06 01:09:44 +01:00
Zuul
d2d4c57ffa Merge "Add a kubernetes provider for console container" 2025-12-05 16:38:18 +00:00
Zuul
6b6b932714 Merge "Switch graphical console image to ubuntu by default" 2025-12-05 16:38:12 +00:00
Zuul
ba763f199e Merge "Drop xinetd/tftpd on CentOS 9" 2025-12-05 16:30:11 +00:00
Nidhi Rai
33bfc1e281 Add PCIe function fields to redfish inspection
This patch adds support for extracting PCIe function identification
fields (device_class, device_id, vendor_id, subsystem_id,
subsystem_vendor_id, revision_id) during redfish hardware inspection.

The fields are extracted from PCIe functions and stored in a flat
structure in the inspection inventory, making them available for
inspection rules and hardware identification.

Also adds test coverage including edge cases like
missing PCIe devices, empty collections, and partial data scenarios.

[Removed This changes]Additionally adds system.model field extraction with proper None
handling and test coverage.

Depends-On: I1ec49e35a53abb8efdae639629cd819ccabbe620
Change-Id: I218c3b3865c07cc2c7fffc21a766cdef36759cd8
Signed-off-by: Nidhi Rai <nidhi.rai94@gmail.com>
2025-12-05 11:53:29 +05:30
Zuul
9d572791e4 Merge "Add a conductor liveness check utility script" 2025-12-05 02:04:20 +00:00
Zuul
977300d456 Merge "Generate network plan based on trait based networking config" 2025-12-04 22:55:37 +00:00
Clif Houck
d3d65ee2c6
Trait Based Networking Simulator
Adds a tool that will ingest a TBN configuration file along with test
network/port-like objects in order to simulate how TBN would plan the
network for a node.

Change-Id: Ia7fbb9b651e4ed4c63a105484856de7f38bc541c
Signed-off-by: Clif Houck <me@clifhouck.com>
2025-12-04 15:37:13 -06:00
Zuul
674d21bf4c Merge "split error messages in image cache for more clarity" 2025-12-04 20:22:23 +00:00
Allain Legacy
278cf5f963 Implement networking service RPC API methods
Implements the core business logic for the networking service manager,
replacing stub implementations with fully functional network operations:

- Port configuration methods (update_port, reset_port) with VLAN
  validation and switch driver integration
- Port channel methods (update_portchannel, delete_portchannel) with
  placeholder implementations for future support
- Switch discovery and information retrieval (get_switches)
- Decorator-based serialization for thread-safe switch operations
- Decorator-based VLAN validation against allowed/denied lists
- Dynamic switch driver selection and management using the driver
  framework from the previous commit

This implementation uses the driver factory and adapter infrastructure
to dynamically load and manage switch drivers, enabling support for
multiple switch vendors. The manager coordinates network operations
across distributed switches while maintaining thread safety through
optional per-switch operation serialization.

Related-Bug: 2113769
Assisted-by: Claude/sonnet-4.5
Change-Id: I0722b116d29cddae02a4a79a4ea4b767709ecad2
Signed-off-by: Allain Legacy <alegacy@redhat.com>
2025-12-04 15:06:38 -05:00
Steve Baker
28168c4168 Add a kubernetes provider for console container
A new ``ironic.console.container`` provider is added called
``kubernetes`` which allows Ironic conductor to manage console
containers as Kubernetes pods. The kubernetes resources are defined in
the template file configured by ``[vnc]kubernetes_container_template``
and the default template creates one secret to store the app info, and
one pod to run the console container.

It is expected that Ironic conductor is deployed inside the kubernetes
cluster. The associated service account will need roles and bindings
which allow it to manage the required resources (with the default
template this will be secrets and pods).

This provider holds the assumption that ironic-novnc will be deployed in
the same kubernetes cluster, and so can connect to the VNC servers via
the pod's ``status.hostIP``.

Assisted-By: gemini
Change-Id: Ib91f7d7c15be51d68ebf886e44efaf191a14437b
Signed-off-by: Steve Baker <sbaker@redhat.com>
2025-12-04 11:25:05 -08:00
Steve Baker
856238c56a Switch graphical console image to ubuntu by default
The centos Containerfile still exists and the launch scripts have been
adapted to work on both distros.

The ubuntu container has been tested with noble. The container built
in the CI jobs is bound to the version of ubuntu which the host is
running, which will provide functional testing validation when jobs are
moved to newer releases.

Change-Id: I1954e418543acf939bf65189121484e038f3737c
Signed-off-by: Steve Baker <sbaker@redhat.com>
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-12-04 11:24:43 -08:00
Zane Bitter
eccfb8bb5b Use per-node external_http_url for configdrive ISO
When the per-node external_http_url feature was introduced by
c197a2d8b2, it only applied to a config
floppy. This fix ensures that it is also used for a configdrive ISO. The
previous patch (0d59e25cf8) started using
it for boot ISOs.

Change-Id: I0e1e8dbba5a62a6196a5e6a8a9773fa89db6bc76
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-12-04 11:18:19 -08:00
Clif Houck
68277dd05a
Generate network plan based on trait based networking config
Change-Id: I46c55b424f95df8f811c963ec75e5820124e630f
Signed-off-by: Clif Houck <me@clifhouck.com>
2025-12-04 12:26:56 -06:00
Jakub Jelinek
e4ac3dd76b Add documentation regarding the is_root_volume RAID config
The functionality has been implemented in the change:
https://review.opendev.org/c/openstack/ironic-python-agent/+/963200
This change documents the possibility to specify the is_root_volume
parameter of the target_raid_config of a node, which either makes
it the root volume, or prevents it from becoming a root volume.

Change-Id: I72fab180eaf361f9bedb04a1a24dfb9bcdf230cf
Signed-off-by: Jakub Jelinek <jakub.jelinek@cern.ch>
2025-12-04 13:04:07 +00:00
Allain Legacy
05b9dc22c7 Add networking driver framework infrastructure
Implements the foundational driver framework for the networking service,
providing abstraction and loading mechanisms for network switch drivers:

- Driver factory for loading and managing switch driver plugins using
  stevedore, with support for multiple concurrent drivers
- Driver adapter for preprocessing switch configuration files and
  managing driver lifecycle
- Driver translators for converting between ironic network data formats
  and driver-specific configuration formats
- Utility functions for network configuration validation, VLAN range
  parsing, and RPC transport detection

This framework provides the foundation for integrating various network
switch drivers (e.g., networking-generic-switch) with the ironic
networking service. The framework is used by the manager implementation
added in the subsequent commit.

Related-Bug: 2113769
Assisted-by: Claude/sonnet-4.5
Change-Id: Ifb6e662ef59f9e12aad7c34356d2e78c3ebb4143
Signed-off-by: Allain Legacy <alegacy@redhat.com>
2025-12-03 07:38:12 -05:00
Steve Baker
194b638c72 Add a conductor liveness check utility script
This script runs a liveness check on the configured conductor hostname
and will fail if the conductor is not online. Its intended purpose is to
be used as a kubernetes pod startup or liveness probe for the conductor
container.

Change-Id: I88288e0d7a1da4ec99f31c20771299cce2499bf0
Signed-off-by: Steve Baker <sbaker@redhat.com>
2025-12-03 10:22:09 +13:00
Zuul
7495f77258 Merge "Trivial: Fix typo in documentation" 2025-12-02 15:49:38 +00:00
Afonne-CID
1b2504428c Trivial: Fix typo in documentation
Change-Id: Ie43b754f87f9fa0e6e26c17c9a1f30936b96f868
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-12-02 14:50:46 +01:00
Afonne-CID
91159a4394 Drop xinetd/tftpd on CentOS 9
Drop xinetd/tftpd on CentOS 9 to fix TFTP setup failure

Closes-Bug: #2098533
Assisted-by: Claude 4.5 Sonnet
Change-Id: I5ed12279d446839587c512194d1230a27622eb00
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-12-02 14:49:39 +01:00
Zuul
2ba9e6b598 Merge "fix: ensure that the bootloader path exists" 2025-12-01 16:10:28 +00:00
Zuul
792bc9bed0 Merge "Add standalone networking service for ironic" 2025-12-01 14:20:32 +00:00
Riccardo Pittau
c789f480b3 Use new bifrost ci job name
We only use DIB based ipa ramdisks and changed bifrost jobs
names.

Depends-On: I569a766826405513f7beab5d45a52a8bbf42ddfd
Change-Id: I8dc17087d595872d660c9a90c8dbafef268ad02a
Signed-off-by: Riccardo Pittau <elfosardo@gmail.com>
2025-12-01 15:07:06 +01:00
Zuul
acb78ef560 Merge "Remove ironic-inspector jobs and leftovers from zuul settings" 2025-11-30 18:37:22 +00:00
Zuul
091fc050f8 Merge "Drop remaining references to ironic-inspector" 2025-11-30 17:51:40 +00:00
Takashi Kajinami
2cb813c034 drac: Deprecate unused options
These options have been unused since wsman driver interfaces were
removed[1].

[1] 578f24bf18

Change-Id: Id080693495dde60330a05fb960b5f10a155a3b3c
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-11-28 23:51:25 +09:00
Allain Legacy
b8f3318ca6 Add standalone networking service for ironic
Implements the foundational infrastructure for a new standalone
networking service that can operate independently of the main ironic
conductor. This commit establishes the service skeleton with:

- RPC API layer with oslo.messaging integration for remote calls
- Public API interface for conductor/API to interact with the service
- RPC service implementation for handling network requests
- Stub networking manager with method signatures (implementation
  added in subsequent commit)
- Service entry point (ironic-networking command) for deployment
- Configuration options for service behavior and networking backend
- Infrastructure and packaging changes for the new service

The manager includes stub implementations that raise NetworkError,
with the full implementation of network operations, driver framework
and switch drivers are added in subsequence commits.

Related-Bug: 2113769
Assisted-by: Claude/sonnet-4.5
Change-Id: I351c7afe96cbcebd6b2e2bb5f0b4f17b5d804ceb
Signed-off-by: Allain Legacy <alegacy@redhat.com>
2025-11-27 11:39:59 -05:00
Takashi Kajinami
1991a6de62 Remove ironic-inspector jobs and leftovers from zuul settings
... which were somehow overlooked in the previous attempt.

Change-Id: I242baa622079a3a4facde4cf19fb1818593fb668
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-11-28 01:37:55 +09:00
Takashi Kajinami
d12fc12a88 Drop remaining references to ironic-inspector
Remove a few remaining references to ironic-inspector, which were not
covered by 32dd5ec596 which removed
integration with ironic-inspector.

Change-Id: Ib391c0f697c7f90f99660cf333deb0cd25a3bc05
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-11-28 01:35:34 +09:00
Zuul
f2a3ec5d5e Merge "Move configdrive code to configdrive_utils" 2025-11-26 19:26:58 +00:00
Doug Goldstein
7a0a9ef784
fix: ensure that the bootloader path exists
Ensure that the path where we are copying the bootloader into exists
before we copy the file in. Unfortunately the existing code wouldn't
work in the intended case because os.path.split("snponly.efi") returns
("", "snponly.efi") so we would never pass the first check so we would
not create the path. This keeps the same behavior of allowing a nested
path structure to not change the behavior so that this can be
backportable while fixing the issue and switching the pathlib to provide
a safer interface going forward.

Change-Id: Iaf756f634832310431020abd758b59c749aecb21
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-11-26 10:56:37 -06:00
Zuul
9cf56273cc Merge "fix: use the correct path to the image when deep image inspection is off" 2025-11-26 09:52:52 +00:00
Zuul
de6f5b9e73 Merge "Update release mappings for new ironic release 33.0" 2025-11-25 17:11:31 +00:00
Doug Goldstein
dca688bead
fix: use the correct path to the image when deep image inspection is off
When deep image inspection is disabled, the incorrect path was used to
determine the image format of the file resulting in a no such file or
directory exception which bubbled up and made it appear as if the cache
was missing.

Change-Id: Ibaf1486da9510fdad479523159797815e783e5f6
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-11-25 09:50:35 -06:00
Zuul
d89ed97f60 Merge "chore: bump to latest pre-commit tools" 2025-11-25 10:53:49 +00:00
Zuul
385357ad46 Merge "Fail flat driver rebind when no VIFs are bound" 2025-11-25 10:38:39 +00:00
Riccardo Pittau
643b6ced00 Update release mappings for new ironic release 33.0
To justify a new major release, there were some significant
changes since 32.0, even though not breaking:
Removed inspector inspect interface (was already deprecated)
Removed sushy-oem-idrac from requirements

API & RPC Updates:
API version: 1.101 → 1.104
RPC version: 1.61 → 1.62

New Features:
API 1.104: instance_name field on nodes
API 1.103: category field on portgroups
API 1.102: physical_network field on portgroups

Deprecations:
Final deprecation of irmc hardware type
ilo driver deprecation warning added
Deprecation of ironic.api.wsgi:initialize_wsgi_app

Change-Id: I205e8968a4e74746cab59cf2e737f9c8f3779327
Signed-off-by: Riccardo Pittau <elfosardo@gmail.com>
2025-11-25 10:53:21 +01:00
Zuul
52a5dcff6d Merge "Remove inspector inspect interface" 2025-11-25 06:50:05 +00:00
Zuul
be0cb95a8a Merge "chore: fix spelling mistakes" 2025-11-25 05:51:56 +00:00
Zuul
f270df98ab Merge "chore: disable pycodestyle and pyflakes double runs" 2025-11-25 01:54:35 +00:00
Zuul
7e1885a581 Merge "Configuration file for Trait Based Networking" 2025-11-25 01:44:30 +00:00
Zuul
ade9e864fb Merge "ci: remove snmp ci job" 2025-11-25 01:22:56 +00:00
Zuul
d4ed99aa97 Merge "fix: remove unnecessary trailing slash" 2025-11-25 00:42:24 +00:00
Zuul
fd7f23bf9e Merge "Trait Based Networking Filter Expression Parsing and Base Models" 2025-11-24 22:15:32 +00:00
Zuul
35e46cb95c Merge "Minimize json-rpc client logging" 2025-11-24 20:42:30 +00:00
Zuul
c5fba422f4 Merge "ci: remove metalsmith ci job invocation" 2025-11-24 19:33:38 +00:00
Doug Goldstein
694769f37b
split error messages in image cache for more clarity
Split up the error message to wrap the download and conversion to the
actual file system linking steps.

Co-Authored-By: Marek Skrobacki <skrobul@skrobul.com>
Change-Id: I644fc0ff7d56de43189f572ce3f901ceffc1ffd5
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
Signed-off-by: Marek Skrobacki <skrobul@skrobul.com>
2025-11-24 12:40:10 -06:00
Zuul
2d39702b21 Merge "ci: disable multinode subnode running n-cpu" 2025-11-24 17:03:13 +00:00
Zuul
98e6db993e Merge "fix: glance image member lookup resulted in an empty list always" 2025-11-24 16:40:38 +00:00
Julia Kreger
45de0c123c ci: remove metalsmith ci job invocation
Change-Id: Ieb3418c03be5cbf4d1166362d6bc7e2dc2194dec
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-11-24 16:26:56 +00:00
Pointbr8ker-123
c3428fd4f0 Move configdrive code to configdrive_utils
Moves configdrive utility functions to the more appropriate configdrive
dedicated utils module to improve code organization and separation of
concern.

Closes-Bug: #2113892
Change-Id: I5851e84fe8f15de05dcddca773b1f28f639dc617
Signed-off-by: David Nwosu <nwosudavid13@gmail.com>
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-11-24 17:26:47 +01:00
Julia Kreger
8c9ad92c1e Minimize json-rpc client logging
The json-rpc debug logging can be... very... verbose. And that
verbosity when including all of the data crossing the RPC bus
provides limited value when your just focused on addressing
a performance issue.

The key is much more "when did I send a request" and what
was the ID, and similarly "when did I get a response".

By default, if there is a request ID when we're in debug
logging mode, we will keep the entire result to a brief
result.

Assisted-By: Claude Code - Claude Sonnet 4
Change-Id: Ib6e4db0e8689ed2081f29b1d1d22a7f01a0e1221
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-11-24 07:59:11 -08:00
Doug Goldstein
49def356a0
chore: bump to latest pre-commit tools
Bumps to the latest versions of the tools we use in pre-commit except
for codespell which will come in a follow up.

Change-Id: I61f69d914b28bb13a1183315d6181db872cca638
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-11-23 14:06:28 -06:00
Doug Goldstein
7b2fdd9aaa
chore: fix spelling mistakes
Newer version of codespell finds these.

Change-Id: I1f5e29ce8018d9764394de7dc3c833831d86dfec
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-11-23 14:06:25 -06:00
Doug Goldstein
32bb6e3dff
chore: disable pycodestyle and pyflakes double runs
We are running pycodestyle and pyflakes checks via ruff so we can
disable to double run via hacking using flake8. Remove ignores that were
not used or covered files that did not exist.

Change-Id: I342ef72e0ad007fa6f5b72f634ee90ef30137446
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-11-23 14:06:21 -06:00
Doug Goldstein
9ce7045970
fix: remove unnecessary trailing slash
Change-Id: Ie79f81ec16bf1e9c6eb6d38bce98a3c8c118bec5
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-11-23 14:06:18 -06:00
Doug Goldstein
3d07fdeee8
fix: grammar Ideall -> Ideally
Change-Id: Icafd006a67c7ce555392078a7d240caad784d190
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-11-23 14:06:15 -06:00
Doug Goldstein
8dcb9e23cb
fix: sphinx-lint unbalanced backticks
Change-Id: I7374e7bcd1471a700008efbe84b3817d9bf68746
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-11-23 14:06:11 -06:00
Zuul
fefbf9a32e Merge "Add UT for metrics modules" 2025-11-23 18:43:01 +00:00
Zuul
0027266ffe Merge "pre-commit: Run ruff before hacking" 2025-11-23 16:01:54 +00:00
Zuul
7107a0f183 Merge "Use specific util methods in vfat image creation" 2025-11-23 16:01:49 +00:00
Zuul
3a614de7f1 Merge "trivial: fix benchmark data generation script" 2025-11-22 20:56:29 +00:00
Zuul
ec455d6832 Merge "Fix cleaning example in docs that sets the BMC clock to use correct arg" 2025-11-22 17:22:39 +00:00
Takashi Kajinami
4e5ff9bf02 Drop reference to TripleO
... because the project was retired some time ago.

Change-Id: I41d7656f6c87a340afedcdbf67c582d68a08744d
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-11-22 18:49:35 +09:00
Takashi Kajinami
32dd5ec596 Remove inspector inspect interface
Deprecation of ironic-inspector was announced long ago (during 2023.2
cycle) and ironic-inspector was retired this cycle. So it's time to
drop the all remaining code to force migration to the built-in
agent interface.

Change-Id: I14a87599f9f47b167f8f1a84704982301d033381
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-11-22 18:48:47 +09:00
Zuul
82ee55e280 Merge "Update devstack guides to raise RAM requirement" 2025-11-22 09:35:38 +00:00
Zuul
88c6e21afc Merge "Drop remaining inspector job" 2025-11-22 09:06:24 +00:00
Zuul
50a2fee61e Merge "Fix spelling errors in unit test files" 2025-11-22 07:07:48 +00:00
Zuul
3a6d9e2b73 Merge "Skip BMC detection in IPA for out-of-band management" 2025-11-22 07:07:43 +00:00
Zuul
936d6f698e Merge "trivial: follow-up on ftp enable/disable flag" 2025-11-22 05:01:45 +00:00
Zuul
b521b42f69 Merge "trivial: revise text from mutlinode job changes" 2025-11-22 04:36:17 +00:00
Zuul
43cdd476a1 Merge "Allow detach vif in available state" 2025-11-22 02:34:53 +00:00
Zuul
8ddb504db7 Merge "Make sure [cors] allowed_origin accepts a list value" 2025-11-22 01:56:29 +00:00
Zuul
18c2cb81e8 Merge "pass along physical_network to neutron from the baremetal port" 2025-11-21 23:28:05 +00:00
Zuul
74573ee58b Merge "Include inspector conf groups in sample conf/docs" 2025-11-21 23:09:50 +00:00
Doug Goldstein
7ce4fdfb10
fix: glance image member lookup resulted in an empty list always
The code did not initialize a client so it resulted in an exception
always occurring. It also used the image attribute on the client
attribute of the service but the client attribute of the service is
already the image attribute. Create a wrapper method to use the API
correctly and prevent similar issues.

Closes-Bug: #2099276
Change-Id: Ib803c066ca28d1c05a345b7a982a0daabbd7d52e
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-11-21 15:51:02 -06:00
Zuul
27c805b97f Merge "Support segmented port ranges" 2025-11-21 21:50:22 +00:00
Clif Houck
c8abaad9fa
Configuration file for Trait Based Networking
Adds a configuration file class for Trait Based Networking.

The class can read, validate, and parse a YAML config file conforming to
the expected structure of a TBN configuration file.

Parsing renders the configuration to TBN objects.

Change-Id: I69802006274d2373e73ba3d2779c29e365caea85
Signed-off-by: Clif Houck <me@clifhouck.com>
2025-11-21 12:20:46 -06:00
Clif Houck
aa96982e6d
Trait Based Networking Filter Expression Parsing and Base Models
Base models for the majority of the Trait Based Networking feature.

Adds a lark-based parser for filter expressions found in Trait Based
Networking configuration files.

Change-Id: I4414463c70d37a7c6b5a957941a2607b5c15ab9e
Signed-off-by: Clif Houck <me@clifhouck.com>
2025-11-21 12:20:46 -06:00
Zuul
23a63c5424 Merge "Add a script to copy inspection data between Swift buckets" 2025-11-21 18:11:27 +00:00
Riccardo Pittau
09383bc657 Fix singleprocess launcher compatibility with oslo.service 4.4+
The combined Ironic service was passing the no_fork parameter
to ServiceLauncher, which was wrongly mapped to ProcessLauncher [1]

Switch to ProcessLauncher which properly supports no_fork since
oslo.service 4.2.0. This ensures VNC signal handling works correctly
and matches the pattern used by other Ironic services.

[1] 0dfdf810ac

Change-Id: Iea150a5c3f147b7e4f8a778510bfc061a14f289a
Signed-off-by: Riccardo Pittau <elfosardo@gmail.com>
2025-11-20 17:14:38 +01:00
Julia Kreger
66ade9b9bd doc: trivial: Quick revision of README
I took a quick look and felt like it wasn't clearly demonstrating
current state, so decided to revise the text. It should be more
clear now as to the state of reality.

Change-Id: I1b3c808f6d75e1e7fa532d18df82418a4747071a
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-11-20 07:33:02 -08:00
Afonne-CID
516b0ca0da Fail flat driver rebind when no VIFs are bound
Add validation check that raises NetworkError if the bound port list
is empty after attempting to bind all ports.

Closes-Bug: #2131962
Change-Id: I1d533b942144680c2622fec63caa092f96e481f5
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-11-19 23:31:18 +01:00
Afonne-CID
b3c43ba62d Support segmented port ranges
Adds support for comma-separated, non-consecutive port ranges
in ``[console]port_range``.

E.g., ``'1000:1100'`` and ``'1000:1100,2000:2500,3000:3100'`` are now
both valid.

Some of the unit tests were generated with AI.

Closes-Bug: #2131055
Assisted-by: Claude Sonnet 4.5
Change-Id: Ie35cfb6f431a58857f50b9ceda0daf601c8a6737
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-11-19 19:06:34 +01:00
Zuul
e75c8a4483 Merge "Nit: Fix typo in Migrating from ironic-inspector" 2025-11-19 09:38:03 +00:00
Zuul
77343549fe Merge "Follow-up: Document noop deploy interface" 2025-11-19 09:37:58 +00:00
Zuul
a905752e39 Merge "Improve pre-commit configuration" 2025-11-19 09:37:53 +00:00
Zuul
1a031b03a7 Merge "Add node.instance_name" 2025-11-18 23:27:20 +00:00
Afonne-CID
451392c602 Follow-up: Document noop deploy interface
Change-Id: I0a8bf842bfabf3740fb858462b946cbe8d4e278a
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-11-18 18:21:53 +01:00
Zuul
bcfd5e6358 Merge "docs: Fix typos and a wrong URL" 2025-11-18 17:21:25 +00:00
Zuul
1861760caa Merge "Add a noop deploy interface" 2025-11-18 17:21:20 +00:00
Riccardo Pittau
4f815d84c8 Skip BMC detection in IPA for out-of-band management
When nodes use out-of-band management interfaces (Redfish, iDRAC
Redfish, iLO, iRMC), the BMC address is already known and configured
in Ironic. This change adds an 'agent_skip_bmc_detect' flag to the
lookup API response config that tells the agent to skip BMC address
detection via ipmitool.

This reduces deployment time and avoids unnecessary ipmitool calls
during hardware inventory collection.

The flag is automatically set based on the node's management_interface
and is included in the config section of the lookup response.

Assisted-By: Claude Sonnet 4.5
Change-Id: I6a432db3eb238894e0ed2676243ce69ec300a9eb
Signed-off-by: Riccardo Pittau <elfosardo@gmail.com>
2025-11-18 16:28:54 +01:00
Pierre Riteau
aaa7cea4ca docs: Fix typos and a wrong URL
Change-Id: I497577fc4371eb66db023ff1c4fab39564398855
Signed-off-by: Pierre Riteau <pierre@stackhpc.com>
2025-11-18 15:02:03 +01:00
Takashi Kajinami
03cb948c40 Drop remaining inspector job
... because ironic-inspector has been retired.

Change-Id: Id5568cbac8f559821dffd004ab9b6db3e4f4bca6
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-11-18 21:58:28 +09:00
Afonne-CID
5cb4933df6 Clear image cache on deployment failure
Clear cached instance images during deployment failure state
transitions, guarded by a new configuration option
[conductor]clear_image_cache_on_deploy_failure, defaulting to ``False``

The default preserves cached images for retry attempts, which benefits
users with small image sets. Images are cleaned up eventually via
periodic cache cleanup (TTL-based), and hash validation failures
already prevent corrupted images from being cached. Operators can
enable immediate cleanup by setting the option to ``True``.

Closes-Bug: #2076124
Change-Id: I440841d171c3f616e0944ea580bce4677cf85ada
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-11-18 11:19:41 +01:00
Julia Kreger
48e23c2574 ci: disable multinode subnode running n-cpu
Change-Id: Ia70ccd813feb12135fd3cb7f8c432d7cf36f0507
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-11-17 20:22:03 +00:00
Zuul
d1ad78f827 Merge "Add Release Schedule to release how to" 2025-11-17 19:27:38 +00:00
Zuul
12d6dd2c6f Merge "Deprecate iRMC hardware type and interfaces" 2025-11-17 11:48:44 +00:00
David Nwosu
374aba1c36 Fix spelling errors in unit test files
Change-Id: Ie4a3df034093352776d7e2717a8ae6301b40563c
Signed-off-by: David Nwosu <nwosudavid13@gmail.com>
2025-11-15 11:52:09 +01:00
David Nwosu
1421a2d1a9 Improve pre-commit configuration
Enhanced the pre-commit hook configuration by adding
directory exclusions (.tox/, build/, dist/)

Change-Id: Ib12990cc85bdba5445eb8553c751025923b29645
Signed-off-by: David Nwosu <nwosudavid13@gmail.com>
2025-11-15 11:41:31 +01:00
Zuul
9b3ce45be5 Merge "Fix inspection IB port client-id" 2025-11-15 04:08:14 +00:00
Jay Faulkner
e4b1e394d4 Update devstack guides to raise RAM requirement
Our most basic images require 2500mb of ram, minimum, for fake nodes.

Signed-off-by: Jay Faulkner <jay@jvf.cc>
Change-Id: I0939f6fbb8dfd91c4e3f20b3a785e6acc9feb9bb
2025-11-13 10:03:27 -08:00
Jakub Jelinek
81209ba399 Add a script to copy inspection data between Swift buckets
There is no way to migrate inspection data automatically.
This script documents one of the ways how to copy data
between two Swift buckets.

Change-Id: I4a86faab5e7abef17064e3c716dc17b6a2f21f39
Signed-off-by: Jakub Jelinek <jakub.jelinek@cern.ch>
Assisted-by: Claude 4.5 Sonnet (Anthropic AI)
2025-11-12 17:12:39 +00:00
Jakub Jelinek
3eca781ec3 Nit: Fix typo in Migrating from ironic-inspector
Change-Id: I49351a35971d3970faaea62b36d49e4ee883db1f
Signed-off-by: Jakub Jelinek <jakub.jelinek@cern.ch>
2025-11-12 16:49:25 +00:00
Jacob Anders
7d050f6ae2 Deprecate iRMC hardware type and interfaces
The iRMC hardware type for Fujitsu PRIMERGY servers has been
unmaintained for an extended period.

This change marks the iRMC hardware type and all associated
interfaces (bios, boot, inspect, management, power, raid, and
vendor) as unsupported. All configuration options in the [irmc]
section have been marked as deprecated for removal. The
documentation has been updated with a prominent warning about
the deprecation.

Users of the iRMC hardware type should begin planning migration to
alternative hardware types. The driver and all associated code will
be removed in a future Ironic release.

Change-Id: I78b822e5fe3bd1ce4d7ea410c4569d6b830dc214
Signed-off-by: Jacob Anders <janders@redhat.com>
Assisted-by: Claude 4.5 Sonnet (Anthropic AI)
2025-11-13 02:12:29 +10:00
Jay Faulkner
bc463ebcbb Add node.instance_name
This adds node.instance_name as a top level field

Additionally, to provide forwards-compatability for nova clients,
we will automatically set node.instance_name if
node.instance_info.display_name is being set.

Tested the following in devstack, using manual CURL api calls:

 - Viewing an instance_name via GET /v1/nodes/node-name
 - Adding an instance_name
 - Clearing instance name on undeploy
 - Setting an instance_name via PATCH /v1/nodes/node-name
 - Setting a instance_info/display_name and validating it sets instance_name
 - Setting a instance_info/display_name when instance_name already exists and
   validating it DOES NOT OVERRIDE existing instance_name
 - node.instance_name not returned for API version < our micro version
 - querying /v1/nodes with ?instance_name=somename
 - (cid) Sort of fully tested integrated with nova by observing CI logs
 - (jayf) Added missing comments around API versions, and added a reminder
   comment

Generated-By: Claude code
Change-Id: Ic24b2e8dbe88c59f0df52a0f5581d48492ba8cd7
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
Signed-off-by: Jay Faulkner <jay@jvf.cc>
2025-11-12 13:34:51 +01:00
Zuul
41a0ae8565 Merge "Filter null NIC firmware versions from cache" 2025-11-12 07:23:58 +00:00
Doug Goldstein
e721c56e68
pass along physical_network to neutron from the baremetal port
When plugging a baremetal port in using the 'neutron' interface, send
the 'physical_network' value of the baremetal port to Neutron as part of the
binding_profile for the port. This can be useful for VXLAN underlay
connected machines where the networks in Neutron are VXLAN networks
which then have segments on them that are VLAN based segments which bind
the VNI to a VLAN for attachment for the node to connect to the VNI.

Ref: https://bugs.launchpad.net/ovn-bgp-agent/+bug/2017890
Ref: https://bugs.launchpad.net/neutron/+bug/2114451
Ref: https://review.opendev.org/c/openstack/neutron-specs/+/952166

Partial-Bug: #2105855
Assisted-by: Claude Code 2.0
Change-Id: I6e0185e203489676d530e6955929997f4871b8fa
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-11-12 00:36:19 -06:00
Afonne-CID
bcae66f199 Add a noop deploy interface
This change adds a NoDeploy class to allow for a truly minimal
deployment interface with no-op implementations for all required
methods.

Closes-Bug: #2106550
Change-Id: Ic6faf34860efef9165ad868d57972cd5007eacd4
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-11-11 21:07:28 +01:00
Afonne-CID
5563e5275f Filter null NIC firmware versions from cache
Treat absent firmware package version as non-cacheable to avoid NOT NULL
database constraint violation.

Closes-Bug: #2130990
Change-Id: Ic2efaa0d53b6923908112c937957a60aa4f1ad9d
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-11-11 20:48:56 +01:00
Julia Kreger
a4a5c9b3b7 docs: a little more clarity around the state of ipxe+uefi
We likely need to begin to strip out the undionly.kpxe stuffs as well,
but first lets see what people think with this and we can go in that
direction.

Change-Id: I09f15e87372390219193c93ba3b5d309f29df900
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-11-11 10:00:08 -07:00
Zuul
a4a2a25094 Merge "fix: local_link_connection inspection hook does not fail on missing port" 2025-11-10 22:47:15 +00:00
Zuul
cd06a3f205 Merge "fix: ensure that portgroup physical_network is updated for tests" 2025-11-10 22:02:39 +00:00
Zuul
7e7ab375c0 Merge "Fix storing inventory and plugin data in Swift" 2025-11-10 19:37:27 +00:00
Doug Goldstein
bb97a64225
fix: ensure that portgroup physical_network is updated for tests
The tests create the portgroup and then create ports in the DB while
setting the portgroup_id on the created port. The result is that the
physical_network field is not kept in sync on the portgroup with the
port's value as is expected since I5a9d9c19182b232bc1b8446644cab0bf6d68d139
resulting in inconsistent data for the tests. Since the tests only
confirm that the portgroup physical_network is of the expected value,
which is empty so they pass.

Change-Id: Ied1f5c884652ff4e7ddeb748199dbf20ebc879bd
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-11-08 23:28:32 -06:00
Doug Goldstein
90b5853346
fix: local_link_connection inspection hook does not fail on missing port
The code intended to not fail when a Port object was missing but to
instead skip the handling of that node but instead there is an unhandled
exception because the get_by_address() method throws PortNotFound
instead of returning None when a port couldn't be found.

Change-Id: I04dfa09ada7e6a9d22ba16051cb5737daf3bc668
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-11-06 21:17:47 -06:00
Zuul
e3b943a34b Merge "Apply naming standards to Ironic install guide sections" 2025-11-06 16:13:36 +00:00
Jakub Jelinek
9769ae72da Fix storing inventory and plugin data in Swift
The data has not been stored as JSON which caused issues.

Closes-bug: #2130790
Change-Id: I1d13fb227e6c3ba713dac58c6e02a199f589209f
Signed-off-by: Jakub Jelinek <jakub.jelinek@cern.ch>
2025-11-06 15:57:56 +00:00
Takashi Kajinami
8d390195f4 Make sure [cors] allowed_origin accepts a list value
... because usage of a string value is deprecated since oslo.middleware
3.0.0[1].

[1] 40135b76a92cef4197e2f68be46fd129d41630c6

Change-Id: I3d6b67c221f9411cad59b7e6b9b3abf89c5508a8
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-11-06 14:26:59 +00:00
Zuul
e8d294fc6c Merge "Add IPMI address validation to node validation" 2025-11-06 08:45:03 +00:00
Zuul
953440554a Merge "Handle HTTP 400 and 409 race condition in Redfish power operations" 2025-11-06 00:29:10 +00:00
Zuul
09c4fb0acf Merge "Add force_dhcp option for managed inspection" 2025-11-05 23:58:44 +00:00
Zuul
f56d9bc9f6 Merge "Add support for multiple JSON-RPC configuration groups" 2025-11-05 23:56:12 +00:00
Clif Houck
051e5d403a
Fix docstring for SystemdConsoleContainer.start_container
Change-Id: Ia519921ed8c2293abf5f0eef09a6f2d0ee3ce4a8
Signed-off-by: Clif Houck <me@clifhouck.com>
2025-11-05 12:54:31 -06:00
Afonne-CID
3abaa3a2d9 Add IPMI address validation to node validation
Validate ``ipmi_address`` field for valid IP addresses or hostnames
during node validation.

Closes-Bug: #1666223
Change-Id: Ie33e7aed7521b552efcd851228072f43ebfec620
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-11-05 17:17:47 +01:00
Zuul
5c1ff3f892 Merge "Replace Chrome/Selenium console with Firefox extension" 2025-11-05 11:25:28 +00:00
Zuul
b9f0f9242f Merge "Improve logging when console unit doesn't start" 2025-11-05 11:17:32 +00:00
Zuul
6507e9fae5 Merge "Add a new 'category' field to the Portgroup object" 2025-11-05 04:20:31 +00:00
Zuul
9305e273a8 Merge "docs: cover what happens if someone changes iscsi passwords" 2025-11-04 22:33:18 +00:00
Steve Baker
e6e842b228 Replace Chrome/Selenium console with Firefox extension
The current containerised graphical console approach has a Selenium
script managing a Chrome browser session. This change replaces that with
firefox and a custom extension to perform the required actions to login
and load the BMC console. This supports the same vendors as the previous
approach (iDRAC, iLO, Supermicro).

This change is required by Red Hat as Chrome is not packaged in RHEL.
However switching to firefox has allowed a more robust and featureful
implementation so it is presented here on its own merits.

This is implemented with bash, calling out to dedicated python scripts
for these specific tasks:
- Detecting which vendor specific javascript to use for the
  redfish-graphical driver
- Building the required certificate fingerprint when app_info.verify_ca
  is false, which is written to the profile's cert_override.txt
- Building a custom policy.json which is specific to the BMC and vendor
  implementation.

Functional differences with the chrome/selenium version
- Firefox kiosk mode has a more locked-down environment, including
  disabling context menus. This means the brittle workaround to disable
  them is no longer required.
- Firefox global policy allows the environment to be locked down
  further, including limiting accessing to all URLs except the BMC.
- There is now a dedicated loading page which can show status updates
  until the first BMC page loads. This page shows error messages if any
  of the early redfish calls fail.
- VNC client sessions are now shared with multiple clients, and firefox
  will be started on the first connection, and stopped when the last
  connection ends.
- Starting Xvfb is now deferred until the first VNC client connection.
  This results in a never-connected container using 5MB vs 30MB
  once Xvfb is started. Starting Xvfb has ~1sec time penality on first
  connection.
- The browser now runs in a dedicated non-root user
- All redfish consoles now hide toolbar elements with a CSS overlay rather than
  simulating other methods such as clicking the "Full Screen" button.
- ilo6/ilo5 detection is now done by a redfish call and the ilo5 path
  has less moving parts.

Change-Id: Ib42704a016dc891833a0ddbeae8054cac2c57d4d
Signed-off-by: Steve Baker <sbaker@redhat.com>
Assisted-By: gemini
2025-11-05 11:07:07 +13:00
Steve Baker
1b027a72d8 Improve logging when console unit doesn't start
Log the unit status and journal log when systemctl start fails for a
console container.

Also before the console is stopped, call journalctl for that unit. If
debug is enabled then the journal output will be logged.

Additionally, after a container is started, attempts are made to open a
socket to the VNC port and read some data. There is a delay between the
container starting and x11vnc actually listening and this race can be
triggered in automated tests, so this delays changing the console
enabled state until it is *really* ready.

Change-Id: I2c4867b6773f4f4eaa8b98e50a63881f0f4d08b0
Signed-off-by: Steve Baker <sbaker@redhat.com>
2025-11-05 11:05:48 +13:00
Clif Houck
7a67d4f183 Add a new 'category' field to the Portgroup object
Adds a new category field to the portgroup object. Foundational
work for first milestone of trait based port scheduling.

Depends-On: https://review.opendev.org/c/openstack/ironic-tempest-plugin/+/955799
Change-Id: I5100144a330602996c27ed18d2bbde09be6e9571
Signed-off-by: Clif Houck <me@clifhouck.com>
2025-11-04 12:44:01 -08:00
Zuul
d9fc068630 Merge "api: Add schema for inspection rules API (requests)" 2025-11-04 14:03:49 +00:00
Zuul
769ba19870 Merge "Fixes for console containers functional testing" 2025-11-04 11:28:41 +00:00
Zuul
c307e44598 Merge "Remove bespoke logic for handling redirects while validating URLs" 2025-11-04 11:28:35 +00:00
Zuul
db2951e789 Merge "Increase default sync_power_state_interval" 2025-11-04 11:28:30 +00:00
Zuul
ab6409c92d Merge "Add generic redfish compatible vendor name" 2025-11-04 11:16:49 +00:00
Riccardo Pittau
3e778ef954 Handle HTTP 400 and 409 race condition in Redfish power operations
Treat HTTP 400 and 409 errors as success when the node is already
in the target power state, preventing deployment failures from
race conditions between power state change completion and state
verification timeout.

Also refresh system state to get current power state from BMC
instead of using potentially stale cached data.

Assisted-By: Claude Sonnet 4.5

Change-Id: Id66ff9c70a9dd6969e3ac7fc74328dfc6e0431bd
Signed-off-by: Riccardo Pittau <elfosardo@gmail.com>
2025-11-04 10:51:10 +01:00
Zuul
27031186ef Merge "Enable fake-graphical console for all hardware types" 2025-11-04 00:31:23 +00:00
Julia Kreger
d59ad9f82d docs: cover what happens if someone changes iscsi passwords
Change-Id: I472175d4629191d4506d200ec60090e678e4a25e
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-11-03 13:40:21 -08:00
Zuul
6b84d88a5d Merge "docs: add a "i want a pony" bit of text" 2025-11-03 19:49:05 +00:00
Zuul
cf8b0279cc Merge "docs: provide a little more clarity/guidance w/r/t redfish" 2025-11-03 19:39:17 +00:00
Zuul
822c8d5148 Merge "Remove sushy-oem-idrac from driver requirements" 2025-11-03 13:11:44 +00:00
Zuul
1c148eb5ee Merge "api: Prevent overlapping schema versions" 2025-11-03 13:11:39 +00:00
Zuul
804480dd34 Merge "Fix power sync timeouts after BMC firmware update" 2025-11-03 13:02:14 +00:00
Zuul
bb52a177ea Merge "reno: Update master for unmaintained/2024.1" 2025-10-31 14:08:19 +00:00
Zuul
f27be2b2b9 Merge "Add a new 'physical_network' field to the Portgroup object" 2025-10-31 14:08:13 +00:00
OpenStack Release Bot
52b1beddf1 reno: Update master for unmaintained/2024.1
Update the 2024.1 release notes configuration to build from
unmaintained/2024.1.

Change-Id: I51020f0a417769629c2db217403c63ff117a2e53
Signed-off-by: OpenStack Release Bot <infra-root@openstack.org>
Generated-By: openstack/project-config:roles/copy-release-tools-scripts/files/release-tools/change_reno_branch_to_unmaintained.sh
2025-10-31 12:05:22 +00:00
Abhijith PC
7c588550c4 Apply naming standards to Ironic install guide sections
Change- heading was outdated and confusing. This patch updates
the title to accurately reflect the content of the installation guide.

This resolves: bug/2072349

Change-Id: Ibfdbbc40ad2ae1cda46de1d1937c15e5926d4308
Signed-off-by: Abhijith P C <abhijithpc25@gmail.com>
2025-10-31 06:26:11 +00:00
Riccardo Pittau
3ccdb11ca2 Remove sushy-oem-idrac from driver requirements
The sushy-oem-idrac code has been integrated in sushy version
5.6.0 so we don't need the sushy-oem-idrac package anymore.

Change-Id: Ief49300f6ac0c49686b9469be98b8680e018a618
Signed-off-by: Riccardo Pittau <elfosardo@gmail.com>
2025-10-28 17:26:28 +01:00
Zuul
8513806881 Merge "Add upgrade check for iLO/iLO5 driver deprecation" 2025-10-28 14:29:03 +00:00
Riccardo Pittau
59ca3facae Add Release Schedule to release how to
Add openstack release schedule with reference to ironic
projects and when to release them during the release
cycle.

Also remove all old references to unmaintained projects and
move all links to the bottom of the document as best practice.

Assisted-By: Claude Sonnet 4

Change-Id: Ie01bb22e6391ea22c8983ebc7bf5b90c688f8afd
Signed-off-by: Riccardo Pittau <elfosardo@gmail.com>
2025-10-28 12:22:00 +01:00
Afonne-CID
3ad4ca3ced Add upgrade check for iLO/iLO5 driver deprecation
Adds an upgrade check that warns operators if they have nodes using
the ilo or ilo5 hardware types or any ilo-specific interfaces
(ilo-pxe, ilo-ipxe, ilo-virtual-media, ilo-uefi-https, etc.).

Change-Id: I1e90cbb08d5268e54132e4c3dba510d211e11007
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-10-28 07:27:05 +01:00
Julia Kreger
571e1e8660 CI: make multinode runtime check sane
Its complicated, but basically because we run full size VMs which
take a while to boot, the multinode tests need a bit more than 600
seconds to deploy a node. They can get there in just about that time
and even sometimes beat the time window, but sometimes the job
times out internally and kills the test run.

This changes the time to be 2000 seconds, which is more consistent
across other jobs. Independently, the defaults in the tempest plugin
will need to be made sane.

Change-Id: I890d551122489e5a0b3162f08dbc10270968fb00
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-10-27 23:56:09 +00:00
Julia Kreger
f11533e2fd docs: add a "i want a pony" bit of text
Change-Id: Icfa18e3e9d26f4e465b32268bbb04b8d22eeb3dd
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-10-27 15:29:52 -07:00
Julia Kreger
0229b8c1a8 docs: provide a little more clarity/guidance w/r/t redfish
As discussed during the PTG, minimally we need update some of the
text on the framing of Redfish to help users understand what might
be happening or why it might not work.

Change-Id: I3aae292158e9c8fb6b67524b809310130b18e452
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-10-27 15:10:32 -07:00
Massimiliano Favaro-Bedford
b69a095a66 Add generic redfish compatible vendor name
Include a generic vendor variable for triggering
``requires_full_boot_request`` during boot. This is required because
some vendors, i.e. Lenovo, offer hardware with a variety of BMCs, some
of which require a full boot request.

Therefore, there is a need for a general vendor property variable for
these cases where it is not possible to add a vendor in order to avoid
duplicate entries.

Change-Id: Ic1745ff8eb6744d5a21ca8e0d5580bdb7e466e83
Signed-off-by: Massimiliano Favaro-Bedford <max@stackhpc.com>
2025-10-27 13:49:20 +00:00
Jacob Anders
fbe0e188b2 Fix power sync timeouts after BMC firmware update
Use extended timeout (by default 300 seconds) for BMC firmware
updates to handle BMC transitional states during firmware update process,
unless a different timeout is specified by the operator.

Assisted-By: Claude Code Sonnet 4
Change-Id: I2125ff4cdcbd07a89b364968dda4bb60e059121c
Signed-off-by: Jacob Anders <janders@redhat.com>
2025-10-25 03:12:38 +10:00
Zuul
f568283934 Merge "Document instance_uuid JSON PATCH non-compliance" 2025-10-24 15:25:11 +00:00
Riccardo Pittau
371033d170 Run metal3 integration job using UEFI boot (default)
The fix for UEFI boot on ubuntu noble in metal3-dev-env [1]
has merged, we should be able to run it now with no
changes.

[1] https://github.com/metal3-io/metal3-dev-env/pull/1497

Change-Id: I5563d79540ce0ab1e299161a1fc9f484ba7cdf7f
Signed-off-by: Riccardo Pittau <elfosardo@gmail.com>
2025-10-24 10:45:41 +02:00
Zuul
bf236891e3 Merge "More RAM for Anaconda job" 2025-10-23 22:45:51 +00:00
Jay Faulkner
fb2befce93 More RAM for Anaconda job
A recent image update has caused CI to begin failing against anaconda. This change is required to unblock it, and must be backported to unblock ironic-tempest-plugin merges.

Change-Id: I6a8a7baf54f7c0718b897f490671e8c3ac946e45
Signed-off-by: Jay Faulkner <jay@jvf.cc>
2025-10-23 19:16:29 +00:00
Zuul
177d0f9e71 Merge "Make cache_firmware_components more resilient during upgrades" 2025-10-23 17:13:28 +00:00
Zuul
3dd865e968 Merge "Fix intermittent Redfish firmware update failures with BMC validation" 2025-10-23 17:03:16 +00:00
Allain Legacy
3b55031993 Add force_dhcp option for managed inspection
This change introduces a new configuration option 'force_inspection_dhcp'
in the inspector group that enables DHCP on all available network
interfaces during managed inspection. When enabled, it:

- Skips injection of static network configuration into virtual media ISO
- Forces the inspection ramdisk to use DHCP on all interfaces
- Automatically enables LLDP collection across all interfaces
- Helps ensure comprehensive network discovery during inspection

This is helpful in scenarios where the inspection network is separate
from the provisioning network.  Since the static network configuration
data is typically intended for the provisioning network it may not be
applicable/valid on the inspection network.

Related-Bug: 2113769
Change-Id: I200730069d4177e8c2960e5f3ce8b1bbcca0f062
Assisted-by: Claude Code/claude-sonnet-4
Signed-off-by: Allain Legacy <alegacy@redhat.com>
2025-10-22 13:35:57 -04:00
Allain Legacy
cd9e70198e Add support for multiple JSON-RPC configuration groups
This change refactors the JSON-RPC client and server implementation to
support multiple configuration groups, enabling different JSON-RPC
services to use separate configuration sections within the same file.

Key changes:
- Modified Client and WSGIService to accept conf_group parameter
- Updated session management to cache sessions per configuration group
- Made configuration option registration reusable for different groups
- Added comprehensive test coverage for multi-group functionality

This enables services like ironic-networking (future) to use their own
JSON-RPC configuration section while sharing the same underlying
implementation.

Related-Bug: 2113769
Change-Id: I8ce46331878f852c9c6a3e6fc9c08c3b9d789fad
Assisted-by: Claude Code/claude-sonnet-4
Signed-off-by: Allain Legacy <alegacy@redhat.com>
2025-10-22 13:35:57 -04:00
Zuul
49d6d906e7 Merge "api: Allow bios values to be None" 2025-10-22 13:44:14 +00:00
Afonne-CID
f7e9da0a79 Document instance_uuid JSON PATCH non-compliance
Add API documentation noting that instance_uuid does not follow
RFC 6902 behavior in that the "add" operator cannot replace existing
values, preventing race conditions between Nova compute agents.

Closes-Bug: #1310843
Change-Id: I1caaf5b6133d756cf9484d3e5b56f7b8280525db
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-10-21 06:31:19 +01:00
Steve Baker
b2f297d91c Fixes for console containers functional testing
Console containers are run as systemctl --user units with the stack
user. Unlike in the locally running case, in a job there may be no
active user session running to allow these units to run. This change
ensures there is a stack user service running, and "loginctl
enable-linger" will start one again at boot time. These actions are only
taken when ir-novnc is enabled.

This change also installs the package slirp4netns for the required
user-mode networking, and adds fake-graphical to the list of enabled
console interfaces when ir-novnc is enabled. enabled_console_interfaces
is passed to tempest.conf so that tempest can run tests or not based on
whether fake-graphical is enabled.

Additionally the console container will bind to a high port on localhost
instead of a high port on the host IP. This still allows
ironic-novncproxy to connect to the vnc endpoint while avoiding iptables
rules.

Change-Id: Ibcd5b7b05c466d898ba69bff35a1e767be3699a3
Signed-off-by: Steve Baker <sbaker@redhat.com>
2025-10-16 14:28:10 +13:00
Steve Baker
7d3ffd7961 Enable fake-graphical console for all hardware types
Making the fake-graphical driver available for all hardware types is
proposed for the following scenarios:
- functional testing with fake-hardware
- integration testing with ipmi or redfish hardware types, but when the
  target server is virtual and does not emulate BMC remote console
- cloud operators who want to verify working ironic-novncproxy with
  existing real nodes

Change-Id: I9ea46d76ff80bf27571144f1f671acdb06a0fcf0
Signed-off-by: Steve Baker <sbaker@redhat.com>
2025-10-16 14:28:10 +13:00
Dmitry Tantsur
5482045e88
Remove bespoke logic for handling redirects while validating URLs
This logic is broken in a few places when dealing with real world
redirect cases, such as Debian Cloud images redirecting to mirrors.

It seems that the code was written with an incorrect assumption that
requests does not limit redirects by default. It does, the default
max_redirects seems to be 30. We can change it on Session if we need.

The anaconda case is now handled by checking the url field of the
response.

Closes-Bug: #2127154
Change-Id: I200d631e166075ceab80dcd4b0ff596d1860aa3b
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
2025-10-15 19:08:31 +02:00
Zuul
26c7207935 Merge "docs: add context around bmc password changes" 2025-10-14 19:05:04 +00:00
Mahnoor Asghar
10feb5b693 Fix cleaning example in docs that sets the BMC clock to use correct arg
Change-Id: I9341395060cd22dee3ad880a7fe62831cd5b725b
Signed-off-by: Mahnoor Asghar <masghar@redhat.com>
2025-10-14 14:18:11 +02:00
Zuul
e3d1e672c2 Merge "api: Catch correct exception on schema validation error" 2025-10-13 22:55:06 +00:00
Clif Houck
4a4ea08fce
Add a new 'physical_network' field to the Portgroup object
Adds a new physical_network field to the portgroup object.

Adds logic to forbid changing Port.physical_network when said Port is
already part of a Portgroup. Adds logic to Portgroup to cascade
Portgroup.physical_network changes/updates to member Ports of the
Portgroup.

Adds RPC call to update physical_network on Portgroup.

Foundational work for first milestone of trait based port scheduling.

Depends-On: https://review.opendev.org/c/openstack/ironic-tempest-plugin/+/955799
Change-Id: I5a9d9c19182b232bc1b8446644cab0bf6d68d139
Signed-off-by: Clif Houck <me@clifhouck.com>
2025-10-13 13:50:40 -05:00
Zuul
da3e041d95 Merge "Check _by_arch values with redfish vmedia" 2025-10-11 20:55:08 +00:00
Zuul
cd34437fa8 Merge "Fix IPA external inspection callback url override" 2025-10-09 17:32:38 +00:00
Zuul
a89f960499 Merge "ci: remove tinyipa job alias usage" 2025-10-09 13:26:53 +00:00
Dmitry Tantsur
85671c0f7f
CI: temporary mark OVN jobs as non-voting
They are permafailing, the Neutron fix is not ready yet.

Change-Id: Ie5d9f76c97fb08edcd295fdfa82bd0b4539ff410
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
2025-10-09 08:23:10 +02:00
Julia Kreger
65d304028f docs: add context around bmc password changes
Change-Id: I081af9efc7aea35a876e79e9444dad8ff91e9692
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-10-08 11:47:38 -07:00
Afonne-CID
dac926c02d
Fix IPA external inspection callback url override
When an `external_callback_url` is configured, we were overriding
only the base IPA API URL and not the inspection callback.

Closes-Bug: #2101173
Change-Id: I5a84907e65ec1282805fa04f0dff75a848e1b09c
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
2025-10-08 19:00:56 +02:00
Jay Faulkner
a5542474d6 Check _by_arch values with redfish vmedia
Prior to this change, as reported in bug 2126991, a generated vmedia ISO
would not be created properly using information in the
[conductor]/*_kernel_by_arch and [conductor]/*_ramdisk_by_arch.

This change restores the documented behavior of checking driver_info
first, then checking *_by_arch, then checking the global default.

Assisted-by: Claude Code 2.0
Closes-Bug: #2126991
Signed-Off-By: Jay Faulkner <jay@jvf.cc>
Change-Id: I63197791b4b54072310dfd8525b40044e514ff7f
2025-10-08 09:10:15 -07:00
Stephen Finucane
210d2b32bd api: Allow bios values to be None
Despite what the api-ref says [1], the 'bios.[*].value' field included
in responses to 'GET /v1/nodes/{node_ident}/bios' can be null. The
BIOSSetting database model in 'ironic.db.sqlalchemy.models' confirms as
much. Update the schema and api-ref to reflect this. This leaves only
the 'name' and 'created_at' fields as non-nullable.

Change-Id: Idcc03e6ce377ecf6b9db511e3283fb6f2496b037
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
Closes-bug: #2127079
2025-10-08 13:42:39 +01:00
Stephen Finucane
986524ab22 api: Catch correct exception on schema validation error
The 'SchemaValidator.validate' method (from
'ironic.api.validation.validators') already catches the
'jsonschema.ValidationError' exception and raises Ironic's own
'InvalidParameterValue' exception in its place. Thus, we need to catch
the latter, not the former.

Change-Id: Ic8668afe5a2ff85a5c089c7adae9c8af541f7e84
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
Partial-bug: #2127079
2025-10-08 13:36:21 +01:00
Julia Kreger
10cfaca100 ci: remove snmp ci job
Removing the snmp CI job, as it doesn't make sense to execute as we're
going to remove it.

Change-Id: I3da676da959fde5d4c858538888ccd7b0682cb3b
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-10-06 10:44:04 -07:00
Zuul
b8cc6447c1 Merge "Docs: play down the role of is_root_volume in RAID" 2025-10-03 18:24:42 +00:00
Zuul
79d15724a5 Merge "Drop explicit description about default values" 2025-10-03 18:24:37 +00:00
Julia Kreger
500d0cc5a9 ci: remove tinyipa job alias usage
Change-Id: I10cd736553c0a8035653e7e61ec0d2aa20e62f42
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-10-03 10:45:00 -07:00
Jacob Anders
bba3041ccf Make cache_firmware_components more resilient during upgrades
There have been reports of firmware upgrades failing on Gen11 iLO
machines with GET NetworkAdepters returning 400s responses. This change
attempts to resolve this by catching the exception relevant to the fault

Change-Id: I62095c2b61d14688d2dcbcdcfd29e9391af2c0ba
Signed-off-by: Jacob Anders <janders@redhat.com>
2025-10-03 10:47:29 +00:00
Jacob Anders
85ec9d655f Fix intermittent Redfish firmware update failures with BMC validation
Resolves a bug where firmware updates fail intermittently on some
hardware models due to invalid or unstable BMC responses immediately
after firmware update completion. The BMC may return inconsistent
responses for a period after firmware updates, causing the update
process to fail prematurely.

This change adds comprehensive BMC state validation that requires
multiple consecutive successful responses from System, Manager, and
NetworkAdapters resources before considering the firmware update
complete. This ensures the BMC has fully stabilized before proceeding.

Generated-By: Claude Code Sonnet 4
Change-Id: I5cb72f62d3fc62c3ad750c62924842cef59e79b8
Signed-off-by: Jacob Anders <janders@redhat.com>
2025-10-03 14:17:41 +10:00
Zuul
b06a90a579 Merge "Allow multiple HTTP redirects for image source" 2025-10-02 20:49:32 +00:00
Ettore Simone
2585cb4e9d Allow multiple HTTP redirects for image source
Added multiple redirection response for HttpImageService.validate_href()
function inside ironic/common/image_service.py:
- 301: MOVED_PERMANENTLY
- 302: FOUND
- 307: TEMPORARY_REDIRECT
- 308: PERMANENT_REDIRECT

For all the response, the HTTP server should generate a Location header field
containing a URI as new reference.

Closes-Bug: #2126069
Change-Id: I985b3587984ba78570c3a163c08af58cf8a5d0c1
Signed-off-by: Ettore Simone <ettore.simone@gmail.com>
2025-10-02 11:17:40 +02:00
Takashi Kajinami
f1c903904f Drop explicit description about default values
The default values defined in code are automatically picked up by
oslo-config-generator and added to the config file generated by
the tool.

Change-Id: I4a8db8905baea9d10b49e24a85bb506102cc00ee
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-10-02 00:21:04 +09:00
Dmitry Tantsur
656446ae98
Docs: play down the role of is_root_volume in RAID
We've just discovered that this field does not do much. It basically
only affects the create_root_volume/create_nonroot_volumes arguments.
No RAID interfaces use it to populate root device hints.

Change-Id: I2ed780e13c59713127bd7f4ca30269e0c0865440
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
2025-10-01 15:57:43 +02:00
Julia Kreger
8acd96fb29 fix idrac9 version handling in redfish vmedia boot interface
Fixes the redfish-virtual-media boot interface logic to provide more
clarity to a user when an error occurs as Dell iDRAC10s do not work
with the present virtual media code, and users should instead use
the idrac interface variant.

Change-Id: I96642a5e9b65eb08c3c42da3e35f376d5e264fbc
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-10-01 06:42:36 -07:00
Zuul
76fcfd7a09 Merge "Migrate setup configuration to pyproject.toml" 2025-09-30 17:45:02 +00:00
Zuul
c2ec64be2d Merge "docs: More legacy version references removals" 2025-09-26 20:02:00 +00:00
Zuul
094f1580a0 Merge "docs: more legacy references" 2025-09-26 20:01:55 +00:00
Zuul
86a0bcd237 Merge "docs: remove metalsmith and molteniron references" 2025-09-26 20:01:50 +00:00
Zuul
77df655a23 Merge "docs: remove severely outdated mutlitenancy docs" 2025-09-26 20:01:45 +00:00
Zuul
81f4af3e03 Merge "docs: some more outdated reference fixes" 2025-09-26 20:01:40 +00:00
Zuul
cab4f1ceea Merge "docs: Add some meta tags to key docs" 2025-09-26 20:01:35 +00:00
Zuul
38270e30ad Merge "docs: remove backwards looking notes" 2025-09-26 20:01:30 +00:00
Zuul
f50427c8fe Merge "docs: Detail availability zone modeling in ironic" 2025-09-26 20:01:25 +00:00
Zuul
9c6bd4ea8d Merge "Add ipa-builder branching warning" 2025-09-26 19:34:47 +00:00
Zuul
9a350bb72a Merge "Fix incorrect arg while getting ports by portgroup" 2025-09-26 19:34:41 +00:00
Julia Kreger
3e38b1bf78 docs: More legacy version references removals
Change-Id: I4c989f48473dc0755b0e477562ea17c26415f050
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-09-26 11:38:59 -07:00
Julia Kreger
d13ffb4ff5 docs: more legacy references
* Pattern for nova-compute which we don't really recommend
  at this point, as nova wants folks to move away from it.
* and cleaned up the drivers page which had older release
  references which don't make sense in the current day.

Change-Id: I9c74ae757e2479fc44b86dc9dc4e5f6d8e146b8c
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-09-26 11:26:52 -07:00
Julia Kreger
05b7b4ca1f docs: remove metalsmith and molteniron references
So much outdated... Now fixed. Also found a molteniron reference which
should just be deleted.

Change-Id: Icc1069f8465ddcec887f3ba2a8f7338c6f2cba82
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-09-26 11:13:33 -07:00
Julia Kreger
2b2d19b9bd docs: remove severely outdated mutlitenancy docs
And custom examples. :(

Change-Id: Id14e41044787df82b3f6becb0cf240739a1a348b
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-09-26 11:10:46 -07:00
Julia Kreger
d11811794d docs: some more outdated reference fixes
Our docs still talked about tinyipa and some other outdated details
and my AI agent spotted them, so this commit fixes them.

Some of this was also just outdated references, bad links.

Change-Id: I270255854caa917d141573638ab3ba7c5fc4f473
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-09-26 10:58:17 -07:00
Julia Kreger
686d289d5c docs: Add some meta tags to key docs
While playing with AZ documentation, I realized we were really lacking
on our SEO game. So, this is an attempt to augment our core docs in
a simple way, add metadata tags.

Specifically I asked claude to review and propose tags based upon
the content in each file it considered core documentation based
upon the structure and content.

Assisted-By: Claude Code - Claude Sonnet 4
Change-Id: I3efe42c50dd22e2c03d4e4bbf9746da18c9c6abb
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-09-26 10:00:27 -07:00
Julia Kreger
c539943c01 docs: remove backwards looking notes
A recent ?Linked-In? or ?Reddit? thread I saw bemoned Ironic's
documentation as stale. This perception largely seems to be due
to backwards looking notes in the text.

For example, it doesn't make sense for current docs to talk about
Juno, Kilo, or upgrade to Queens.

And so, after getting some context loaded into Claude, I was able
to ask it to cleanup the docs for versions older than 2023.1.

Mostly, it looks like just cleaning up some sentences of our prior
context so it seems more up to date.

Assisted-By: Claude Code - Claude Sonnet 4
Change-Id: Ic86db90db441909848f7ec566c94e4018e322faf
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-09-26 09:59:56 -07:00
Julia Kreger
a483e6aaa2 docs: Detail availability zone modeling in ironic
A few recent questions regarding availability zones raised a
question which really needed to be augmented into Ironic's
documentation. This is an AI assistant based attempt to
revise the documentation after forcing it to read all our docs,
and some of nova's and neutron's docs, and then try to fill
in the details in a way which can also be easily found via
searching.

Assisted-By: Claude Code - Claude Sonnet 4
Change-Id: Id9ae61bd6e4a9a65f919c1560eadba1ee42d935c
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-09-26 09:04:45 -07:00
Riccardo Pittau
6f5bb8d6b3 Add ipa-builder branching warning
We need to make sure that all artifacts are built in case
ipa-builder is branched after ipa.

Change-Id: Ia6c5f318a9df7cc6179f2b00e6c8a64d7b1a5ba9
Signed-off-by: Riccardo Pittau <elfosardo@gmail.com>
2025-09-26 12:48:51 +02:00
Zuul
133fc7968e Merge "Force Virtual Media Slot 1 on iDRAC10" 2025-09-26 03:35:43 +00:00
Iury Gregory Melo Ferreira
af0b9751d2 Force Virtual Media Slot 1 on iDRAC10
iDRAC10 requires using the Virtual Media Slot1,
the problem is that some bmcs doesn't return
the resrouces ordered, this causes the provisioning
to fail because we inserted the iso in the wrong slot.

This patch adds support to detect the version
of idrac, this is based on redfish information acessible
via manager.model. With the information about the idrac
version, we can force ironic to use a specific Virtual
Media slot.

Closes-Bug: #2125571
Assisted-By: Claude Code - Claude Sonnet 4
Change-Id: I38c8286c644d93a6f16137bd73f6e267948642b1
Signed-off-by: Iury Gregory Melo Ferreira <imelofer@redhat.com>
2025-09-25 15:18:29 -03:00
Zuul
cd025b8923 Merge "Fix cache image hard link between different file systems" 2025-09-25 17:49:32 +00:00
Zuul
acb3bf459e Merge "docs: further revise OCI image checksum note." 2025-09-25 03:35:25 +00:00
Jay Faulkner
aa6059eb5a Increase default sync_power_state_interval
60s as a default is reasonable with perfect hardware, but very small
amounts of hardware we deal with are perfect. A 2 minute default is
unlikely to have negative operator side effects and will decrease
conductor and node BMC load.

Signed-off-by: Jay Faulkner <jay@jvf.cc>
Change-Id: I921171b14a61cded4ba728dfd044746965a02e74
2025-09-24 19:54:14 +00:00
Riccardo Pittau
685dbeb356 Fix cache image hard link between different file systems
When caching an image between different file systems, the hard link
operation would fail. This is fixed by falling back to a copy
operation.

Assisted-By: claude-4-sonnet
Change-Id: Id1eced2e0a30044b0da7dd5f4f2dedc50a5297b6
Signed-off-by: Riccardo Pittau <elfosardo@gmail.com>
2025-09-24 17:30:50 +02:00
Zuul
5916cac4f8 Merge "Fix OCI artifacts pointing to a single manifest" 2025-09-24 08:36:44 +00:00
Kaifeng Wang
595f126b4d Fix incorrect arg while getting ports by portgroup
get_ports_by_portgroup_id accepts id instead of uuid.

Change-Id: Ia21beb5675d2c4383a734a5a434d623aa628db6c
Signed-off-by: Kaifeng Wang <kaifeng.w@gmail.com>
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-09-24 07:42:28 +00:00
Zuul
9cabfb838b Merge "Fix : AsRockRack Management via Redfish" 2025-09-23 20:02:07 +00:00
John Garbutt
3e8c25c1e0 Fix inspection IB port client-id
Currently, while IPA still reports the client-id correctly,
existing ports are not getting updated with the client id.

Closes-Bug: 2118579
Change-Id: I0124e9df57783326fcb2e95a38cb2f205d3f64c0
Signed-off-by: John Garbutt <john.garbutt@stackhpc.com>
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-09-23 12:51:35 -07:00
Zuul
b1ab2c5b79 Merge "Add SKU field to Redfish inspection" 2025-09-23 19:35:39 +00:00
Zuul
11535a5863 Merge "Add WSGI alias under ironic.wsgi.api" 2025-09-23 17:37:15 +00:00
Zuul
38605857ae Merge "Add cross-gating job with openstacksdk" 2025-09-23 15:32:40 +00:00
Zuul
b3feb6335f Merge "Expose hardware model, manufacturer and system UUID via Redfish sensors" 2025-09-22 22:13:31 +00:00
Zuul
883ad82094 Merge "Deprecate usage of ironic.api.wsgi:initialize_wsgi_app" 2025-09-22 17:04:12 +00:00
Julia Kreger
5b14254446 docs: further revise OCI image checksum note.
Change-Id: Ie58797414b5905404d7b811297b816a10e7e1fe3
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-09-22 09:07:49 -07:00
Stephen Finucane
1ef438f996 Migrate setup configuration to pyproject.toml
The only thing of note is the use of data files: while pbr allowed you
to include directories in a glob, setuptools only allows individual
files. This necessitates expanding out the list of files we wish to
copy.

Change-Id: I65156249c3494708d79789be23afb2d69c194848
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2025-09-22 11:46:52 +01:00
Dmitry Tantsur
4b8a3733f6
Fix OCI artifacts pointing to a single manifest
When using ORAS to upload a file to Quay, the tag points directly to
the manifest, not to the index of manifests. Currently, Ironic is not
capable of handling the former.

First, GET API to a manifest does not accept
application/vnd.oci.image.index.v1+json, only
application/vnd.oci.image.manifest.v1+json, so indicate that we
understand both.

Second, the logic in the OCI image service needs to be adjusted to this
case. If the index is a manifest, it is now treated the same as an index
with only that manifest.

Third, the manifest's body does not contain its own digest. Instead, it
can be fetched from the docker-content-digest header, so get it and
store as a virtual field dockerContentDigest.

As part of the change, I had to refactor identify_specific_image since
it exceeded the allowed complexity with my changes.

Also fix get_blob_url to work with image URLs without oci://. This is
not possible to trigger through the API but ensures internal
consistency.

Also provide more specific error messages instead of piling everything
under the very generic ImageNotFound and provide more logging.

Change-Id: Iba84bbe5da541700d20a445818a4a0d584f1eca8
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
2025-09-20 14:34:37 +02:00
Jay Faulkner
65dd9a6601 Add WSGI alias under ironic.wsgi.api
This is the OpenStack standard place for it, apparently. Even though
Ironic only has one WSGI server, we still need to add the extra module
layer.

Assisted-by: Claude code
Signed-off-by: Jay Faulkner <jay@jvf.cc>
Change-Id: Ia046124ede28991be6e1fe43b29819f2f28c8c9a
2025-09-18 13:37:36 -07:00
Dmitry Tantsur
4b26cbd719
Documentation: image_checksum is ignored for OCI URL's
Change-Id: If4b37ca78a06ef742c98d0b5ee1fa28308f764f0
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
2025-09-18 16:26:33 +02:00
Zuul
247ae57a22 Merge "CI: replace the outdated Bifrost job" 2025-09-16 15:05:24 +00:00
Zuul
217bc9891c Merge "Run the ironic-standalone-operator tests as non-voting job" 2025-09-16 09:34:57 +00:00
Zuul
6cfea6e06d Merge "Imported Translations from Zanata" 2025-09-15 21:58:39 +00:00
Nidhi Rai
217030928b Add SKU field to Redfish inspection
Collect SKU (Service Tag) from Redfish ComputerSystem
and include it in system_vendor inventory data.

This enables downstream tools like Nautobot to access
the Dell Service Tag or other vendor SKU information
during hardware inspection.

The change:
- Safely checks for SKU attribute existence
- Adds SKU to system_vendor dictionary
- Handles missing SKU gracefully
- Includes unit test coverage

Change-Id: I6623fd33b356d6149001c43a7179297a7c8568d8
Signed-off-by: Nidhi Rai <nidhi.rai94@gmail.com>
2025-09-15 20:27:54 +05:30
Zuul
9d605203b0 Merge "Update master for stable/2025.2" 2025-09-13 15:19:13 +00:00
Dmitry Tantsur
b8ed25483d
CI: replace the outdated Bifrost job
Change-Id: I5532dfcfb02f8d9180002bbb7e20baf9f63da46f
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
2025-09-13 16:45:21 +02:00
Zuul
e2f16ba888 Merge "fix: remove wait logic in pxe filter" 2025-09-12 15:27:43 +00:00
OpenStack Proposal Bot
48cda04284 Imported Translations from Zanata
For more information about this automatic import see:
https://docs.openstack.org/i18n/latest/reviewing-translation-import.html

Change-Id: I717f33d9eaa4cd365a73c72e15ef5a2466835076
Signed-off-by: OpenStack Proposal Bot <openstack-infra@lists.openstack.org>
Generated-By: openstack/openstack-zuul-jobs:roles/prepare-zanata-client/files/common_translation_update.sh
2025-09-12 03:39:53 +00:00
Mohamed-HDD
54977a14d5
Fix : AsRockRack Management via Redfish
Add required boot params in Redfish calls for AsRockRack

Related-Bug: #2073518
Change-Id: I0610d488eb4392bf335464e685aaadbf28d59529
Signed-off-by: Mohamed EL HADDAD <mohamed.el-haddad@ovhcloud.com>
2025-09-11 17:27:07 +02:00
OpenStack Release Bot
5ad2234b65 Update master for stable/2025.2
Add file to the reno documentation build to show release notes for
stable/2025.2.

Use pbr instruction to increment the minor version number
automatically so that master versions are higher than the versions on
stable/2025.2.

Sem-Ver: feature
Change-Id: I30d4a763778faa8f2e701b5dd78683d168e5a845
Signed-off-by: OpenStack Release Bot <infra-root@openstack.org>
Generated-By: openstack/project-config:roles/copy-release-tools-scripts/files/release-tools/add_release_note_page.sh
2025-09-11 12:38:16 +00:00
Zuul
5b2dd69ae1 Merge "Fix nexthop error when adding route to PUBLIC_SUBNET_IP" 2025-09-10 18:33:51 +00:00
Stephen Finucane
7ca8ddccf2 Add cross-gating job with openstacksdk
This is a good canary for schema-related issues. It seems reasonable to
only run on direct API-related changes. Anything that breaks on the SDK
side should be caught by the SDK job.

Change-Id: I2d6ba3666e569f867fd13b695d16d13e44e3fd44
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2025-09-10 16:13:23 +01:00
Zuul
e6837c8c33 Merge "api: Fix off-by-one error" 2025-09-10 13:18:16 +00:00
Luan Utimura
9375f3bd6c Fix nexthop error when adding route to PUBLIC_SUBNET_IP
The `stack` script has been consistently failing with:

```
Error: Nexthop has invalid gateway.
```

when it comes time to add a route to $PUBLIC_SUBNET_IP [1].

One solution to this is to add the `onlink` flag [2] to the link
mentioned above:

```
onlink pretend that the nexthop is directly attached to
       this link, even if it does not match any interface
       prefix.
```

[1] daf856cd2d/devstack/lib/ironic (L2583)
[2] https://man7.org/linux/man-pages/man8/ip-route.8.html

Change-Id: Ia6363e6b68de344dd82106077efff86143e63d39
Signed-off-by: Luan Utimura <luan.utimura@luizalabs.com>
2025-09-09 21:40:26 -03:00
Stephen Finucane
a2f37c5c71 api: Add schema for inspection rules API (requests)
Much of the validation already exists here. We're just shuffling it
about. We do end up with some validation, particularly with regards to
the code in ironic.common.inspection_rules.validation, but we can clean
that up in future changes once we've decided whether we're okay with
error message content changing or not (hopefully yes).

Change-Id: Id97b6d524913188cec557e0df64ebc1a2fc3eccd
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2025-09-09 18:13:16 +01:00
Stephen Finucane
e3f9bb75de api: Prevent overlapping schema versions
This is defines in Nova and is intended to prevent issues like those
seen in change I08e6bef63478df7c69a3f1f9864859a95c2e755e.

Change-Id: I57407ee5db0da88a7c76bf007dc803dd963bbf66
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2025-09-09 17:23:51 +01:00
Zuul
5a33e8dbe7 Merge "Avoid the wsgi application to start with eventlet" 2025-09-09 16:20:53 +00:00
Stephen Finucane
fed7c0416f api: Fix off-by-one error
Change-Id: I08e6bef63478df7c69a3f1f9864859a95c2e755e
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2025-09-09 17:05:01 +01:00
Arnaud M
6e5984576d Deprecate usage of ironic.api.wsgi:initialize_wsgi_app
Using ironic.api.wsgi:initialize_wsgi_app to provide custom config file
to ironic will prevent the oslo_backend to be set to threading and will
bypass the RLock on threading leading to race condition during threads
starts.

Instead, document a way to give config dir/file from environment
variables.

Change-Id: I2aabe72f4d28ec55727e06788d3a9d2976dda4bb
Signed-off-by: Arnaud M <arnaud.morin@gmail.com>
2025-09-09 08:22:38 +02:00
Arnaud M
5cbbf3fc9d Avoid the wsgi application to start with eventlet
When starting the wsgi application (e.g. using uWSGI), the app will
start using oslo_service eventlet backend.

We explicitely need to force the threading backing until it will be set
the default.

Change-Id: I5190cf2bb68f62448cce3659ee7f42951a304558
Signed-off-by: Arnaud M <arnaud.morin@gmail.com>
2025-09-09 00:30:17 +02:00
Jay Faulkner
7681e2216d Update release mappings for 32.0.x
Final flamingo release.

Signed-off-by: Jay Faulkner <jay@jvf.cc>
Change-Id: I61ef0a93191025d457d01f347ece12e12c499dc1
2025-09-08 11:21:02 -07:00
Dmitry Tantsur
e57e4c2d7c
Run the ironic-standalone-operator tests as non-voting job
Unlike the existing Metal3 job, this one covers a large number of
different Ironic configurations and is also sensitive to performance
regressions on the API layer.

Claude Code was used for the initial pass of converting the existing
Github workflow to Ansible.

Assisted-By: Claude Code
Change-Id: I80490c4ca89ab40d3cdc4ced7964d3dc06cd9a05
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
2025-09-08 17:01:27 +02:00
Stephen Finucane
f9c3ffb11d pre-commit: Run ruff before hacking
Otherwise hacking can complain about things like unused imports
immediately before ruff goes and removes them.

Change-Id: Ie8809cca3d947a5ecab3de99a8c926581aea212b
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2025-09-05 16:22:51 +01:00
Julia Kreger
2cb3e51dc0 fix: remove wait logic in pxe filter
Ironic has an issue, we don't run pxe filter in its CI so when
we removed the wait for start logic which is available and possible
with eventlet, we broke the pxe filter.

Change-Id: I8ee7ed7167362438da396aed6980a027ceaaaa72
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-09-05 13:22:07 +00:00
Zuul
defece13db Merge "Add a suggestive warning around power and sensor syncs" 2025-09-05 11:20:59 +00:00
Zuul
075ef3fdc4 Merge "Log how long power sync and sensor collections take" 2025-09-05 10:47:08 +00:00
Zuul
7fc23fda5a Merge "JSON-RPC: disable server-side logging with rpc_transport=none" 2025-09-04 18:48:23 +00:00
Zuul
b92ed5d7e2 Merge "Replace unused oslo.service options" 2025-09-04 16:45:13 +00:00
Zuul
985d220ec3 Merge "Add a prelude for 2025.2" 2025-09-04 15:20:53 +00:00
Julia Kreger
92fac7505b Add a prelude for 2025.2
Change-Id: Iea0900937124bc2bd6411904f6a03ca93336508d
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-09-04 14:34:09 +00:00
Takashi Kajinami
8d7be386d5 Replace unused oslo.service options
In threading mode the options implemented in oslo.service are not used,
in favor of the options imported from cotyledon.

Change-Id: I8a94bfea5fe9f9f54077e5d958198ede09f78903
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-09-04 22:45:57 +09:00
luocanhui
7ce3b8846a Add UT for metrics modules
Unimplemented InvalidMetricConfig exception used by "ironic/common/metrics_utils.py" module

Change-Id: Ia0bf49a8ab7338d32c8480982a6154424a195240
Signed-off-by: luocanhui <luocanhui_jk@163.com>
2025-09-04 12:18:55 +00:00
Julia Kreger
2ff035d42b Revert "Make ironic-tempest-uefi-redfish-vmedia-4k non-voting"
This reverts commit 907df2c40a
as the centos stream maintainers have indicated they fixed the
build issues as it relates to mirroring the images with yesterday's
push to the CDN.

Change-Id: I8cfcbe83267c3fc28bec117248b7cb3caa42197f
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-09-03 17:50:50 +00:00
Zuul
d5a8c87b85 Merge "doc: Fix installation of grub/shim EFI images in CentOS" 2025-09-02 18:27:37 +00:00
Zuul
19c5d86c66 Merge "Remove tenks reference in bug-deputy doc" 2025-09-02 16:51:24 +00:00
Clif Houck
b179ca369b
Remove tenks reference in bug-deputy doc
Since we don't directly maintain it

Change-Id: Ied769c2fcdb5550144fcb5d1312fc3e9a17a23a8
Signed-off-by: Clif Houck <me@clifhouck.com>
2025-09-02 10:08:55 -05:00
ikoliveira
fe633a7466 Expose hardware model, manufacturer and system UUID via Redfish sensors
This change adds support for collecting and exposing the node's hardware model, manufacturer and system UUID via redfish sensors data interface. This allows better insight into node
identity and vendor information through sensor metrics.

Closes-Bug: #2121630
Change-Id: I62a2e58a8fd7c1c6d3f45e52ec12c4338d8711b4
Signed-off-by: ikoliveira <igor.oliveira@ccc.ufcg.edu.br>
2025-09-01 16:53:52 -03:00
Zuul
624b6fe771 Merge "Revert "Switch from local RPC to automated JSON RPC on localhost"" 2025-08-29 15:28:38 +00:00
Zuul
1c5f9431e7 Merge "Drop wsgi script, docs around mod_wsgi" 2025-08-29 14:23:23 +00:00
Zuul
e65f93152c Merge "docs: trivial: clarify pull secrets for OCI image access" 2025-08-29 13:43:56 +00:00
Zuul
24ab604a51 Merge "Add hacking check to ban eventlet imports" 2025-08-28 23:00:26 +00:00
Dmitry Tantsur
4dd42796c0
Revert "Switch from local RPC to automated JSON RPC on localhost"
The initial concern was the multi-process model that cotyledon uses.
Commit 71dd34a7bd moved API to the
conductor process, so this no longer applies.

This reverts commit 3831464751.

Generated-By: Claude Code
Change-Id: Iaeabcfb8f6558220a10060ccca788f1f4b959f0e
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
2025-08-28 17:10:25 +02:00
Zuul
36364749c8 Merge "Follow-up: Fix improper HTTP status code usage" 2025-08-28 14:34:32 +00:00
Julia Kreger
9803975d7d docs: trivial: clarify pull secrets for OCI image access
Also, fix the json in the example config.json document.

Change-Id: I0c0ad427afdeba6740e1c4ef812f1c7552b32a00
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-08-28 06:47:51 -07:00
Hervé Beraud
faca47ae98 Add hacking check to ban eventlet imports
Ironic has fully removed its usage of eventlet. This change
introduces a new hacking check to ban any new eventlet imports
from being added to the codebase.

This follows the post-migration guidance from the eventlet
removal documentation:
https://removal.eventlet.org/guide/post-migration-guidance/#hacking-checks

Generated-By: gemini-cli and gemini-2.5-pro
Change-Id: I48ac535325f68ba0b2a9f50aec4ce19ac6265e77
Signed-off-by: Hervé Beraud <hberaud@redhat.com>
2025-08-28 11:30:57 +02:00
Afonne-CID
5cd688d420 Follow-up: Fix improper HTTP status code usage
Related-Change: I941c867c7a9400f2577de8d489a96628556f5b54
Change-Id: I461cad25ef767a1404d0c06c4cf0ed6ed74a0e1a
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-08-27 15:37:12 +01:00
Zuul
bc443a71b4 Merge "ci: disable the novnc service on multinode" 2025-08-27 14:12:58 +00:00
Zuul
3d30043b49 Merge "Reduce the number of RPC calls to traits API" 2025-08-27 13:45:38 +00:00
Zuul
0648eb29b9 Merge "Launch API in the same process as conductor for singleprocess Ironic" 2025-08-27 12:59:23 +00:00
Zuul
fa78ef1f90 Merge "Fix insufficient mocking in rpc_service tests" 2025-08-27 11:39:17 +00:00
Zuul
e0ce81ed1b Merge "Follow up to I9a5a2bfd9f4b538cc7217aefb7333df9ccdb9095" 2025-08-26 21:11:49 +00:00
Jay Faulkner
4349e4156e Drop wsgi script, docs around mod_wsgi
Ironic, like most openstack services these days, needs to have it's wsgi
module referenced as a module, and used under something like uwsgi or
gunicorn instead of with Apache mod_wsgi.

Assisted-by: claude code
Change-Id: I6a2c2688f73b71f94103622a9e821cab67be053e
Signed-off-by: Jay Faulkner <jay@jvf.cc>
2025-08-26 21:10:01 +00:00
Zuul
9dbfca2663 Merge "Trivial: remove meaningless logging" 2025-08-26 20:55:10 +00:00
Julia Kreger
b87b970e30 ci: disable the novnc service on multinode
It appears we have an address conflict as it relates to the
ir-novnc service, but we don't need it for these jobs.

So, disable the extra service.

Change-Id: I28fc766f62d9dda93f2d3469eaaec73e63057415
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-08-26 13:53:58 -07:00
Zuul
99c406a1c8 Merge "redfish: process inspection rules during inspection" 2025-08-26 18:42:15 +00:00
Zuul
9842db3d43 Merge "Fix improper HTTP status code usage (RFC 7231)" 2025-08-26 12:27:37 +00:00
Dmitry Tantsur
960afffda9
Trivial: remove meaningless logging
Change-Id: Iaa89eb4da064e07a34951b9ef0c43bb3303fa88b
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
2025-08-26 12:03:42 +02:00
Dmitry Tantsur
71dd34a7bd
Launch API in the same process as conductor for singleprocess Ironic
Indirection proved to impose very high performance costs. Even though
we've identified and fixed a few major contributors to the regression,
using RPC for a process to access itself has always been a stopgap
measure rather than a proper architecture.

This change moves the API from a separate service under the Launcher
to a separate thread in the conductor, similarly to how the JSON RPC
server is started. This paves the way to remove the local RPC entirely
in the next patch.

Change-Id: I0f3d854336bcc7ea1062f9a995e6d8979cb0cc22
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
2025-08-26 11:54:43 +02:00
Kaifeng Wang
c87d913593 Follow up to I9a5a2bfd9f4b538cc7217aefb7333df9ccdb9095
Fix wrong detach unit test.

Change-Id: I381a92d216352fbc933ea779a7bbccec740e7c2b
Signed-off-by: Kaifeng Wang <kaifeng.w@gmail.com>
2025-08-26 16:23:21 +08:00
Dmitry Tantsur
b4062590a7
Fix insufficient mocking in rpc_service tests
I don't know why it does not fail in the CI, it fails consistently
locally with:

ironic.common.exception.ConsoleContainerError: Console container error with
provider 'fake', reason: No 'ironic.console.container' driver found,
looking for 'fake'

Generated-By: Claude Code
Change-Id: Ia051a603b2eab17310bc21027666f556dc9a4fc1
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
2025-08-26 09:59:05 +02:00
Doug Goldstein
bb369b6248
redfish: process inspection rules during inspection
Include the execution of the inspection rules in the redfish inspector
to behave more like the agent inspector behaves and allow for feature
parity between the two.

Change-Id: Ib0e69d361a7336a3f978d948043d651021ba1061
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-08-25 18:16:46 -05:00
Zuul
976e029e14 Merge "Direct return of vmedia action during in power failure" 2025-08-25 21:22:10 +00:00
Zuul
003603fb5a Merge "Raise default IRONIC_DEFAULT_THREAD_SIZE" 2025-08-25 20:32:12 +00:00
Zuul
37d97b0790 Merge "inspection: fix None case for inventory data" 2025-08-25 20:27:20 +00:00
Zuul
a65ea27aa4 Merge "Fix setting IRONIC_THREAD_STACK_SIZE" 2025-08-25 17:13:10 +00:00
Dmitry Tantsur
6140285b59
Reduce the number of RPC calls to traits API
First, create_node already returns a complete TraitsList object as
node.traits, there is no need to fetch it again over RPC.

Second, there is no need to make get_trait_names an RPC call since it
operates on the local TraitsList object and does not access the DB.

Change-Id: Ic5563e5d1c36e7a4a8aa4aeeca4bf66255d55e7a
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
2025-08-25 19:02:43 +02:00
Jay Faulkner
eeb7b3cd76 Raise default IRONIC_DEFAULT_THREAD_SIZE
On Fedora and Gentoo kernels, this value is insufficiently small. Given
the worst case scenario is 19.2MB of extra wasted RAM for this being
raised, it's sensible to pick a default that'll work everywhere.

Change-Id: I548546e24bef90a27bff70906880f7779c29fcea
Signed-off-by: Jay Faulkner <jay@jvf.cc>
2025-08-25 09:42:19 -07:00
Zuul
3dda145b2f Merge "redfish: mechanical moves of inspection tests" 2025-08-25 14:19:30 +00:00
Zuul
c407228070 Merge "Orphaned accelerators after devices removed" 2025-08-25 14:19:23 +00:00
Zuul
b0d063fa82 Merge "Add request logging middleware for API requests" 2025-08-25 14:18:19 +00:00
Afonne-CID
df7dba0609 Fix improper HTTP status code usage (RFC 7231)
Return 400 Bad Request instead of 403 Forbidden for client-side
URI structure errors.

Closes-Bug: #1673877
Change-Id: I941c867c7a9400f2577de8d489a96628556f5b54
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-08-25 15:03:57 +01:00
Doug Goldstein
64ed78c810
inspection: fix None case for inventory data
The function should either return valid inventory data dict or raise an
exception that there is no inventory data. While not likely the type
checker does correctly state it is possible for an error to happen so
remove the possibility.

Change-Id: Iefe5b5e1df034514e4ab29761ff1adf95f2dc2a6
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-08-24 16:33:23 -05:00
Doug Goldstein
f29ae0a5c5
redfish: mechanical moves of inspection tests
Move the validation of the inventory and node.properties outside of the
node lock context manager. This does not need to happen inside of the
context manager and allows us to refresh the node object from the DB and
validate that the data was actually saved and not saved.

Change-Id: Ie3c1f8415a2e58553e24ce26e06d01468c34e4c5
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-08-24 16:30:32 -05:00
Zuul
0a82776ef2 Merge "No admin-set maintenance override on power sync" 2025-08-23 19:04:42 +00:00
Kaifeng Wang
9693518c34 Direct return of vmedia action during in power failure
a node in power failure state indicates ironic does not
have the ability to control bmc, we can directly return
instead of further aync vmedia attach/detach action.

Closes-Bug: 2121118
Change-Id: I9a5a2bfd9f4b538cc7217aefb7333df9ccdb9095
Signed-off-by: Kaifeng Wang <kaifeng.w@gmail.com>
2025-08-23 16:30:23 +08:00
Zuul
fcd4d26c3d Merge "api: Add schema for inspection rules API (versioning)" 2025-08-22 21:35:53 +00:00
Zuul
583f85c1d6 Merge "api: Add schema for bios API (responses)" 2025-08-22 20:42:30 +00:00
Zuul
37bfeecf11 Merge "Memoize calls to bcrypt.checkpw" 2025-08-22 20:17:53 +00:00
Zuul
c1c3608d9f Merge "Add a new 'category' field to the Port object" 2025-08-22 19:58:19 +00:00
Zuul
ff849d9a49 Merge "Add periodic cleanup of stale conductors" 2025-08-22 19:58:13 +00:00
Zuul
1d44ba0c52 Merge "api: Allow more types for updates" 2025-08-22 17:59:23 +00:00
Zuul
66aababdda Merge "Handle race conditions in power state changes" 2025-08-22 17:45:49 +00:00
Jay Faulkner
88f970b01b Add request logging middleware for API requests
Fixes bug 2121058 by adding RequestLogMiddleware to log API request
details including method, path, status code, and duration. This
addresses the loss of access logging after switching to CheRoot web
server, which doesn't have built-in access log functionality.

The middleware intercepts all requests, captures timing information,
and logs request details after completion using oslo.log at INFO level.
This helps with debugging by providing visibility into request patterns,
response codes, and performance metrics.

Initial prompt: fix https://bugs.launchpad.net/ironic/+bug/2121058
solely in Ironic. The change needs to be in a single commit and unit
tested. Use tox to run unit tests.

The bulk of this change was created by claude-code, reviewed by
claude-code, then heavily edited by me. This also includes a snippet
of code from code review that was created by Google Gemini.

Closes-Bug: #2121058
Assisted-By: claude-code
Assisted-By: gemini
Change-Id: Ifd3b60bb5d773460469414fd0dda65f4a7f000ed
Signed-off-by: Jay Faulkner <jay@jvf.cc>
2025-08-22 09:35:06 -07:00
Zuul
a5c5d5d94f Merge "Update the state machine diagram" 2025-08-22 09:58:11 +00:00
Zuul
128b118c71 Merge "Fix servicing abort to respect abortable flag" 2025-08-22 03:52:41 +00:00
Jacob Anders
e13142302d Update documentation to include servicing abort.
Adds instructions on how to use abort verb to exit from service states.

Change-Id: Ibf654dc277eb5bc4c38ed1e804bbb6df42d43617
Signed-off-by: Jacob Anders <janders@redhat.com>
2025-08-22 00:47:23 +00:00
Zuul
3e1d129241 Merge "Fix the ability to escape service fail" 2025-08-21 23:39:40 +00:00
Steve Baker
2a62718887 Memoize calls to bcrypt.checkpw
This intentionally high CPU overhead function is called for every API
and JSON-RPC request when Basic HTTP authentication is enabled. With the
recent indirection enablement this is causing a performance regression
for Metal3 due to the extra JSON-RPC calls. This change would improve
the performance of all branches of Metal3 if backported.

Change-Id: I2740035d2882aacddca9c541362d6e533140650f
Closes-Bug: #2121105
Signed-off-by: Steve Baker <sbaker@redhat.com>
2025-08-22 10:58:06 +12:00
Jay Faulkner
d13d488fdf Fix setting IRONIC_THREAD_STACK_SIZE
threading.stack_size() doesn't do implicit type conversion to int, we
need to do it explicitly.

This will hard-crash if this environment var is set to something that's
not an integer. I consider this a feature and not a bug.

Change-Id: Ibf976fb9b290d971525bc0b5488bc7029d6fad8a
Signed-off-by: Jay Faulkner <jay@jvf.cc>
2025-08-21 15:25:02 -07:00
Clif Houck
907df2c40a Make ironic-tempest-uefi-redfish-vmedia-4k non-voting
To address https://bugs.launchpad.net/ironic/+bug/2120974

Change-Id: I02071d6eff7c4222311d02b791d4d4ff64ed04b3
Related-bug: 2120974
Signed-off-by: Clif Houck <me@clifhouck.com>
2025-08-20 18:46:28 +00:00
Dmitry Tantsur
959f1762b9
JSON-RPC: disable server-side logging with rpc_transport=none
Otherwise, the same message appears twice: on the server and on the
client sides.

Change-Id: I69f2bc9024f2b399ae73d665b971202398f4d2e4
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
2025-08-20 14:42:42 +02:00
Jacob Anders
fa8a8fbb4b Fix servicing abort to respect abortable flag
Currently, Ironic codebase allows aborting servicing state regardless
of whether a servicing step has abortable flag set or not. This patch
fixes this by adding handling of service wait states to abort code paths
and adding the missing state machine transition.

Generated-By: Claude Code Sonnet 3.5
Change-Id: Ie07490bdb9c6461bd6ac7a6315773dcfb13592f9
Signed-off-by: Jacob Anders <janders@redhat.com>
2025-08-20 11:12:29 +00:00
Julia Kreger
fd8f83d281 Update the state machine diagram
Change-Id: Ie2f45aab230256345920a9d1ee0fce9952b984b7
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-08-19 16:51:19 -07:00
Julia Kreger
1eda80766c Fix the ability to escape service fail
Back when we developed service, we expected operators to
iterate to fix their issues, but we also put in abort code.

We just never wired in the abort code to the abort verb.

It really seems like we really should have done that, and
this change changes API and Conductor code path to make this
happen.

Closes-Bug: 2119989

Assisted-By: Claude Clode - Claude Sonnet 4
Change-Id: Ic02ba87485a676e77563057427ab94953bea2cc2
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-08-19 16:05:39 -07:00
Julia Kreger
60de53ea45 trivial: fix benchmark data generation script
While trying to create some fake data, I realized the randomizer
code was not running, nor were changes being committed, and largely
the code was still patterned on ipmi, when really we should be
patterning on fake. Also drops the number of nodes to create to 5000,
instead of 10,000, as we're ultimately going to create a fairly unhappy
fake ironic database with this model.

Using the fake interface *and* fake config, provides us an easy
path to begin to benchmark drastic changes to the conductor model
as part of removing eventlet.

Change-Id: I179c842d369eb9a3a60878556559746cca27bcaa
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-08-19 22:57:05 +00:00
Stephen Finucane
9a1580517c api: Add schema for bios API (responses)
We also harmonise the api-ref docs.

Change-Id: Ife3e6ae660f85d1e6a6e2fb835d08e4d45d1827e
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2025-08-19 17:04:44 +00:00
Stephen Finucane
67bf017011 api: Allow more types for updates
Until we define these API schemas more strictly, we should allow JSON
patch values to be any type.

Change-Id: If1f3de04d6f5c6948df504f382309bae16ee2b5e
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2025-08-19 17:59:06 +01:00
Zuul
ad29d2b00c Merge "Fix service failed state transitions for wait/hold" 2025-08-19 03:10:25 +00:00
Clif Houck
7e602d8427
Add a new 'category' field to the Port object
Adds a new category field to the port object. This is foundational work
for the first milestone of trait based port scheduling.

Change-Id: Ica76ae3da08bdf743a495781fe958cb71493a2e7
Signed-off-by: Clif Houck <me@clifhouck.com>
Signed-off-by: Jay Faulkner <jay@jvf.cc>
2025-08-18 21:59:33 -05:00
Zuul
927ee42087 Merge "Clean-up misc eventlet references" 2025-08-19 00:35:37 +00:00
Zuul
801716e690 Merge "Revert "ci: temporary metal3 integration job disable"" 2025-08-19 00:35:31 +00:00
Zuul
1766c056a1 Merge "Optional indirection API use" 2025-08-19 00:25:23 +00:00
Zuul
d6293f13bd Merge "Remove direct mapping from API -> DB" 2025-08-19 00:03:46 +00:00
Zuul
6775d079f5 Merge "Launch vnc proxy with no_fork" 2025-08-18 22:53:58 +00:00
Julia Kreger
0c70327a65 Clean-up misc eventlet references
Also does some minor doc revisions to provide improved clarity,
and some minor follow-up fixes related to prior changes.

Change-Id: I0409da2ad45df06f2dbd1c5cd3c2afd83ec10c32
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-08-18 16:54:00 +00:00
Julia Kreger
9cb25d3e3a Revert "ci: temporary metal3 integration job disable"
This reverts commit bd69ef1c57
which was a temporary change in order to facilitate the switch-over
from using eventlet to using threading.

Change-Id: I41efb4ed7c63d67fc1f709055727e624717c91eb
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-08-18 16:53:55 +00:00
Julia Kreger
67da8d8c31 Optional indirection API use
Adds the capability to utilize the indirection API model.

The vast majority of this change is the removal of legacy
comments and the swap of decorators on object methods to
allow the Versioned Objects Indirection API to route the
calls upon objects through the RPC layer to the conductor.

In order to make these calls occur, we need to also send along
a context, which is required to call the RPC layer, which is
fine. Original tests still work in that API surface calls still
ultimately trigger DB API calls in the backend, thus test changes
are actually minimal, similar to very slight changes in trait
retrieval as well. In that we really can't nest objects across
the indirection layer.

Change-Id: Ia161fef67b8a116fdf7cad9b2e559ba75263e196
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-08-18 09:53:11 -07:00
Zuul
72dc4b21d9 Merge "Set the backend to threading" 2025-08-18 15:08:20 +00:00
Zuul
f670ab98ae Merge "Replace GreenThreadPoolExecutor in conductor" 2025-08-18 15:08:13 +00:00
Zuul
0989bd8049 Merge "ci: temporary metal3 integration job disable" 2025-08-18 15:06:55 +00:00
Julia Kreger
8fd1cc8c97 Remove direct mapping from API -> DB
In order to complete the eventlet migration, we need to
be able to use the indirection_api surface to be able to
disjoint the API surface from the message bus, so we're
not fighting between processes for database locks.

Previously, the calls were directly routed directly
to the database layer to streamline performance.
This attachment allows the calls to run through
the indirection layer to the object, and return
the data to the caller.

As a result, API RPC versions are incremented.

Change-Id: I7358ac2a70198c78a0a9ba48511fc1289c64294f
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-08-17 06:38:30 -07:00
Julia Kreger
2e3fdd828c Launch vnc proxy with no_fork
The VNCProxy does some things which must be done in the parent
process, i.e. signal handling. The only compromise to keep it
in the parent process, is to utilize no_fork.

This is a compromise as the new process model works nicely with
systemd, so only tries no_fork if VNC is enabled with the single
process mode.

Change-Id: I45aa9f4ffad946c59ca3f551c971b979fbc64efd
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-08-16 07:14:37 -07:00
Julia Kreger
bbf57b1c2a Set the backend to threading
This change removes eventlet usage and explicitly invokes
threading instead of eventlet.

To do this, it also revises signal handling because this
change also moves from an all in one process to a multi-process
runtime model. The side effect of this is an increased memory
footprint, depending on the process launch model.

Change-Id: I184245d67edb1a2543aa24654836392f38777d71
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-08-16 07:14:27 -07:00
Afonne-CID
bedfd143eb Replace GreenThreadPoolExecutor in conductor
As part of the broader effort to remove eventlet support from Ironic
this patch updates the conductor’s worker pools to use
`futurist.DynamicThreadPoolExecutor` in place of
`futurist.GreenThreadPoolExecutor`

Although we are now explicitly configuring DynamicThreadPoolExecutor,
eventlet monkey-patching remains in effect, meaning these threads are
still cooperative green threads underneath.

One or more follow-up patches will be required to remove monkey-patching
entirely, switch backends and service launchers to native thread-based
implementations.

The goal here is to decouple from `GreenThreadPoolExecutor`,
which is deprecated, and start validating behavior and tuning under the
real thread interface. To this end, we also change the rejector out
from the futurist provided default rejector, to one which better models
the threaded behavior Ironic will exhibit once Ironic is launching
in threading mode.

Note: This does *not* complete the migration, but is one of the last
major steps before we explicitly begin to remove the invocation of
eventlet.

Depends-On: https://review.opendev.org/c/openstack/futurist/+/955217
Change-Id: I433b0b51f80d7c238e8109878b5c8bc15f9f5849
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-08-16 07:14:16 -07:00
Julia Kreger
56afcc2738 ci: temporary metal3 integration job disable
In order to merge eventlet removal patches and fixes related to
metal3, we need to merge four separate changes in series to get
the metal3 CI job back into a happy state. This is because:
* Eventlet removal changes the process model to sub-processes
* Metal3 Integration uses sqlite, which we've learned in the past
  can have locking issues between processes.
* The fix requires removal of direct database calls from the
  API surface, and instead for calls to be routed through the RPC
  layer.

Once the changes are merged together, the metal3 job has been shown
to work in other test runs, so we have high confidence overall, we
just unfortunately need give ourselves the window where the job is
not passing to merge sequence of changes which will be stacked
after this change.

Change-Id: I3e6cb1c25b04ff965fa40ff6dbac9bd1bb53c44b
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-08-16 07:14:02 -07:00
Stephen Finucane
bcf4255ef8 api: Add schema for bios API (requests)
Change-Id: I1519cedf8e5605c5415b71fd8bcf2f92ee0c99aa
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2025-08-16 14:07:54 +00:00
Zuul
adba0d8cad Merge "Always rebuild sphinx env on doc build" 2025-08-15 21:35:30 +00:00
Zuul
0c33d4288f Merge "Add a new 'vendor' field to the Port object" 2025-08-15 21:29:06 +00:00
Zuul
26b638436c Merge "Add RELEASE_MAPPING entry for 31.0 release" 2025-08-15 21:26:05 +00:00
Zuul
49a7eb9dad Merge "Add RELEASE_MAPPING entry for 30.0 release" 2025-08-15 21:25:59 +00:00
Stephen Finucane
52786d4fae api: Add schema for bios API (versioning)
Change-Id: Idceab8c80b24064b6a05e4b409a8d30b0ca25a95
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2025-08-15 13:30:18 +00:00
Zuul
352d1c83d4 Merge "ci: grenade: restart neutron services" 2025-08-15 12:29:22 +00:00
Zuul
dd38e3acc0 Merge "api: Add schema for allocations API (responses)" 2025-08-15 05:34:59 +00:00
Zuul
a7293215a4 Merge "allow running inspection hooks on redfish interface" 2025-08-15 03:53:40 +00:00
Zuul
d60aa481b1 Merge "fix redfish processor inspection" 2025-08-15 03:02:54 +00:00
Steve Baker
4678ed77a3 Always rebuild sphinx env on doc build
Building docs locally may build with stale extension content without
this change.

This change also adds the required bindep.txt packages for the pdf-docs
tox target.

Change-Id: If2264241d20ab0286b1b5ea723ef370c4d772693
Signed-off-by: Steve Baker <sbaker@redhat.com>
2025-08-15 10:56:13 +12:00
Afonne-CID
6135a00c3b Add periodic cleanup of stale conductors
A new periodic task to automatically remove conductor
records that have been offline for longer than a configured timeout
period. This addresses the issue where deleted or decommissioned
conductors would remain in the database indefinitely.

Closes-Bug: #2069771
Assisted-by: Claude Sonnet 4.0
Change-Id: I90eb159abad94d8369b8792fa17c20d80201569a
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-08-14 22:01:41 +01:00
Stephen Finucane
92dec6f770 api: Add schema for allocations API (responses)
Change-Id: Id57b67da4951584146944ac11165a00fc2ce053e
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
Related-Bug: 2086121
2025-08-14 18:27:47 +00:00
Zuul
1aec2d0307 Merge "api: Add schema for allocations API (requests)" 2025-08-14 17:49:10 +00:00
Afonne-CID
f1943cead5 Fix service failed state transitions for wait/hold
Add missing state machine transitions from SERVICEFAIL to SERVICEWAIT
and SERVICEHOLD for reserved wait/hold steps.

This fixes the edge-case where nodes in service failed state would
incorrectly transition directly to active state when wait/hold steps
were executed, bypassing expected intermediate states.

Closes-Bug: #2119990
Change-Id: I0a55ad45138c4d033570014bf45956dacaf11e72
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-08-13 23:19:09 +01:00
Zuul
f43a529c46 Merge "Initialize variable to prevent an error" 2025-08-13 17:24:56 +00:00
Clif Houck
8a2e33e808
Add a new 'vendor' field to the Port object
Adds a new vendor field to the port object. This is foundational work
for trait based port scheduling.

Depends-On: https://review.opendev.org/c/openstack/ironic/+/957166
Change-Id: Ifce7da0a123e9f36a83f1a6a34759b25c9b2e416
Signed-off-by: Clif Houck <me@clifhouck.com>
2025-08-13 11:15:28 -05:00
Clif Houck
ca65f2d3b7
Add RELEASE_MAPPING entry for 31.0 release
Depends-On: https://review.opendev.org/c/openstack/ironic/+/957164
Change-Id: I8e7a197414e2e1933714d9e8255c8b9b61b34d24
Signed-off-by: Clif Houck <me@clifhouck.com>
2025-08-12 12:33:19 -05:00
Clif Houck
50199f76c5
Add RELEASE_MAPPING entry for 30.0 release
Change-Id: I17412efce680ea7e96923239a0e4e1be00002fba
Signed-off-by: Clif Houck <me@clifhouck.com>
2025-08-12 12:27:18 -05:00
Kaifeng Wang
d7cea2a8bc Trivial: minor typo fix around network boot document
Change-Id: I9413c48ce6159bc2f452b8208c057443915f41f8
Signed-off-by: Kaifeng Wang <kaifeng.w@gmail.com>
2025-08-12 14:06:05 +08:00
Julia Kreger
58bcdf1a4a ci: grenade: restart neutron services
Recently networking-baremetal got a patch to leverage a relatively new
rpc call against neutron called report_state. However... in late 2024
neutron's RPC executions were split from the API, and grenade never
learned to restart the new service.. and that may also be intentional.

Until there is clarity on that front, the path is clear... to restart
the service.

This should clear up the overall grenade job execution failure.

Closes-Bug: 2118780
Related-Bug: 2117227
Change-Id: I9f942df892783a85387e6feb3a8bdb5396103e15
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-08-11 15:42:15 -07:00
Zuul
13e37e3004 Merge "Fix broken <range-in> in root device hints" 2025-08-11 20:04:35 +00:00
Afonne-CID
0fc991a255 No admin-set maintenance override on power sync
To avoid auto-clearing admin-set maintenance during recovery,
only set maintenance/fault on max retries when not already
in maintenance mode.

Closes-Bug: #2119618
Change-Id: Iac00adc1c5335a426c5411fdce2fa7911a42ad14
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-08-10 10:19:59 +01:00
Julia Kreger
5d4541e1e3 ci: move metal3 job to larger memory node
The meteal3 job has traditionally operated as a very tight memory
condition for quite some time. Specifically running minikube, ironic,
and two VMs in 8 GB of memory also influenced the job design.

However, with the removal of eventlet, this memory footprint and
process model swells a little bit creating conditions where the
job is essentially guarenteed to fail. Further discussion with
Riccardo, one of the other Ironic/Metal3 contributros yielded
that they were already thinking of increasing the size of the
VM because they had been encountering memory issues.

Given that this job already runs lean, albeit with no swap
which is intentional to prevent disk IO generated noisey neighbor
conditions, the only real choice is to just increase the VM size
to the next realistic size in OpenDev CI.

Change-Id: I87f9c94e6585347d8a35a1d04dd7d101a9e68261
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-08-08 06:01:56 -07:00
Afonne-CID
1a82ccfe72 Handle race conditions in power state changes
Fix race condition where Redfish power commands fail with
BadRequestError when hardware reaches desired state between Ironic's
state check and command execution. Now verifies actual power state on
exception and treats as success if already in target state.

Closes-Bug: #2119423
Change-Id: I46f84318ae28498901000283bef49c46260f80ea
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-08-08 05:19:13 +01:00
Zuul
59047a1ff4 Merge "Follow-up: Clear last_error on power match/sync" 2025-08-06 23:15:51 +00:00
Zuul
3ff6190491 Merge "Remove Python 3.9 support" 2025-08-06 22:55:39 +00:00
Jay Faulkner
c57922d5ec
[trivial] Fix rendering of 1.98 header
Needed to be marked as a header like the other versions.

Change-Id: Ia8f18b1157ebaaa80c05f74683616e7e02e8443a
Signed-off-by: Jay Faulkner <jay@jvf.cc>
2025-08-06 13:48:28 -07:00
Dmitry Tantsur
aa0348678b
Fix local RPC IPv6 detection to use socket binding instead of file checks
The local RPC code previously checked for IPv6 availability by examining
the existence of /proc/sys/net/ipv6/conf/lo/disable_ipv6 and reading its
contents. This approach was unreliable as it depended on filesystem
checks rather than testing actual IPv6 functionality.

The fix replaces the file-based check with an actual socket binding test
to ::1 using a context manager for proper resource management. Socket
reuse is enabled to prevent port conflicts. Debug logging is added when
IPv6 is unavailable. Unit tests are updated to provide comprehensive
coverage of the new implementation.

Change-Id: I1e3afabc78f1382ff5248707ff2ca8114d10dd90
Generated-By: Claude Code Sonnet 4
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
2025-08-06 16:57:15 +02:00
Zuul
ef05073952 Merge "fix up redfish inspection mock ethernet interface data" 2025-08-06 13:48:09 +00:00
Tatiana Kholkina
a6f35d78a8 Initialize variable to prevent an error
The variable rpc_node is assigned in a try block but used
outside of it. If the try block fails, rpc_node will not be
assigned and an error will occur.

Change-Id: Ie02c724c3165dd66aedaf14cec80a3c760d62dfe
Signed-off-by: Tatiana Kholkina <t.kholkina@maxima-int.com>
2025-08-06 10:55:48 +03:00
Zuul
d4372ad628 Merge "Populate switch_info with lldp system name" 2025-08-05 18:09:02 +00:00
Tatiana Kholkina
49148f039b Fix logging for verification steps
The logging for verify_streps used the deploy-steps attribute,
leading to incorrect logs. Correct the logging statement to use
instance.verify_steps to accurately reflect the verification steps.

Change-Id: I6c9d415913e468b8e529ff88066fda81c4c6b456
Signed-off-by: Tatiana Kholkina <t.kholkina@maxima-int.com>
2025-08-05 08:22:02 +03:00
Stephen Finucane
4591b3a43e
api: Add schema for inspection rules API (versioning)
We maintain the different HTTP error codes for GET operations (HTTP 404
(Not Found)) versus other operations (HTTP 405 (Method Not Allowed))
when requesting an earlier microversion.

Change-Id: I8e215b483f0c2d7b25657fa413296415629fe96e
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2025-08-05 03:21:51 +00:00
Doug Goldstein
747370333d
allow running inspection hooks on redfish interface
Added the redfish inspection interface to be able to run inspection
hooks in the conductor on the inspection data in the same way the agent
inspection interface operates. Removed the special casing of the
processor and the PXE interface since we now use the standard hooks to
populate this data. Fixed up some tests on node properties to now show
that the data matches correctly.

Change-Id: Ia8db39b4818a981fe0ff76f5c9441c98d1b442ed
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-08-04 15:28:12 -05:00
Doug Goldstein
5a8312fefa
fix redfish processor inspection
The processor inspection tests actually are looking at the instruction
set value and expecting it to be x86_64 while the processor architecture
value is x86 which we map to i686. The current tests confuse this by
mixing the two different return values from the get_members() mock and
the summary mock so it doesn't break things but later usage of redfish
inspection breaks the existing hook tests so fix up the mocks to be
consistent. The _get_processor_info() function additionally operates on
an out-parameter which is a bit awkward in Python so use the more
idiomatic return value to set the expected data. Lastly the cpus field
on the node properties is not a typical field populated by other
inspection methods so drop it entirely. Then match the behavior of
ironic-inspector and ironic-python-agent by ensuring the architecture
and count fields are always set in the cpu inventory data.

Change-Id: Id99d6948f8bef73302281e84411b2263716a278f
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-08-04 15:28:07 -05:00
Afonne-CID
587dca1971 Follow-up: Clear last_error on power match/sync
Adds a release note for the fix in patch 955432.

Related-Change: https://review.opendev.org/c/openstack/ironic/+/955432
Change-Id: I2703e91ee4a3bdb65a17d5ad8511fdc909ee2262
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-08-04 21:18:02 +01:00
Zuul
14ca87cdcc Merge "api: Add schema for allocations API (versioning)" 2025-08-04 16:21:44 +00:00
John Garbutt
ac371ce247 Populate switch_info with lldp system name
Its easier to configure NGS switches via their hostname.
LLDP is usually reporting the hostname. Putting that into
switch_info certainly helps where you don't know the switch mac.

Change-Id: Ibcc1604c2792936a51ad2ef9fe6b8b9c1dd18289
Signed-off-by: John Garbutt <john.garbutt@stackhpc.com>
2025-08-04 15:03:03 +00:00
Zuul
e415f2a441 Merge "Restore architecture.rst with redirect notice to overview" 2025-08-04 13:40:05 +00:00
Zuul
61bd9c59c5 Merge "doc: Update contributor docs to include multiple doc sources and preview options" 2025-08-04 13:29:16 +00:00
Zuul
90346e5985 Merge "[docs] Update manual clean and verify steps" 2025-08-04 07:43:15 +00:00
Doug Goldstein
382a9f5c80
fix up redfish inspection mock ethernet interface data
The mock data for redfish inspection was not correct after the change in
Ide947f410c3d0d0f67a735c18b30f8cb56caa6b3 which wasn't detected in the
existing tests but follow on code shows it.

Change-Id: I5eb876b35437e0adc7310814b64c48b103a52294
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-08-01 15:54:20 -05:00
Zuul
daf856cd2d Merge "conf: Add '[api] response_validation' option" 2025-08-01 14:48:24 +00:00
Zuul
637c9eddbc Merge "Add manual clean and automated verify steps to set BMC clock via Redfish Manager" 2025-07-31 14:16:00 +00:00
Zuul
b4db605385 Merge "Drop redundant geattr" 2025-07-31 09:32:13 +00:00
Zuul
b4a39bacbf Merge "doc: Use dnsmasq to run tftp server" 2025-07-31 07:49:54 +00:00
Queensly Acheampongmaa
3106588d61 [docs] Update manual clean and verify steps
This updates admin documentation for the Redfish-based manual
clean step `set_bmc_clock` and automated `verify_bmc_clock`.

- Updates the cleaning.rst with an example of using `set_bmc_clock`.
- Adds a section to the steps.rst for the `verify_bmc_clock`.
- Explains how to enable the verify step using the
`enable_verify_bmc_clock` config option under `[redfish]`.

Change-Id: Ied7fa289178510ccb0ceaa790fe8d89ed7e481b6
Signed-off-by: Queensly Kyerewaa Acheampongmaa <qacheampong@gmail.com>
2025-07-31 06:17:45 +00:00
Queensly Acheampongmaa
94948bb194 Add manual clean and automated verify steps to set BMC clock
via Redfish Manager

This patch adds two new capabilities to the Redfish management
interface in Ironic for setting the BMC clock:

1. A manual cleaning step (`set_bmc_clock`) that allows operators
   to set the BMC clock explicitly by providing datetime and
   timezone offset.

2. An automated verify step (`verify_bmc_clock`) that, if enabled
   via configuration, sets the BMC clock during node verification
   using the current UTC time.

These steps aim to prevent certificate validation failures caused by
incorrect BMC time, particularly when dealing with TLS certificates.

A new configuration option `redfish.enable_verify_bmc_clock` has been
added to control the automated verify behavior.

The minimum version of `sushy` has also been updated to is 5.7.0
to support these features.

Related patches:
- https://review.opendev.org/c/openstack/sushy/+/950539
  (Add support for Manager DateTime fields in sushy)
- https://review.opendev.org/c/openstack/sushy-tools/+/950925
  (Fix Manager DateTime field handling in sushy-tools)

Partial-Bug: #2041904
Change-Id: I75cbd39a60f8470224dc5a2fe0a4f17c22acd1cd
Signed-off-by: Queensly Kyerewaa Acheampongmaa <qacheampong@gmail.com>
2025-07-31 05:27:20 +00:00
Zuul
a9d29e85c7 Merge "Switch from local RPC to automated JSON RPC on localhost" 2025-07-30 12:48:55 +00:00
Takashi Kajinami
65eb4ba370 Drop redundant geattr
The fail_on_port_binding_failure option is actually registered so we
can safely assume the attribute is always present.

Change-Id: I4157a9dcf1f94904b5b09efcd6fc78d0b2983fda
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-07-30 21:41:40 +09:00
Zuul
686eb56a83 Merge "Clear last_error on power match/sync" 2025-07-30 12:21:40 +00:00
Zuul
ef43f2bbf3 Merge "Fix inspection rules validation" 2025-07-29 17:06:02 +00:00
Afonne-CID
38b15996c5 Fix inspection rules validation
Closes-Bug: #2115332
Change-Id: Idf2fa4bc5b844dd2865d98c6de4f78ebf614d3ca
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-07-29 10:33:28 +01:00
Kaifeng Wang
a8d2ed88a2 Orphaned accelerators after devices removed
Fixes the issue that when accelerator devices were
removed from node, a re-introspection does not remove
previous accelerator device information from the node.

Closes-Bug: 2118958
Change-Id: Ia57902a9095b78e0128a728693c03e0a01c6421b
Signed-off-by: Kaifeng Wang <kaifeng.w@gmail.com>
2025-07-29 10:58:49 +08:00
Afonne-CID
0125c26aba Log executed steps during cleaning/servicing/deploy
Log steps performed during step-based flows in Node History
at the beginning and at completion (or abort).

Closes-Bug: #2106758
Change-Id: Ieffacf174180036d6a2418a8faf72a94eea74fb8
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-07-28 18:21:18 +01:00
Zuul
51dd388d12 Merge "Skip initial reboot to IPA when updating firmware out-of-band" 2025-07-28 14:58:10 +00:00
Zuul
069566ff6a Merge "ci: mark failing jobs non-voting pending fixes/removal" 2025-07-26 20:30:53 +00:00
Dmitry Tantsur
322a10dcfb Fix broken <range-in> in root device hints
Closes-Bug: #2117514
Change-Id: I3747230c788def8a484b7c65ab60b998b3661ae9
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
Signed-off-by: Riccardo Pittau <elfosardo@gmail.com>
2025-07-26 18:48:54 +02:00
Zuul
77bd8c988d Merge "Drop remaining reference to openSUSE" 2025-07-25 20:57:00 +00:00
Julia Kreger
3e39f8aaec ci: mark failing jobs non-voting pending fixes/removal
The snmp job has started failing because we don't have
an event reconcilation loop for asyncio in the main service.
It seems somehow the asyncio version of pysnmp is slipping into
the CI job which ultimately is breaking us at this point, although
I see no actual state of it in the logs. Its just weird.

In any event, it is a known issue.

The other issue is the grenade jobs are failing on neutron upgrades.
This appears to be due to legacy names being used in the CI job
configuration.

We should fix those, but we've got an open bug for that now:
https://bugs.launchpad.net/ironic/+bug/2118780

Change-Id: I1fbe4b0c519b5911db6f92e2963df99a882fa317
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-07-25 08:07:52 -07:00
Julia Kreger
c99230060f Add a suggestive warning around power and sensor syncs
While looking at the threading issues related to the removal
of eventlet, it dawned on me that it wouldn't be a bad idea for
Ironic to log a warning suggesting corrective actions an operator
could take for non-ideal performance behavior.

For example, if we're not launching enough power sync workers, or
enough sensor data collection workers, then the check interval
begins to become the minimum, and the task just re-launches
after the sweep.

That, itself, is not a huge issue except it can begin to reduce
the meaningfulness of and ready reliability of the status data
in larger clusters, where operators should likely take actions
which may be increase the workers, or add conductors.

Change-Id: Ic9277c5389c7e8f2d68e72bf6338a4f509989e75
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-07-24 11:51:43 -07:00
Jacob Anders
1b2c01185c Skip initial reboot to IPA when updating firmware out-of-band
This change enables Ironic to skip initial reboot to IPA when
performing out-of-band firmware.

Change-Id: Id055a4ddbde3dbe336717e5f06ca6eb024b90c9f
Signed-off-by: Jacob Anders <janders@redhat.com>
2025-07-24 23:13:04 +10:00
Dmitry Tantsur
ecf1571921
Log how long power sync and sensor collections take
Change-Id: I1632d6e6dd87dd6dc71b0fd86d8b9cd06279d7dc
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
2025-07-24 11:32:06 +02:00
Zuul
60e10d1266 Merge "[docs] Add NIC Firmware Update to Firmware Interface Docs" 2025-07-23 08:42:29 +00:00
Takashi Kajinami
207fd08d38 doc: Fix installation of grub/shim EFI images in CentOS
Fix the package name for grub image (now we should use one of -ia32
and -x64). Also the image file paths are different in RHEL.

Change-Id: Id3972c28bb781b97d8a0070edbbc00fc63734aa8
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-07-22 21:41:49 +09:00
Takashi Kajinami
635849989a doc: Use dnsmasq to run tftp server
The xinetd package is no longer available since CentOS Stream 9, and
the pre-set service to server tftp server by dnsmasq is now provided
by a sub package in RDO.

Change-Id: Ia62c3bba5bc83a262e1e6bec692dfcf8ec63f56b
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-07-22 20:32:14 +09:00
Takashi Kajinami
9d251bfa24 Drop remaining reference to openSUSE
Installation guide for oepnSUSE and SLES was removed due to removal of
their OpenStack packages.

Also drop explicit mention of RHEL/CentOS versions from the description
common for at least CentOS Stream 9.

Change-Id: I8555b8ea5ac5dcc07112773c2d4e9668e038d859
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-07-22 19:49:30 +09:00
Zuul
82122d6298 Merge "Remove installation guide for openSUSE/SLES" 2025-07-22 09:34:18 +00:00
Zuul
508b979629 Merge "Remove rootwrap" 2025-07-22 09:34:11 +00:00
Zuul
62f3c95b12 Merge "Redfish Firmware Interface - NIC Support" 2025-07-22 09:34:05 +00:00
Iury Gregory Melo Ferreira
153d425a5c [docs] Add NIC Firmware Update to Firmware Interface Docs
This commit adds documentation about the support for NIC
Firmware Update via Firmware Interface

Change-Id: I0514d6122a38e00ac4150a5693c1f4ffa788ffda
Signed-off-by: Iury Gregory Melo Ferreira <imelofer@redhat.com>
2025-07-21 21:01:17 -03:00
Afonne-CID
a4e7939b66 Clear last_error on power match/sync
When a node recovers from a BMC failure via power state sync, the
`last_error` field may continue to persist stale errors on an otherwise
healthy, operational node, which gives a misleading impression of failure.

If `[conductor]node_history` is enabled, error traces are preserved,
so it's safe to reset `last_error`.

Change-Id: Ia42bdc00a5ab3191c64d223eeae978994fb96868
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-07-21 22:01:54 +01:00
Zuul
c958d7eca1 Merge "Update firmware schema to require 'created_at' and 'updated_at' fields" 2025-07-21 17:21:58 +00:00
Dmitry Tantsur
3831464751
Switch from local RPC to automated JSON RPC on localhost
Change-Id: I4a245b3820f8054cb8e6b716aa101aeb3876e504
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
2025-07-21 18:15:17 +02:00
Takashi Kajinami
b19aceda08 Use specific util methods in vfat image creation
We no longer have to use the generic execute since rootwrap was
removed.

Change-Id: I2e700c9ba5b5740aaf3b89172423d23f51177f39
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-07-21 23:38:22 +09:00
Takashi Kajinami
489af188c0 Remove rootwrap
Ironic no longer uses rootwrap since iscsi deploy was removed. See [1]
for details.

Remove the config files and the command for rootwrap because these are
useless. We can remove these from the repository first to force distros
get rid of these.

[1] be09717be2

Change-Id: I0a8e26e8990eae8108537541159f7810d35b70f1
Signed-off-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
2025-07-21 23:38:22 +09:00
haseeb
790f43337d Add interface name to inventory for inspection hooks
validate-interfaces inspection hook expect each interface
entry in the inventory to include a 'name' field.

The 'identity' attribute from the Redfish EthernetInterface resource is used to populate this field because it provides unique identifier for each interface.

Change-Id: Ide947f410c3d0d0f67a735c18b30f8cb56caa6b3
Signed-off-by: haseeb <syedhaseebahmed12@gmail.com>
2025-07-17 22:04:28 +05:30
Zuul
d264de34b0 Merge "Advanced vmedia deployment test ops" 2025-07-16 14:34:37 +00:00
OpenStack Proposal Bot
1b3e56699f Imported Translations from Zanata
For more information about this automatic import see:
https://docs.openstack.org/i18n/latest/reviewing-translation-import.html

Change-Id: I773fafe045897fb56fe03cb9c4c6e6fd1fecaac9
Signed-off-by: OpenStack Proposal Bot <openstack-infra@lists.openstack.org>
Generated-By: openstack/openstack-zuul-jobs:roles/prepare-zanata-client/files/common_translation_update.sh
2025-07-15 03:48:21 +00:00
Dmitry Tantsur
4b17246f6e
Remove focus from ironic-inspector in the documentation
Change-Id: Ib5d3f745b6ce6aa84ee87e5631690c9b0a45564a
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
2025-07-13 13:18:09 +02:00
Zuul
e5ee70d3dc Merge "Stop short-cutting to local manager with all-in-one processes" 2025-07-10 18:13:00 +00:00
Zuul
41f1469c70 Merge "ci: stabilize ironic-standalone-redfish" 2025-07-10 15:54:42 +00:00
Zuul
ff6fee443b Merge "feat: add verify ca conf support for drivers" 2025-07-10 14:52:04 +00:00
Zuul
b49604ee5b Merge "update Jinja2 to address CVE-2024-2383" 2025-07-10 09:33:55 +00:00
Zuul
3cae31eddd Merge "[docs] Automated cleaning by runbook" 2025-07-09 16:50:25 +00:00
Zuul
443a0121ff Merge "Handle unresponsive BMC during Firmware Updates" 2025-07-09 16:50:19 +00:00
Chris Krelle
5b4bce7c8b update Jinja2 to address CVE-2024-2383
Details: https://nvd.nist.gov/vuln/detail/cve-2024-2383
More details found at: https://nvd.nist.gov/vuln/detail/CVE-2024-34064

Change-Id: Id2aafa40594f9cb6518983136ec5c25d4ef1682d
Signed-off-by: Chris Krelle <ckrelle@nvidia.com>
2025-07-09 09:17:32 -07:00
Julia Kreger
03fd6f9924 ci: stabilize ironic-standalone-redfish
While looking at issue reports, I noticed we are likely stressing
the ramdisk too much and running it out of space.

Anyhow, one of our CI jobs fails more than others, and it needs to
be swapped around so the image is not downloaded, then converted in
the ramdisk. It is the only job which does it, and we should keep that
behavior, but we need to get CI in a happier place first.

Related-bug: 2116135
Change-Id: I77c30c370cf5288703663e495ab9e60f3e8a7b2e
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-07-09 09:05:59 -07:00
Sharpz7
259cc23316
Update firmware schema to require 'created_at' and 'updated_at' fields
This change modifies the API response schemas for firmware to make the 'created_at' and 'updated_at' fields mandatory, matching the actual behavior.

Generated-By: Cursor
Change-Id: I777dff47e43bd3c8e307fe1461f1b2172513c682
Signed-off-by: Sharpz7 <adam.mcarthur62@gmail.com>
2025-07-09 02:14:37 +00:00
Dmitry Tantsur
bb0f6fe12d
Stop short-cutting to local manager with all-in-one processes
It used to be an optimization for single-process Ironics with RPC
enabled. Unfortunately, this approach won't work after the migration
from eventlet.

I don't expect this change to be user-visible, although purely
theoretically there may be edge cases with misconfigured RPC that get
broken.

Change-Id: If4be34178f920ab6b2f6318b15a490672bd6ec3d
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
2025-07-08 19:20:40 +02:00
Iury Gregory Melo Ferreira
0624d19876 Redfish Firmware Interface - NIC Support
This commit aims to add support for NIC firmware updates.

Since vendors don't have a standard for naming NICs, we
will be adding a prefix "nic:" to the NIC name.

Closes-Bug: #2107998
Change-Id: I7090534ad66a77ca103f2ca154f9b6feea818e88
Signed-off-by: Iury Gregory Melo Ferreira <imelofer@redhat.com>
2025-07-08 13:36:38 -03:00
Zuul
577833d785 Merge "Fix names of steps in comments as per function" 2025-07-07 17:48:04 +00:00
Zuul
fc9324f242 Merge "Make _by_arch ramdisk uses & validation consistent" 2025-07-07 17:47:46 +00:00
Julia Kreger
276937a571 Cleanup tests for eventlet migration
In preparing to remove eventlet, we discoverd eventlet was hiding
three distinct issues in our tests.

1) Eventlet was hiding some issues, like... some tests explicitly
   trying to stop a fake service.
2) Our tests at time crossed the boundry of a thread. While not
   awful, and provides us a higher level of assurance.
3) Some of the bad patterning sort of amplified in some of the code
   which we'll eventually need to sort out.

In any event, The cleanest path was to make a test centric start
method which does the basic needful for the tests, *and* which also
explicitly launches Synchronous Executors as opposed to threads.

This pattern can be leveraged to start to sub divide the actual
service launches at some point, while also keeping explicit
synchronous executor behavior which will be absolutely required
for use of threads in the post-eventlet world.

Change-Id: Ib75406a3e386b78197ea78cce291c3bd295d20cf
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-07-03 15:37:54 -07:00
Zuul
763d9d7b3b Merge "Fix Sensor Data values" 2025-07-03 06:04:23 +00:00
Mahnoor Asghar
abddd546fc Fix names of steps in comments as per function
Change-Id: I4ba882ffd70c6de3c20fc9de3d82b10ffeeb22ea
Signed-off-by: masghar@redhat.com
2025-07-02 10:16:02 -04:00
Iury Gregory Melo Ferreira
2411779ee8 Handle unresponsive BMC during Firmware Updates
When doing firmware updates for BMC, we saw cases where Ironic wouldn't
be able to contact the BMC, marking the node in a failed state because
of it.
This patch adds a configuration option that tell for how long ironic
should wait before proceeding with the reboot to finish the update.
We will attempt to improve the waiting time in a follow-up, trying
to identify when the bmc was unresponsive and when it was back.

Closes-Bug: #2092398

Change-Id: I53ffc8a06d5af8b0751553c3d4a9bb1c000027ae
Signed-off-by: Iury Gregory Melo Ferreira <imelofer@redhat.com>
2025-07-01 08:45:28 -03:00
Zou Yu
65909e25ab feat: add verify ca conf support for drivers
Closes-Bug: #2040236
Change-Id: Iaedb68e9e3c22b7194c9e09425757a081c601bf1
2025-07-01 15:19:02 +08:00
Zuul
d4b2ce44fc Merge "Mark SNMP driver unsupported for removal" 2025-06-30 17:43:18 +00:00
Zuul
b99657db42 Merge "fix: handle unexpected 'loop' in actions field" 2025-06-30 13:31:01 +00:00
Zuul
1ca37f3ded Merge "trivial: follow-up on I07172e48207e09c0858298e34eea038c776d3c74" 2025-06-30 08:16:46 +00:00
Zuul
21de7574ca Merge "Stop using oslo.service graceful_shutdown_timeout" 2025-06-29 22:14:23 +00:00
Iury Gregory Melo Ferreira
13df83eef7 Fix Sensor Data values
The value for some property in the sensor data is a dictionary
e.g.: 'state':{'_value_': 'Enabled',
               '_name_': 'ENABLED',
               '__objclass__': "<enum 'State'>"}

Which doesn't add useful information, this commit attempts to
prioritize sending only the `_value_` when possible.

Closes-Bug: #2113877
Change-Id: I44d07b637357040a5b9d1a975a50e6cbccfb43db
Signed-off-by: Iury Gregory Melo Ferreira <imelofer@redhat.com>
2025-06-27 22:52:09 -03:00
Julia Kreger
a2b18ca211 trivial: follow-up on I07172e48207e09c0858298e34eea038c776d3c74
Removing the eventlet invocation in the unit tests which matches
the base change. Given the slight syntax change, its not really
a big deal, just cleanup.

Change-Id: Ia007e08dff44e4530f22ad344aaf2f8889000763
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-06-27 15:05:10 -07:00
Julia Kreger
0e0e734247 trivial: note ipmitool code which can be removed with eventlet
Took a look at the green subprocess invocation in ipmitool.py
and it became clear we can just remove it at the same time as
the monkey patching.

Change-Id: Ifd1c296fc61a86dcf1f3d32b3f5f166bcec8f74b
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-06-27 07:24:37 -07:00
abhibongale
2be79d8096 fix: handle unexpected 'loop' in actions field
Updated the change_actions method in inspection rules to account for
unexpected 'loop' values being added to the actions field by the API.

Although the API is not expected to include 'loop', it's still
appearing in some responses, causing issues.
This update ensures such cases are handled gracefully.

Related-Bug: 2105478
Change-Id: I9e03cd8d7640037cb98bc2586ddc03ed264ce2ac
2025-06-26 09:43:05 +01:00
Takashi Kajinami
34332802c0 Remove Python 3.9 support
Python 3.9 is no longer part of the tested runtimes[1].

[1] https://governance.openstack.org/tc/reference/runtimes/2025.2.html

Change-Id: If485e3254d5b8e39bda61f0c3f48218726a3f687
2025-06-26 11:12:29 +09:00
Julia Kreger
205893fc46 Change the novncproxy service code to handle eventlet-lessness
While exploring removing the invocation of eventlet.hubs.use_hub()
from the novncproxy service code, I discovered that we needed to
go ahead and optionally invoke the eventlet.hubs.use_hub()
depending on if the service launch has occured such that the runtime
has been monkey patched.

This is because the service does not operate properly when moneky
patched without the eventlet.hubs.use_hub() invocation. Similarly
if the eventlet monkey patch is removed entirely then the service
works as expected.

Change-Id: I976086d1645a3a8cc8b169adbeafdb2522452153
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-06-25 13:12:59 -07:00
Harald Jensås
c0a83a46a9 Stop using oslo.service graceful_shutdown_timeout
Add option in ironic.conf's condutor section:
`[conductor]/graceful_shutdown_timeout`.

Set `deprecated_group=DEFAULT` and add `deprecated_reason`.

Change-Id: I7dcc66802d0dc2baef7a932458ae255bfa0f9514
2025-06-25 20:50:34 +02:00
Zuul
8b9883c6c7 Merge "Add api-call action for ironic inspection rule" 2025-06-19 17:15:30 +00:00
minwooseo
a986fbdcb9 Add api-call action for ironic inspection rule
This patch introduces a new rule action plugin, `api-call`, to trigger
a webhook (via HTTP GET) when rule matching completes successfully.
It enables external integrations like alerts or automation triggers.

This feature supports:
- Timeout configuration (default: 5 seconds)
- Automatic retry with backoff (default: 3 times, backoff factor 0.3)
- Optional custom headers and proxy settings

Retry is applied for HTTP status codes: 429, 500, 502, 503, 504.

This continues the effort initially reviewed in ironic-inspector:
https://review.opendev.org/c/openstack/ironic-inspector/+/942968

New rule usage example:

[
  {
    "description": "Trigger webhook after introspection",
    "actions": [
      {
        "action": "api-call",
        "url": "http://example.com/hook",
        "timeout": 10,
        "retries": 5,
        "backoff_factor": 1
      }
    ]
  }
]

Change-Id: I59e14ef77430477fe029f35e157d70d4af307ac1
2025-06-19 12:43:11 +09:00
Jay Faulkner
5c4c324423 Add specific "use 24.04" note to devstack-guide
This might prevent someone from wasting time trying to get Ironic
working on Jammy.

Change-Id: Id8216d1a1a2d3cc3fa3c149fab2d42fb74243247
2025-06-18 08:19:28 -07:00
Zuul
d498c150ec Merge "Eventlet: Migrate API & JSON-RPC to cheroot" 2025-06-18 01:09:39 +00:00
Zuul
fcbcd89dc6 Merge "Increase memory allocation for ironic-base" 2025-06-17 16:46:59 +00:00
Zuul
b331bcfae3 Merge "Revert "Replace license classifier"" 2025-06-17 14:17:15 +00:00
Takashi Kajinami
4aba6bcfc4 Revert "Replace license classifier"
This reverts commit 9406b44657.

Reason for revert:
There is still on-going discussion about the new license expression
and it may be changed in a near future. Until we get more stable
conclusion let's stick with the older format. See [1] to find details.

[1] https://review.opendev.org/c/openstack/nova/+/951226

Change-Id: I7e0ec1df01b9fea9e86d961427a1edc6342f224c
2025-06-17 13:23:36 +00:00
Zuul
08614b5420 Merge "Report provisioned state where appropiate when raising InvalidState* Exceptions" 2025-06-16 19:19:12 +00:00
Julia Kreger
ccbc47270f Increase memory allocation for ironic-base
We're seeing some CI jobs fail due to the ramdisk running out of
storage. This should increase the memory allocation slightly to
overall hopefully enable CI jobs to pass cleanly without issues.

Change-Id: Iec639cfc029065e378eb69f09200bf92d2313ee0
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-06-16 12:16:50 -07:00
Jay Faulkner
a786974621 Make _by_arch ramdisk uses & validation consistent
The various *_by_arch configurations were being applied inconsistently
across boot drivers. This unifies the logic across the drivers and
ensures consistent setting of kernel/ramdisk.

An inconsistent setting of kernel/ramdisk is any case where we can't get
*both* the kernel and ramdisk to use from the same configuration type.
For instance, a node-level override in driver_info that specifies a
deploy_kernel but no deploy_ramdisk. These represent a misconfiguration
at a base level, since kernels and ramdisks must be tightly coupled.

This adds validation at startup such that if any X_ramdisk_by_arch and
X_kernel_by_arch configurations exist that are not mirrored -- e.g. a
kernel exists for aarch64 but no ramdisk, Ironic will print a warning
log on start.

We've also unified behavior when inconsistencies occur at runtime:
- If CONF.conductor.error_on_ramdisk_config_inconsistency is True, an
  inconsistency will cause an exception to be immediately raised,
  failing whatever operation was needing to boot a ramdisk to
  immediately fail.
- If CONF.conductor.error_on_ramdisk_config_inconsistency is False,
  Ironic will fall back to a less specific configuration -- for
  instance, if driver_info[deploy_ramdisk] is set but not
  driver_info[deploy_kernel], Ironic would fall back to the
  next-less-specific option, the deploy_*_by_arch config options. If
  those are inconsistent, we'd fail back to deploy_kernel/deploy_ramdisk
  -- the global default.

Previous behavior varied by driver, but in the worst cases would combine
a deploy_kernel from one level (e.g. driver_info) and deploy_ramdisk
from another (e.g. global default) or vice versa. This behavior is
considered a bug as kernels are matched up with ramdisks and generally
are not interchangable.

We expect at a future Ironic release to enable strict validation of
ramdisk/kernel consistency.

Closes-bug: 2097798
Change-Id: I429a651894be4b31a6faa5dfac0f58dd75ce8f79
2025-06-13 15:30:11 -07:00
Zuul
c5d274d31a Merge "Add missing space to log statement" 2025-06-13 17:50:22 +00:00
Zuul
d226f1a19e Merge "PTG: Move CI job descriptions into yaml" 2025-06-13 17:26:33 +00:00
Julia Kreger
c33f12329c Consider missing MTU invalid metadata
A bug was observed in nova behavior of interacting with ironic where
metadata could be missing in the payload to Ironic. While not great
it is also not awful. In any event, If there happens to be no DHCP
the lack of an MTU can be very problematic and result in a mismatch
between environment configuration and node state.

Closes-Bug: 2110322
Change-Id: Iea85ac4789d646dc85d0d8b22aa8e596b246234b
2025-06-12 09:57:14 -07:00
Zuul
b18d581e0f Merge "Added a FAQ on CI debugging, starts with network" 2025-06-12 16:42:34 +00:00
Zuul
5960371bd8 Merge "fix: 'built_in' KeyError on invalid priority." 2025-06-12 16:42:29 +00:00
Zuul
aa232eb5c2 Merge "Fix minor devstack issues" 2025-06-12 16:37:53 +00:00
Zuul
2120932cad Merge "follow-up: post-review feedback fixes for network data fixes" 2025-06-12 16:34:56 +00:00
Afonne-CID
d4725c90a1 Eventlet: Migrate API & JSON-RPC to cheroot
Serve Ironic REST API & JSON-RPC via Cheroot instead of eventlet

Claude code used to find and fix minor issues when running the service.

Generated-By: claude-code
Change-Id: I5440c5898abfe525807434447b69ec4a32e56f2d
2025-06-12 17:14:36 +01:00
Zuul
8325bd6c56 Merge "Automated cleaning by runbook" 2025-06-12 09:04:20 +00:00
Clif Houck
d4cf0e76a6
Report provisioned state where appropiate when raising InvalidState* Exceptions
In the conductor.

Change-Id: Id8a34f1d49e1b20af2a922f445cb1fe937ab0632
Signed-off-by: Clif Houck <me@clifhouck.com>
2025-06-11 14:40:03 -05:00
Jay Faulkner
f2302d34e8 Added a FAQ on CI debugging, starts with network
Change-Id: I2b7ed23d5662b8c4129762e174acb7d3cd5fb35b
2025-06-11 08:06:46 -07:00
Jay Faulkner
965b2a53ee PTG: Move CI job descriptions into yaml
By putting CI job descriptions into the place they are defined, it will
be much more difficult to forget to update the documentation.

Change-Id: I7836fa3d2f6adf6a97762a6cd13b92177a2cd12e
2025-06-11 07:52:11 -07:00
Jay Faulkner
b551ec5e15 [docs] Automated cleaning by runbook
This adds documentation for the new automated cleaning by runbook
feature.

LLM tooling created an extremely basic draft which I enhanced.

Generated-by: claude-code
Change-Id: I504f5e04c46190b09013875c5d99eb1f0298f2a0
2025-06-11 14:49:01 +00:00
Jay Faulkner
febb6e24a0 Automated cleaning by runbook
This enables an operator to override Ironic's autogenerated cleaning
step functionality, instead providing a runbook to be used for
automated cleaning.

Operators will be able to configure runbooks globally, by resource
class, and as a node override. Configuration exists to enable/disable
this functionality at the will of the deployer, and defaults to
maintaining existing behavior. Runbooks are also validated, by default,
against node traits and will fail cleaning on a mismatch; this
behavior is also configurable.

Unit tests generated and fixed by the various different AI agents I've
been trying out through the lifetime of this change, then heavily edited.

Generated-By: Cursor, Jetbrains Junie, claude-code
Closes-bug: #2100545
Change-Id: I7c312885793ee72b1ca8c415354b9e73a3dac9d7
2025-06-11 07:31:54 -07:00
Pierre Riteau
046169527d Add missing space to log statement
Change-Id: I242b75650de45473eff698784eef3dc94d866d04
2025-06-11 12:22:16 +02:00
Harald Jensås
2237f2b5d6 Include inspector conf groups in sample conf/docs
Add opts for inspector related groups auto_discovery,
inspection_rules and pxe_filter to ironic/conf/opts.py so
that these groups/options are included in sample config
and documentation.

Change-Id: I02da059af77b984e9075568d17aecc033e565b45
2025-06-11 10:54:34 +02:00
Julia Kreger
b37ae4388c follow-up: post-review feedback fixes for network data fixes
In If6125cf7af84dd1b4fa869f13932c43ac013d443 we identified a few different
minor issues, some syntax, and one concern over metadata and the data
length. In this patch, we address final pass reviewer comments *and*
shorten the interface ID values to more generic values which
fullfill the named label/id value in the configuration drive
schema, and are also values one could potentially use at some point
down the road with vlans.

Instead of "eth" as a prepended field name, we use "iface", since
we can't have any value which really suggests a direct interface
name mapping either.

Change-Id: I637412591ae57a8591a1a948f54be56785a8a1e3
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-06-10 11:22:38 -07:00
abhibongale
bf9647502a fix: 'built_in' KeyError on invalid priority.
A KeyError for 'built_in' could occur in `ironic.api.method`
when processing node inspection rules if an invalid priority
(e.g., -1) was provided in a POST request. This resulted in a
500 server error.

This issue was identified while writing tests for inspection rule
priority as part of the work for LP#2105478. The
server-side error was observed in logs during POST requests to
`/baremetal/v1/nodes`, notably triggered by the
`tempest-TestInspectionRules` test, as seen in the log entry:
"ERROR ironic.api.method [...] Server-side error: "'built_in'""

This patch ensures the 'built_in' key is correctly accessed or
handled within the inspection rule processing logic, particularly
when validating or processing rule priorities, to prevent this error.

Related-Bug: 2105478
Change-Id: I3ecf95d316687bc6b82d28cdd945eaba8115aedf
2025-06-10 17:37:01 +01:00
Stephen Finucane
e22381beda api: Add schema for allocations API (requests)
Change-Id: Ida8bd1d098246f6401605b1bd33ef47f82f4154b
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2025-06-09 16:39:14 +01:00
Stephen Finucane
53c58dfcc1 api: Add schema for allocations API (versioning)
The only thing to watch for is that GET calls fail with HTTP 404 (Not
Found) before this microversion, while POST, PATCH and DELETE calls fail
with HTTP 405 (Method Not Allowed). Also, PATCH was introduced in a
different, later microversion to the others.

Change-Id: Ie9a6f2d282bfc97a27e868cb66f56f840b9c6a0d
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2025-06-09 16:39:14 +01:00
Stephen Finucane
5b0134ea95 conf: Add '[api] response_validation' option
It doesn't make sense to return a HTTP 500 in production and after
everything has actually been processed just because schema validation
failed. Instead, we should only do this in test environments. Make it
so via a new config option which is now set by default in unit and
integration tests.

Change-Id: I3cac41e024d569dfe05f21767d90d585f54e3eac
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2025-06-09 16:39:14 +01:00
Zuul
62bf4d76d3 Merge "Patch configdrive metadata" 2025-06-07 00:45:05 +00:00
Julia Kreger
a2cbb3484c Advanced vmedia deployment test ops
Adds an advanced operations standalone test which utilizes a new proposed
tempest test to execute against the API which exerises the dhcp-less
virtual media path AND passes the node through the rebuild scenario case
which has been identified as problematic in the past.

With this, we know it works, so \o/.

Presently as non-voting.

Change-Id: Ibb6f9228672966c3708227e37bead6a45648e177
2025-06-06 10:53:22 -07:00
Zuul
01c1f05b6a Merge "doc: Make port binding failure configurably fatal" 2025-06-06 15:09:07 +00:00
Julia Kreger
ea8b3fcc3f Patch configdrive metadata
Functionally, the behavior is a little different from Nova's metadata
generation. Specifically nova exposes internal interface names in the
form of the name of taps to the instance, and in the context
of baremetal, that is much more noise than signal. Furthermore, Nova's
network_data generation is a bit simplifed in that it also just refers
to networks as network[0,1,n]. Ironic uses the actual Ids instead.

It also looks like Ironic is properly injecting MTUs... which is likely
an entirely separate bug which we can fix later. Filed as
https://bugs.launchpad.net/ironic/+bug/2110322

Where Nova would generate something like:

{"links": [
    {"id": "tap397cd29c-f2",
     "vif_id": "397cd29c-f267-4925-bd3f-58d39bfd685a",
     "type": "phy",
     "mtu": null,
     "ethernet_mac_address": "52:54:00:b1:25:62"},
    {"id": "tap88fd06bc-c0",
     "vif_id": "88fd06bc-c006-46f6-bc9a-ff04a7ee0779",
     "type": "phy",
     "mtu": null,
     "ethernet_mac_address": "52:54:00:a8:f0:64"}],
 "networks": [
    {"id": "network0",
     "type": "ipv6_slaac",
     "link": "tap397cd29c-f2",
     "ip_address": "fd34:4b51:21c8:0:5054:ff:fe53:5cb4",
     "netmask": "ffff:ffff:ffff:ffff::",
     "routes": [{"network": "::", "netmask": "::", "gateway": "fd34:4b51:21c8::1"}],
     "network_id": "fef900f0-fb86-4f6e-9d24-d379b6a57f9c", "services": []},
    {"id": "network1",
     "type": "ipv4_dhcp",
     "link": "tap88fd06bc-c0",
     "network_id": "a73bc031-3984-4f40-80d1-a4d9d62a4caa"}],
 "services": []}

Ironic neutron integrated VIF code generates:

{"links": [
    {"id": "privateport",
     "type": "phy",
     "ethernet_mac_address": "52:54:00:b1:25:62",
     "vif_id": "397cd29c-f267-4925-bd3f-58d39bfd685a",
     "mtu": 1380},
    {"id": "privateport2",
     "type": "phy",
     "ethernet_mac_address": "52:54:00:a8:f0:64",
     "vif_id": "88fd06bc-c006-46f6-bc9a-ff04a7ee0779",
     "mtu": 1430}],
 "networks": [
    {"id": "e070764c-7641-4b35-80db-6056a8937193",
     "network_id": "fef900f0-fb86-4f6e-9d24-d379b6a57f9c",
     "type": "ipv6",
     "link": "privateport",
     "ip_address": "fd34:4b51:21c8:0:5054:ff:feb1:2562",
     "netmask": "ffff:ffff:ffff:ffff::",
     "routes": [{"network": "::0", "netmask": "::0", "gateway": "fd34:4b51:21c8::1"}]},
     {"id": "1923957a-94f2-4169-a1bb-b133b342c2b6",
      "network_id": "a73bc031-3984-4f40-80d1-a4d9d62a4caa",
      "type": "ipv4",
      "link": "privateport2",
      "ip_address": "192.0.2.96",
      "netmask": "255.255.255.0",
      "routes": [{"network": "0.0.0.0", "netmask": "0.0.0.0", "gateway": "192.0.2.1"}]}],
 "services": []}

Related-Bug: 2110322
Closes-Bug: 2106073
Change-Id: If6125cf7af84dd1b4fa869f13932c43ac013d443
2025-06-06 06:22:11 -07:00
Zuul
b3aac7331a Merge "Add a new configuration option, `bootloader_by_arch`" 2025-06-05 22:01:06 +00:00
Zuul
fb544dc508 Merge "ci: remove the partition image upload" 2025-06-05 22:01:00 +00:00
Zuul
1c3dde2013 Merge "Make port binding failure (configurably) fatal" 2025-06-04 21:39:23 +00:00
Zuul
2723d88b97 Merge "api: Add schema for node firmware API" 2025-06-04 17:30:44 +00:00
Zuul
05729a8d85 Merge "ci: Expand the multinode job -- remove tinyipa usage" 2025-06-04 14:55:36 +00:00
Afonne-CID
6d11954816 Add a new configuration option, `bootloader_by_arch`
Adds a new configuration option ``bootloader_by_arch`` to support
architecture-specific ESP images for virtual media boot, similar to
how ``pxe_bootfile_name_by_arch`` works for PXE.

Closes-Bug: #2110132
Change-Id: I54fb4b2f379c2d06a7c49402d32403aa2ee67e70
Signed-off-by: Afonne-CID <afonnepaulc@gmail.com>
2025-06-04 15:36:47 +01:00
Julia Kreger
6d60431fae trivial: revise text from mutlinode job changes
Change-Id: I1dd74e19eae008af7b8c8084d5a91c4abe044edc
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-06-04 06:10:10 -07:00
Zuul
f266a1206f Merge "api: Ensure parameter transform happens early" 2025-06-03 22:36:57 +00:00
Zuul
ccb15a221f Merge "CI: remove legacy devstack baremetal admin and observer role usage" 2025-06-03 21:06:53 +00:00
haseeb
b476c1bc27 re-framing this as an explicit bugfix to backport
https://review.opendev.org/c/openstack/ironic/+/951114

Change-Id: I4d8205ff3ffa79331457a04e25c7b54a0358ef18
2025-06-03 23:24:50 +05:30
Julia Kreger
8f7d5d817e ci: remove the partition image upload
We've long ago pruned out the rest of the explicit partition image
testing, so explicitly remove build process to save CI time and
resources while also making the logs a bit more straight forward.

Change-Id: I93dcce21bffe473fa2d708d7dc6439db8a042e50
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-06-03 17:03:51 +00:00
Jay Faulkner
6abe65110c Fix minor devstack issues
- Make DHCP setup compatible with q-dhcp or neutron-dhcp
- Fix restacking when dnsmasq package has already been installed
  (without the explicit removal of dnsmasq; the dnsmasq-base removal
  errors due to dependencies)

Change-Id: I7eafc34ff71b84a0ae5199db95cb89bdd7abbf29
2025-06-03 08:53:08 -07:00
Julia Kreger
72c208f765 ci: Expand the multinode job -- remove tinyipa usage
This change moves multinode jobs to be leveraged across multiple
"compute" nodes with an increased amount of memory, which increases
the overall test resources available and limits controller node
hot spotting for deployment operations.

This effectively chagnes multinode jobs from being a single
compute node with a single controller node, to two compute
nodes and a single controller node. The controller node's
hosted virtual machines is also dialed back.

This was done to eliminate usage of tinyipa in favor of a more
realistic Centos based IPA ramdisk, and also removes fallback
logic to use tinyipa on more limited resource nodes.

Change-Id: Ib52f7039072901ce72ac96e660d35a10cca59737
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2025-06-02 12:16:53 -07:00
Zuul
83f7ac8128 Merge "Allow to unprovision instance from service wait states" 2025-06-02 17:29:23 +00:00
Zuul
d398dc6ee8 Merge "doc: A possible improvement around multi-arch config options" 2025-06-02 14:09:03 +00:00
Zuul
3b11732383 Merge "Update devstack-guide to use neutron- not q-" 2025-06-02 14:05:19 +00:00
Julia Kreger
d33c981dcf CI: remove legacy devstack baremetal admin and observer role usage
We long ago moved past use of baremetal_admin and baremetal_observer
roles in our interactions. At this point, they just make sense to
remove from devstack since otherwise the code path is outdated.

Change-Id: I14caae1fc81512bebbc150da8a965449fcae63cf
2025-05-30 14:12:37 -07:00
Jay Faulkner
b7efcda9ee Update devstack-guide to use neutron- not q-
Change-Id: I4a63e4bb34e2398052dd5a8d3ef38a919b3e097f
2025-05-30 11:38:52 -07:00
Zuul
26ee9b86c0 Merge "Control port updates with update_pxe_enabled flag" 2025-05-30 17:16:31 +00:00
Zuul
0ef74c7d2d Merge "Add port/portgroup list conductor groups filter" 2025-05-30 17:16:22 +00:00
haseeb
5a9efa070c Control port updates with update_pxe_enabled flag
The [inspector]update_pxe_enabled configuration option controls
whether the pxe_enabled field of a Port is updated during node
inspection. This patch adds logic to honor that setting.

Change-Id: I3e28e439b386c9f73e377b62513346bcadbd56b2
2025-05-30 10:14:31 +00:00
Zuul
4cc3fd316a Merge "Replace license classifier" 2025-05-29 14:42:21 +00:00
Takashi Kajinami
9406b44657 Replace license classifier
... according to the following warning from setuptools.

SetuptoolsDeprecationWarning: License classifiers are deprecated.

********************************************************************************
Please consider removing the following classifiers in favor of a SPDX license expression:

License :: OSI Approved :: Apache Software License

See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
********************************************************************************

Change-Id: Ie5d16633d3094a98a4b20215683a58976c96fe65
2025-05-29 13:08:47 +00:00
Harald Jensås
65f1396d19 Add port/portgroup list conductor groups filter
Allow filtering on conductor groups when listing ports
and portgroups.

Story: 2010373
Task: 46611
Change-Id: Id5b4f9eb29c2f598bc29fbf0b4b7c896ece3756d
2025-05-28 22:23:13 +01:00
Zuul
0b8931835a Merge "Remove warning filter for old oslo.db" 2025-05-28 17:33:56 +00:00
Zuul
0fdfd359f6 Merge "[CI] metal3 job back to voting" 2025-05-28 17:33:51 +00:00
Zuul
76b5d9f168 Merge "[CI] Fix libvirt network names in metal3 job logs collection" 2025-05-28 17:33:46 +00:00
Zuul
c688348ff3 Merge "Only try and do deep network config validate if admin" 2025-05-28 17:33:40 +00:00
Zuul
b31c73316e Merge "Replace eventlet.spawn_n in Inspector Interface" 2025-05-28 11:30:11 +00:00
Zuul
9f95543fc7 Merge "Replace eventlet usage in pxe_filter" 2025-05-28 11:30:06 +00:00
Jay Faulkner
95294caa61 [ci] Restore ovn-ipv6 job to voting
With https://review.opendev.org/c/openstack/networking-generic-switch/+/950559
landed, this job should pass in Ironic CI now.

Change-Id: Ifcbd3ea7a9ca1a133c1f10a1f7e356c617773e2b
2025-05-27 11:59:25 -07:00
Zuul
71621490b0 Merge "Drop duplicate logic" 2025-05-27 14:07:10 +00:00
Takashi Kajinami
1cc44809a4 Remove warning filter for old oslo.db
The warning caused by oslo.db was fixed in oslo.db 12.2.0 .

Change-Id: I36d0f084bab5d85190e239f170cceb6cc95235c8
2025-05-27 21:54:12 +09:00
Takashi Kajinami
8b3e8c87dd Drop duplicate logic
Trivial-Fix

Change-Id: Ice710e866842c0f6763e22cb283d4bb7cc735444
2025-05-27 21:34:12 +09:00
Riccardo Pittau
b744e2ed0c [CI] metal3 job back to voting
Change-Id: Idd9697ec1c09afc73df2d4f3c356e8c5bcb95b9f
2025-05-27 07:25:03 +00:00
Riccardo Pittau
241d296b5f [CI] Fix libvirt network names in metal3 job logs collection
Change-Id: Ic874873375860a79cb6d052a131da968bedc3f29
2025-05-27 09:22:41 +02:00
Afonne-CID
9211ab6296 Replace eventlet usage in pxe_filter
Drop the last eventlet usage in pxe filter script for the native
threading equivalent. Behavior "should" be identical.

Change-Id: I2b490a78288ad477131dbe60ea64d7ea905953ec
2025-05-26 17:38:05 +01:00
Afonne-CID
9a0de989a2 Replace eventlet.spawn_n in Inspector Interface
The inspector inspect interface seems to only need a
fire-and-forget background call to ironic-inspector.

Replace `eventlet.spawn_n` with native threading,
excising the last runtime dependency on `eventlet` in this file.

Change-Id: I07172e48207e09c0858298e34eea038c776d3c74
2025-05-26 17:04:21 +01:00
Zuul
25c8a1e2f9 Merge "remove explicit eventlet usage around time.sleep" 2025-05-22 22:08:49 +00:00
Zuul
3387a8febd Merge "CI: Remove the multinode grenade job" 2025-05-22 18:15:04 +00:00
Zuul
f1c8d03888 Merge "CI: Reconfigure jobs to minimize tinyipa usage" 2025-05-22 17:59:42 +00:00
Riccardo Pittau
c7ccec9d8b Revert "Fix redfish driver URL parsing"
This reverts commit 5f7c7dcd04.

Reason for revert: seems to be causing an authentication loop between sushy and sushy-tools 

Change-Id: Ic6142bcfa7ea2746d704625548edbef3bb57cad1
2025-05-22 10:59:51 +02:00
Jay Faulkner
56d43ff56d ci: Remove code which has been long-dead
Our CI broke this morning with an error around start_neutron_api
function not existing. That function was removed from devstack
in Nov 2022 in a52041cd3f067156e478e355f5712a60e12ce649.

Upon further research, is_service_enabled neutron-api appears to have
been returning false, even for neutron-enabled jobs, for a long time. A
recent fix to this behavior in devstack exposed this dead code and the
lurking breakage which we've now experienced.

I'm making the assumption that since our CI has been fine for 2.5 years
without this code block running, it'll be fine for now too. We likely
want to follow up on if missing these calls have a side effect.

This change also disables voting for the
ironic-tempest-ovn-uefi-ipxe-ipv6 CI job which is in a similar state
as the other CI jobs which use networking-generic-switch.
This is a side-effect due to a lack of the uwsgi launched neutron having
the configuration files to load plugins. That issue is being worked
separately and once networking-generic-switch is fixed, the job will
be returned to voting status.

Change-Id: If47e74751ba66a1296f16d9c43433033c04beffb
2025-05-21 21:02:25 +00:00
Zuul
4f22bade30 Merge "Fix redfish driver URL parsing" 2025-05-20 04:35:27 +00:00
Julia Kreger
94af5f1616 CI: Remove the multinode grenade job
Change-Id: I5c3ce37a9dbbe6446247d057474d2673c15de7e7
2025-05-19 14:09:03 -07:00
Julia Kreger
6c0b015a0d CI: Reconfigure jobs to minimize tinyipa usage
This change involves:
- Moves ironic-standalone jobs to use 32GB nodes which is a
  relatively simple change.
- Changes other jobs excluding multinode jobs to use DIB image
  builds by default.
- Changes one of job names to remove tinyipa from the name.
- Also notes a job which can be removed, but removal will be in
  a later change... and adds a release note in case anyone looks.

Change-Id: If9110c8f5041428df3e59f40fe0cb71bcf8580a8
2025-05-19 14:09:03 -07:00
Afonne-CID
d3ff85fb80 doc: Make port binding failure configurably fatal
Depends-On: https://review.opendev.org/c/openstack/ironic/+/699953
Change-Id: I07a7162e477fe4a11f8a56fd08babf04261cd166
2025-05-19 21:33:32 +01:00
Zuul
e468155baa Merge "ci: set a longer nova tempest build interval" 2025-05-19 20:11:08 +00:00
Zuul
aabf934824 Merge "CI: cleanup outdated rbac scope enforce jobs" 2025-05-19 20:11:03 +00:00
Zuul
a5bfbe703a Merge "[CI] metal3 non voting for investigation" 2025-05-19 19:04:12 +00:00
Zuul
bc6cd744f5 Merge "Inspection throws exception on CPU-less systems" 2025-05-19 17:38:00 +00:00
Riccardo Pittau
e1835827ee [CI] metal3 non voting for investigation
Change-Id: I3c582c84708993ad5a5c41a02c8b006c48bca01a
2025-05-19 17:39:59 +02:00
Zuul
9b5be30713 Merge "Fix agent get_XXX_steps retries from being treated as not fresh agents" 2025-05-19 01:29:22 +00:00
Jay Faulkner
7358559e11 Inspection throws exception on CPU-less systems
A system object in redfish with no processors in the wild has been
observed causing system.processors to return an empty list -- not the
None we were previously checking for. Now, instead, we check truthiness
which will fail on an emptylist as well.

Change-Id: I9aa4eba54a66643b20fa6b493e63eab60aecb3d8
2025-05-16 17:13:35 +00:00
Zuul
779226c9bf Merge "CI: Fix anaconda job post OSSA-2025-001" 2025-05-16 16:56:02 +00:00
Ivan Anfimov
00f0a03167 Remove installation guide for openSUSE/SLES
openSUSE stopped providing OpenStack packages some time ago.

Co-authored-by: Takashi Kajinami <kajinamit@oss.nttdata.com>
Change-Id: Ib9688b348568f2b2cecdf6e001cbe26f9876df29
2025-05-16 11:37:38 +00:00
Zuul
f05c75a766 Merge "trivial: add missing exception to agent code path docstrings" 2025-05-16 04:30:12 +00:00
Zuul
538fd7a875 Merge "Fix unhandled exception during node tear down" 2025-05-16 02:24:44 +00:00
Zuul
6ee36b994f Merge "Make metal3 job voting again" 2025-05-16 01:38:37 +00:00
Zuul
7650fca876 Merge "Allow configuring RPC client TLS separately from server" 2025-05-16 01:20:44 +00:00
Julia Kreger
a43d615e18 trivial: add missing exception to agent code path docstrings
While investigating https://bugs.launchpad.net/ironic/+bug/2110698
I noticed you could end up with an additional exception raised which
would be considered a hard failure. Overall, the code path looks okay
for it, its just not in the doc strings, so I figured easy enough to
fix it.

Change-Id: I528b6f327fac95cdb8b620843c073fc9cdec1833
2025-05-15 18:16:56 -07:00
Kaifeng Wang
85456f788d Fix unhandled exception during node tear down
Fixes an error that node does not move to failed state when
removing vif failed due to unexpected errors during tear down.

Closes-Bug: #2110917

Change-Id: I362aa42ff30696e9ec18239b316d03e65a1a65d1
2025-05-15 23:48:32 +08:00
Julia Kreger
034312e6ee CI: cleanup outdated rbac scope enforce jobs
Change-Id: Ibf04d2438dde847892357be0c208ac2ba9b1553c
2025-05-15 08:36:42 -07:00
Julia Kreger
c52b1a8745 Set an explicit neutron endpoint for grenade
Change-Id: I5661062a438a11340a796af53411a025095998f1
2025-05-15 08:30:47 -07:00
Sharpz7
5730b0405c api: Add schema for node firmware API
Change-Id: I3f951e1362dbb356184c77df0dac347e8e1eb697
Co-authored-by: Stephen Finucane <stephenfin@redhat.com>
2025-05-15 13:42:44 +01:00
Stephen Finucane
91c04035ee api: Ensure parameter transform happens early
The 'args.validate' decorator currently performs two functions:
transformation of serialised parameters into their unserialised formats
(i.e. a CSV string into a list of strings) and validation of the
parameters. While we are replacing use of the function for the latter,
we are retaining it for the former (at least for now).

The JSON Schema schemas rely on the transformed values, so we need to
ensure this transformation happens _before_ we run schema validation.
Ensure this is the case by looking for side-effects of the schema
validation decorators and erroring out if they're found (since that
implies they've already run). See [1] for more details.

[1] https://review.opendev.org/c/openstack/ironic/+/945943/2/ironic/api/controllers/v1/firmware.py#76

Change-Id: I642d582030eeacb0e060b3d375406e011abfb76a
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2025-05-15 13:42:08 +01:00
Julia Kreger
91b28bc43b Fix agent get_XXX_steps retries from being treated as not fresh agents
It is possible that an agent is booting in an environment with firewalls
doing evil things like not closing sockets, or where a FIN-ACK never makes
it to the conductor, or whatever.

This can result in the client hanging and eventually timing out.

Ironic's agent client code automatically retries. Which is cool.

The agent records it got a command from the first attempt, and then again
from the retry. Everything goes swimmingly until Ironic goes to assess
if the agent is a "freshly booted" agent, or not. At which point, the
check logic would see the multiple "get_xxx_steps" calls in the agent
logs, and declare the agent not to be freshly booted due to the retry
attempts.

So instead, we now explicitly evaluate the results of the command in
whole to account for retires. This commit also adds additional tests
as the helper was previously only really being exercised with empty
lists in unit tests.

Closes-Bug: 2110698
Change-Id: I460751b761462dbb630368e474e207fed90f289a
2025-05-14 10:11:35 -07:00
Julia Kreger
5731f4fafc remove explicit eventlet usage around time.sleep
One of the challeges with eventlet is it has helped make some of
our tests run nice and quick because time.sleep ends up getting replaced
deep under the hood when we monkey patch.

In order for us to get to a point where we can begin to consider removing
the patch, the tests need to begin to change. To that end, we have some
test reliance upon that patching and also calling helpers and then testing
the helper in the driver tests as well which increases the test time, and
really is sort of "excess" complexity.

So the goal here is to see if folks are good with such minor changes,
since we can do them now and should try to avoid making changes to these
tests when we begin to really remove eventlet.

As a note, this is the first of two, or possibly three patches to do this
overall cleanup.

Change-Id: I28a36ed1facdf4fd6ced2efceacb39d12de72e8f
2025-05-13 16:28:54 -07:00
Zuul
1bdea20488 Merge "provide host_id to neutron early on" 2025-05-13 22:11:39 +00:00
Zuul
92649ba27f Merge "Auto-detect the RPC executor instead of hardcoding eventlet" 2025-05-13 21:50:19 +00:00
Afonne-CID
d7b5c6eb47 doc: A possible improvement around multi-arch config options
bootloader does have *_by_arch* config options, maybe not just clear.

Change-Id: I8cb2638d2261b090fb93790da03c378a295a4b9d
2025-05-13 17:55:38 +00:00
Zuul
7e13edd363 Merge "De-duplicate two WSGIService's" 2025-05-13 14:04:18 +00:00
Afonne-CID
5f7c7dcd04 Fix redfish driver URL parsing
When ``redfish_address`` contains trailing slashes, the Redfish driver
would preserve them in the ``root_prefix``, causing sushy to error
attempting to instantiate the client using a potentially malformed URL
which results in a "Resource not found" error.

This may or not be a breaking change since we are now stripping trailing
slash(es) from custom paths, as well as explicitly setting a default
``root_prefix`` value if path is/becomes empty (inline comment suggested
that was the case but it was never implemented).

E.g: /test/redfish/v0/ -> /test/redfish/v0
     / -> /redfish/v1/
     /// -> /redfish/v1/

Closes-Bug: #2070791
Change-Id: I03f794350c6c0efd68131e6ede80c8a698983228
2025-05-13 12:12:23 +01:00
Dmitry Tantsur
80f97ae27c
Auto-detect the RPC executor instead of hardcoding eventlet
oslo.messaging figures out the right executor by checking if threading
is monkey-patched.

Change-Id: I2f18239e16110d1ae9f646c88285aa49af5aed91
2025-05-13 12:57:06 +02:00
Julia Kreger
5146e0a0f8 provide host_id to neutron early on
Cases exist where you can request a port to be created, in such
a way where neutron has to defer assignment of addressing.

In Neutron's world, it wants to map the host so it can be ensured
that *correct* physical network is available and mapped to for the
address range. Networking-baremetal helps backfill physical connection
context so Neutron can make the appropriate address assignment.

In order to ensure we do the right thing while also ensuring
appropriate security around the state of the port and the bind,
we need to go ahead and facilitate an *initial* context
to neutron so address assignment can occur, but explicitly limits
the provided information to a highly limited scope to prevent
actual binding to a physical port.

With the assignment of addresses, it becomes possible to begin to
generate, or eventually *fix* network configuration  metadata
being provided to a baremetal node.

In this *entire* process, we also identified you can create neutron
ports with binding information "out of the gate" to be immediately
bound. Thanks metalsmith! So the code pattern now checks the port,
and unbinds the VIF before rebinding it.

Related-Bug: #2106073
Change-Id: Ic53c626afe641ce63d71a7858e65df1fb250e3c0
2025-05-12 18:40:48 +00:00
Julia Kreger
42be33b52b CI: Fix anaconda job post OSSA-2025-001
Turns out some of the standalone jobs, anaconda in particular,
can reference some artifacts on disk in such a way which causes
the security logic to block the request. This is an easy fix.

Change-Id: I79204117cdbffab1f619981767471475870b4571
2025-05-12 10:51:01 -07:00
Riccardo Pittau
8363404eff Make metal3 job voting again
Change-Id: I947cf2ab533d0bde6384f54b4cd20e6f471ce299
2025-05-12 10:14:31 +02:00
Zuul
10590b36f5 Merge "OSSA-2025-001: Disallow unsafe image file:// paths" 2025-05-08 17:20:51 +00:00
Jay Faulkner
5fddef982c OSSA-2025-001: Disallow unsafe image file:// paths
Before this change, Ironic did not filter file:// paths when used as an
image source except to ensure they were a file (and not, e.g. a
character device). This is problematic from a security perspective
because you could end up with config files from well-known paths being
written to disk on a node.

Now, we forbid any path that provides access to system configuration,
including /dev, /sys, /proc, /boot, /run, and /etc. Additionally, we've
added an allowlist configuration item which limits the acceptable paths
under which images will be pulled to a list provided by the operator.

The allowlist default list is huge, but it includes all known usages of
file:// URLs across Bifrost, Ironic, Metal3, and OpenShift in both CI
and default configuration.

Generated-by: Jetbrains Junie
Closes-bug: 2107847
Change-Id: I2fa995439ee500f9dd82ec8ccfa1a25ee8e1179c
2025-05-08 07:25:32 -07:00
Zuul
a3e1cf6ebd Merge "Remove tags from README" 2025-05-07 22:48:45 +00:00
Zuul
945f6880fe Merge "Revert "Add an index on ports.node_id"" 2025-05-07 22:48:40 +00:00
Zuul
17fa2a9bbc Merge "Trivial: Fix gap in microversion sequence" 2025-05-07 19:13:31 +00:00
Jay Faulkner
58062d55d6 Revert "Add an index on ports.node_id"
This reverts commit a5750a4322.

Reason for revert: Further testing and investigation lead me+cid to believe this change is a noop; the previous index provided by CONSTRAINT is likely enough. We were unable to find a benchmark where this improved things.

Change-Id: I7c81b7d798d2ced39d4e6bbd493c3756d3326023
2025-05-07 18:36:09 +00:00
Zuul
782105ebe8 Merge "Add an index on ports.node_id" 2025-05-07 18:18:16 +00:00
Afonne-CID
cd23ae4777 Trivial: Fix gap in microversion sequence
Change-Id: Ib70d31c22fac112431231e61f647185798e47ab1
2025-05-06 00:22:22 +01:00
Ivan Anfimov
3be31c13d0 Remove tags from README
The tags framework has been discontinued for a long time.

https://governance.openstack.org/tc/reference/tags/

https://governance.openstack.org/tc/resolutions/20211224-tags-framework-removal.html

Change-Id: I503ce1120a21826e0b696006285023f8879ddd50
2025-05-05 22:35:29 +00:00
Queensly Acheampongmaa
8ce45e7155 doc: Update contributor docs to include multiple doc sources and preview options
This patch improves the contributor documentation by:

- Listing all documentation sources used in Ironic
- Adding cross-platform instructions to preview built documentation

These updates make the documentation-contributing guide more accurate
and accessible for contributors.

Partial-Bug: #2072364
Change-Id: Icd0bf1188cf0b276ee278a78c1c58dd70c55f232
2025-04-30 22:56:06 -07:00
Kaifeng Wang
42163f0c40 Allow detach vif in available state
Allow detaching vif in available state to avoid mac
confict during node rescheduling

Change-Id: I9b55054a97256cecb9d41029f03b1dfdf69c253c
Closes-Bug: 2109300
2025-05-01 09:35:18 +08:00
Zuul
1bc466e30a Merge "CI: Coverage for neutron with automated cleaning" 2025-04-30 23:56:09 +00:00
Zuul
47c26db0bc Merge "docs: update openstackdocstheme version to 3.5.0" 2025-04-30 20:53:30 +00:00
Jay Faulkner
538ac164ee Make metal3 job non-voting temporarily
This job runs Ironic under python 3.9, which is no longer supported by
OpenStack. It can be made voting again once it is revised to use a
supported python version.

Change-Id: I8e5e9de27faaed0315b3846d1eb04561cc4b192f
2025-04-30 10:43:49 -07:00
Kaifeng Wang
e37c58220c Allow to unprovision instance from service wait states
There is an unalignement between service/rescue operations in state transition,
currently we don't have such route from service* to deleting. When a node is
in service* states, request to destroy the instance will clean up part of
resources and leave ironic node at unexpected state, without proper clean up.

Unprovision from service failed is addressed by https://review.opendev.org/c/openstack/ironic/+/944966
This patch fix unprovisioning from the service wait state.

Change-Id: Ib2d2e7ad9deb1e7011f60bc9b55224ebd7c153e3
Closes-Bug: 2087523
2025-04-30 23:13:47 +08:00
Afonne-CID
a5750a4322 Add an index on ports.node_id
This should improve JOIN operations when retrieving ports
filtered by node conductor groups or other node attributes.

Change-Id: Ie1d4ef243e33c1edaa36111cad3979e0fdcf2cfd
2025-04-29 14:04:17 +01:00
Zuul
c525a16b06 Merge "Add shared image support" 2025-04-25 21:19:55 +00:00
Queensly Acheampongmaa
f78a8ff092 Restore architecture.rst with redirect notice to overview
The content from architecture.rst was moved to install/get_started.rst
and merged under a new heading "Overview of Ironic".

To avoid breaking links and search engine results pointing to the old location,
this patch restores architecture.rst with a redirect notice to
the new location.

Partial-Bug: #2072353

Change-Id: I950713434132acc5b225a39c0e4cdd724691f9e6
2025-04-25 18:20:18 +00:00
Mehdi Nassim KHODJA
cd5d0f8beb docs: update openstackdocstheme version to 3.5.0
openstackdocstheme version 3.5.0 includes search page fixes

Change-Id: Ibbf43ba99cea14726bba3e338f9d0b6d3861e54a
2025-04-25 17:03:17 +02:00
Zuul
3024e6470f Merge "Add several NV GPU types" 2025-04-23 18:34:30 +00:00
Zuul
2b97bcfdc8 Merge "Trivial: Fix spelling issue in configuration desc" 2025-04-23 17:36:18 +00:00
Jay Faulkner
f597e9e4e8 Trivial: Fix spelling issue in configuration desc
Change-Id: I0d9658bb8c91f4ac4199337779bfb3d2a88f1ca0
2025-04-22 14:40:25 -07:00
Dr. Jens Harbott
39fc3d9fe7 Update some docs
Fix formatting and spelling issues

Change-Id: I1aeeb8b092564bf0b62c3e4bc80e3431e575e313
2025-04-22 23:22:12 +02:00
Zuul
9ac46f15ad Merge "Release notes title to "unreleased" for in-progress" 2025-04-22 12:55:13 +00:00
Jay Faulkner
dc6cd79a9e Mark SNMP driver unsupported for removal
The SNMP driver uses pysnmp-lextudio, we'll be lucky if it works through
the deprecation period. If by the start of the 2026.2 cycle it's not
been migrated to a different library, it will need to be removed.

In order to keep CI running on an unsupported driver, I've added an
option to the devstack plugin to skip failing on upgrade check.

Related-Bug: 2106674
Generated-By: Jetbrains Junie
Change-Id: Ibe5576d04fc3ca1cc102f126853ed3d1e8c404d2
2025-04-20 16:23:53 +00:00
Satoshi S.
a39f11cece Add shared image support
- If image availability is shared and conductor_project_id is in the
  image shared member list, allows access

Closes-Bug: #2099276
Change-Id: I6b8a10fe82b41aa37b4f14bca9d3c0c498882bd1
2025-04-19 11:30:11 +00:00
Afonne-CID
915e50ceef CI: Coverage for neutron with automated cleaning
Change-Id: I2815f475101271546c0ff1691c6d36bccc7db87d
2025-04-18 12:40:33 +01:00
John Garbutt
876a9d4027 Make port binding failure (configurably) fatal
When using drivers like `networking-generic-switch`, there can be issues
with changing the VLAN the server is attached to.

Currently, the instance will still continue to attempt to boot, in some
cases the instance can go into ACTIVE (if the server happens to be on
the provisioning network already), but the server is not attached to the
correct VLAN, generally causing the network to fail to come up.

If we look at the ports, they are marked as binding failed. This is
something that Nova checks for after doing the port update to attach the
binding information. Lets add that check into Ironic, such that the
above build will fail with a good hint at where to look for problems
(namely Neutron).

Change-Id: I3811941a3dff0a9f968258d05cc020e1f52e3e40
2025-04-18 12:23:10 +01:00
cid
5fccd55c9f Allow special characters in patch field keys
Allow special characters in patch field keys, as long as they
are correctly encoded per JSON pointer and patch specs RFC 6901
and RFC 6902.

Closes-Bug: #1604148
Change-Id: I7eeb52b51a0e8ba96103e0863819653021c79271
2025-04-17 20:23:57 +01:00
Zuul
41124271a1 Merge "metal3: Use zuul user for logs, fix remote node ip, reduce timeout" 2025-04-17 15:09:53 +00:00
Zuul
9f71d03a38 Merge "Fix mismatch in expected loop functionality" 2025-04-16 12:59:05 +00:00
Zuul
010a199fdc Merge "Fix ISO+GPT image handling" 2025-04-16 10:48:18 +00:00
Kaifeng Wang
a463ee8641 Add several NV GPU types
Add A10/A40/L40S/L20 to known accelerators.

Change-Id: I389c7b2dde8481762f55862804867dde35b15b9d
2025-04-16 11:18:11 +08:00
Jay Faulkner
52e090b60b Release notes title to "unreleased" for in-progress
Release notes currently have a title with a relatively meaningless
version number. Replace this with a title indicating it's in development
and unreleased.

Change-Id: I08c8fe3b20bb9c73fa8e06afd99052257f3cb334
2025-04-15 17:36:44 +00:00
Zuul
621338e967 Merge "Improve is_image_available" 2025-04-15 17:22:53 +00:00
satoshi-sh
854f059b82 Improve is_image_available
- Add 'community' visiblity alongside 'public'
- Make the auth token check configurable with a new option
  'allow_image_access_via_auth_token' (default: OFF in
  master, ON is stable)
- Add testing for is_image_available

Partial-Bug: #2099276
Change-Id: I10df3e8fd0091e70f3fb1bc19524aada296c13c1
2025-04-11 18:19:53 +00:00
Zuul
c79f2d00c2 Merge "Update DRAC RAID module import logic" 2025-04-11 16:41:35 +00:00
Pavlo Shchelokovskyy
9cfb693beb Fix ISO+GPT image handling
followup to Iff2be28c64a0469a3796003f3b8ed28d70631761

such images currently fail to be provisioned by ironic 29/Epoxy
(in a ramdisk deploy scenario) even with all image inspection disabled.

This patch adapts the code from nova's patch
https://review.opendev.org/c/openstack/nova/+/931833

Related-Bug: #2091611
Change-Id: I5a1333b0dae941269a397ef4e6bc5b40ccfceefc
2025-04-10 13:07:36 +00:00
Zuul
ac9acc4f2a Merge "ci: restrict multinode job to multinode tests" 2025-04-08 22:51:51 +00:00
Zuul
d216099cce Merge "Fix default IRONIC_DEFAULT_TRAITS setting" 2025-04-08 22:36:07 +00:00
Zuul
544856b2c9 Merge "Don't log PXE when your not doing PXE." 2025-04-08 20:49:23 +00:00
Zuul
956768ae62 Merge "refactor: split glance handling into it's own method" 2025-04-08 20:49:20 +00:00
Zuul
c9090751b0 Merge "devstack: network simulator support for sonic" 2025-04-08 20:49:15 +00:00
Zuul
b80f6ece44 Merge "Add image build method for verified OS." 2025-04-08 19:41:43 +00:00
Julia Kreger
80ffd07dfd ci: restrict multinode job to multinode tests
We'll likely want to revert this one, but overall the multinode job
has been failing quite a bit because it is trying to run *all* of
the secenario jobs. While, that is not a big deal under normal
conditions, at end of development cycle, CI loads are much higher
and the failure rate can also be much higher as a result.

So for now, dial back the test to the most beneficial/needful
test which could be executed on the node.

Change-Id: Id4d050e1abd67f431026a2d813f97ffacf24407e
2025-04-08 19:15:32 +00:00
Julia Kreger
b88b6dd5ec trivial: follow-up on ftp enable/disable flag
Following up to: https://review.opendev.org/c/openstack/ironic/+/941742

Change-Id: I03fec9f6b96d2902a0cf03a8eff9d6c7d4cb346f
2025-04-08 18:46:54 +00:00
Zuul
9e17dec277 Merge "Update documentation to retain relevant terms" 2025-04-08 18:06:04 +00:00
Zuul
d09b3b1d0d Merge "Remove compatibility for oslo.versionedobjects < 0.10.0" 2025-04-08 07:58:38 +00:00
Queensly Acheampongmaa
cbde488bc4 Update documentation to retain relevant terms
- Kept the "abort" term in the relevant documentation as
it's the actual verb in the API per reviewer feedback.
- Updated sentence "CentOS 7 development images are no longer updated" by removing "development".

Partial-Bug: #2072365

Change-Id: Ibc09693f26a0c4e26bbd3ba2fc7918383c4d81ec
2025-04-08 07:44:36 +00:00
Zuul
2feff120c5 Merge "Ironic Container Config for IPA Integration" 2025-04-07 22:39:57 +00:00
Zuul
11f7353a92 Merge "Create Support Resources Page" 2025-04-07 21:58:29 +00:00
Zuul
50ff593e6b Merge "redfish: permit ipmitool-socat console for redfish usage" 2025-04-06 15:26:59 +00:00
Takashi Kajinami
b7cc916ddc Remove compatibility for oslo.versionedobjects < 0.10.0
oslo.versionedobjects 0.10.0 was released in 2015.

Change-Id: I7dcc4783e9403869f9022b8a3d0df610a0c3a66f
2025-04-05 14:42:55 +00:00
Zuul
c0cf87d4a0 Merge "[devstack] Allow deploy environment with portgroups" 2025-04-04 17:11:57 +00:00
cid
5b372dd9ed A new 'description' field to the port object
Adds a description field that allows users to add description to ports.

Closes-Bug: #2099906
Change-Id: I1290c04698d50c7f01d74ef73296bf24f1b85152
2025-04-04 09:20:06 +00:00
Zuul
b6f8fa969c Merge "devstack bindep - [platform:rpm]" 2025-04-04 09:18:24 +00:00
Junya Noguchi
4a02db9846 Add image build method for verified OS.
We tested and successfully built Rocky Linux and Alma Linux Ironic images using Diskimage-builder. Add the method.

Change-Id: I22758dd59c54038e7ed72e513c61fcddba0ef473
2025-04-04 11:01:14 +09:00
Zuul
e05dc7d41f Merge "Rename ironic cmd module" 2025-04-02 17:43:03 +00:00
Zuul
40e2e40863 Merge "api: Correct types for validation decorators" 2025-04-02 16:44:34 +00:00
Jay Faulkner
3e0f6ed240 Rename ironic cmd module
This module being 'cmd' means that when using unittest native test
discovery, it tries to load our cmd module instead of the built-in. This
obviously does not impact test running in CI or via tox, but by renaming
this we'll make our ironic tests compatible with vscode (and I presume
any other unittest-discover based IDE testing setups).

Change fully generated by cursor IDE with review and minimal editing by
me.

Generated-By: Cursor
Change-Id: I6c9b92e6b0bee366ff40795c722bd70d16cf0e4f
2025-04-01 16:21:51 -07:00
Vasyl Saienko
55364fcb0f [devstack] Allow deploy environment with portgroups
Allow to deploy virtual environment with port groups by using
following environment variables:

  IRONIC_USE_PORT_GROUP: boolean to enable port group usage
  IRONIC_PORT_GROUP_MODE: the mode for port group, by default is
    balance-rr.

Related-Bug: #1718481
Change-Id: I9cc8e54cf94ecc65ac93d01671f8778be2f6dc78
2025-04-01 11:00:40 +03:00
Zuul
1bbf560fc5 Merge "Fix passing vtep fields to neutron" 2025-04-01 01:09:04 +00:00
Julia Kreger
d2bd781a21 redfish: permit ipmitool-socat console for redfish usage
We've had a couple asks about enabling ipmitool-socat console usage
with the redfish hardware type.

This doesn't pickup parameters from driver_info to figure out the IPMI
username, password, and hostname/address, which turns out to be a rather
invasive change to ipmi handling code and test code as well.

Change-Id: I69dfeeec59317871c9f6a206966dd6a9d2ca9e3e
2025-03-31 15:44:34 -07:00
Zuul
79abe6a00f Merge "Do not silence the actual error in prepare_instance_boot" 2025-03-31 18:53:19 +00:00
Zuul
cb4af5a165 Merge "network simulator support for Cisco Nexus 9k" 2025-03-31 16:20:22 +00:00
Zuul
450eff1a8c Merge "docs: detail network switch simulator support" 2025-03-31 16:20:16 +00:00
Zuul
8ea1dee827 Merge "Add network simulator support for force10 OS 10" 2025-03-31 16:20:10 +00:00
Zuul
c1e9785339 Merge "network testing: hooking in an external network simulator" 2025-03-31 16:20:05 +00:00
Zuul
81932975e4 Merge "Fix confusing logs on tenant network configuration" 2025-03-31 15:55:29 +00:00
Julia Kreger
47e87d649e devstack: network simulator support for sonic
Adds basic suppot to spin up a SONiC VM instance as a switch to have
wired to the switch VM to enable command behavior verification.

Also fixes some related issues due to an earlier rebase need on
the switch test VMs where the interface name was changed and
ultimately a different field need to be extracted for the
later commands to execute properly in order to provide data
to later callers for actions such as creating ports in ironic.

Change-Id: Ie4a2ac4da08359d20b5aa35faf741c5307bef6e0
2025-03-31 06:27:18 -07:00
Vasyl Saienko
d2fb4cbc49 Fix passing vtep fields to neutron
Neutron uses folling fields [0]
 * vtep-logical-switch
 * vtep-physical-switch

Fix key name that we pass, replace '_' with '-'

[0] 196b2c9874/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py (L376)

Closes-Bug: #2105492
Change-Id: I7735bce5ce9a91979ec1b561c4047952123735ce
2025-03-31 16:22:23 +03:00
Stephen Finucane
34bc26b55d api: Correct types for validation decorators
These got missed in a rework of the initial patch, likely because they
weren't being used yet.

Also correct a small issues that looked like invalid Python but clearly
isn't.

Change-Id: Ie6cf882d2eca55f2ce01c893d18cb1ca1bbe4a01
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2025-03-30 23:00:12 +00:00
Dmitry Tantsur
b43d74a8f4
Do not silence the actual error in prepare_instance_boot
This call can fail for a lot of very different reasons (e.g. right now
I'm looking at secure boot operations getting HTTP 403 from iLO 6, but
it could just as well be something coming from IPA).

Change-Id: I4a884e3ccc0e1bf12aa9287cf521e1295f8a2476
2025-03-28 15:49:22 +01:00
satoshi-sh
ee7e1ac432 Ironic Container Config for IPA Integration
Set up Ironic lookup endpoint (api/controller/v1/ramdisk.py) to send container configuration to IPA.

Partial-Bug: #2100556
Change-Id: I5fd593e58b0d33541a63ebb817ed8f3c0a62071c
2025-03-27 21:59:03 +00:00
Zuul
f25b095825 Merge "Imported Translations from Zanata" 2025-03-27 20:25:27 +00:00
Zuul
f4d892250b Merge "[Trivial] Fix typo of exception error message" 2025-03-27 20:25:24 +00:00
Zuul
9a9a6c1ff3 Merge "docs: Clarify physical_network should be a name" 2025-03-27 19:45:15 +00:00
Zuul
0f63b6c23c Merge "doc: Migrate Inspection Rules" 2025-03-27 19:45:11 +00:00
cid
399a6c12d1 doc: Migrate Inspection Rules
Document inspection rules.

Related-Change: https://review.opendev.org/c/openstack/ironic/+/939217
Change-Id: If6d77a2caf873a716ae8d96eea7ee9b3fd3fbe40
2025-03-27 13:14:15 +01:00
cid
282dd1ebaf Trivial: Fix Doc8 D000 errors by adjusting title
Fix Doc8 D000 errors by adjusting title underline lengths.

Change-Id: If279f37cc7869e9071e3aa8ec67f0b559652a43a
2025-03-27 12:57:46 +01:00
cid
99ebf632cd Fix mismatch in expected loop functionality
Fix mismatch in expected loop functionality in inspection rules.

Related-Change: https://review.opendev.org/c/openstack/ironic/+/939217
Change-Id: Ibd6c697387d4b083673a5a522e162d5b12c6e1ad
2025-03-27 10:02:22 +01:00
cid
b939c24faa docs: Clarify physical_network should be a name
Clarify physical_network should be a name matching Neutron configuration

Change-Id: I4ed4e9bd02b8ea103dc3602ece590f50f4e829f6
2025-03-26 12:30:48 +01:00
Dmitry Tantsur
3a705a59db
Allow configuring RPC client TLS separately from server
When TLS is handled by a reverse proxy, use_ssl may be set to False
while clients are still supposed to use TLS. Add a new option for that.

Change-Id: Ie1be180ce36bbeb81427ea1ed4a2654c880aff2c
2025-03-25 17:22:40 +01:00
Dmitry Tantsur
86334496b0
De-duplicate two WSGIService's
The one in json_rpc was actually designed as a new base class for all
WSGI services in Ironic. Make it such.

Change-Id: I3f63088b21e09f88476e23b7c9ff3099daab781f
2025-03-25 17:05:07 +01:00
Kaifeng Wang
95b9994134 Fix confusing logs on tenant network configuration
port like obj can be passed to smartnic checker while it's not aware
of portgroups, giving a confusing log of unknown port data.

Change-Id: Ia9d1ef48ebcf0cc1f1a987fd02f2dd7e74b96271
2025-03-25 22:14:46 +08:00
OpenStack Proposal Bot
e7f677fdd1 Imported Translations from Zanata
For more information about this automatic import see:
https://docs.openstack.org/i18n/latest/reviewing-translation-import.html

Change-Id: I8ee78129129c2d0f507b0cf0e978353cb52eaa36
2025-03-25 03:29:24 +00:00
Kaifeng Wang
5f911ad688 Follow up to unprovision service failed
Update states graph to reflect the transition.

Change-Id: Ib0e4c08c348486542a6f05ba2c45af9be2d995be
2025-03-24 22:22:10 +08:00
Julia Kreger
e2fa72652d network simulator support for Cisco Nexus 9k
Adds additional basic simulator support to stand up a virtual
Cisco Nexus 9000 switch for testing in devstack to faciltate
development and testing.

Change-Id: Id66e6bcc646a6d35a2caa5ecbc6b8cd881adb7aa
2025-03-24 06:49:52 -07:00
Julia Kreger
803a969133 docs: detail network switch simulator support
Adds documentation around support for switch simulators
to the contributor documentation to appropriately scope aspects
as to why the support has been added for the devstack plugin.

Change-Id: Ic141804e6adc8d08957875e1b169dca52c99e448
2025-03-21 23:20:45 +00:00
Julia Kreger
7ef39b8cc4 Add network simulator support for force10 OS 10
Adds necessary logic to support spinning up a local network simulator
for Dell Force10 OS10 switches which is a Linux based operating system
image as opposed to the former force10 OS 9 switches.

This change takes a *very* similar approach to OS9 support, but there
are several differences between OS9 and OS10, mainly in configuration
formatting, commands, access control, and even the overall virtual
machine installation process which leverages ONIE and multiple
"disk" artifacts.

Change-Id: Iab3c69031eeff1f612e254d099539c8fc146b553
2025-03-21 23:20:38 +00:00
Julia Kreger
fe35cb2385 network testing: hooking in an external network simulator
In order to test NGS compatability and generally move the state forward
we need to be able to wire in switch simulators.

This is *not* intended to be run in CI, due to known performance issues.

This first pass hooks up Dell Force10 switches with OS version 9.13, and
does so we can configure the switch as part of the setup.

This makes the prior behavior of configure-vm.py and the VM templates
to be able to execute as it did before
I0ef1ad1b2e50cb26839c618a1367704d51ed8a4d to enable the simulator attachments
because we can't exercise network switch simulators with dynamic
post-vm start network attachments, becuase the attachment to the switch sim
must be done in advance of switch VM launch.

Change-Id: I4addd71adea0b3f6e56b967db848546b5c56561e
2025-03-21 16:09:25 -07:00
satoshi-sh
92f30dc5a4 Create Support Resources Page
Create an Ironic support resources page with a table of the community's platforms

Closes-Bug: #2072357
Change-Id: I0904f09fe72cf7b08da21b0b251fe9c6e2d148f5
2025-03-21 15:47:24 -05:00
Zuul
f18df39853 Merge "Enable atop on jobs" 2025-03-20 17:24:34 +00:00
Riccardo Pittau
fbb5d5a41f metal3: Use zuul user for logs, fix remote node ip, reduce timeout
The job usually takes 30-40 minutes to run if successfull, it
does not make sense to have a 3 hours timeout value.
Also there is no metal3 user so just using zuul for remote logs
collection, also fixing the ip of the remote node.

Change-Id: Ie738195f38a547cf03d94e7cc5d78f7c2b8d4539
2025-03-20 15:07:23 +01:00
OpenStack Release Bot
3e453a376b Update master for stable/2025.1
Add file to the reno documentation build to show release notes for
stable/2025.1.

Use pbr instruction to increment the minor version number
automatically so that master versions are higher than the versions on
stable/2025.1.

Sem-Ver: feature
Change-Id: Ia5b45f166e7754a282f939969fda4f11735c9c69
2025-03-20 09:58:07 +00:00
Zuul
09ce4dede1 Merge "Allow a node in service fail state to be unprovisioned" 2025-03-19 21:03:23 +00:00
Kaifeng Wang
6e099bdfed Allow a node in service fail state to be unprovisioned
A node in service fail can be unprovisioned to be reprovisioned later.

Change-Id: Icdb1d5c06f1b827ae79740385c6b5f0a5598ff1f
2025-03-19 22:49:51 +08:00
Riccardo Pittau
4a6dece8eb Update release mappings for epoxy
Change-Id: If19e1a42f6bc699a6e3c2ca3976c1b6f04ef3bef
2025-03-19 10:25:58 +01:00
Zuul
41707d8ab9 Merge "Remove IPA build on cleanup" 2025-03-18 20:04:10 +00:00
Zuul
fe8f4f1fb2 Merge "Install and run sushy-tools within a virtualenv" 2025-03-18 16:19:19 +00:00
cid
f23930bc94 API/Testing: Inspection rules migration
Migrates Inspector rules over to Ironic

This change defers the addition of the configuration options;
``supported_interfaces``, ``[auto_discovery]`` ``inspection_scope`` and
the ``default_scope`` as otherwise specified.

And, while the ``scope`` field may remain in the database for easier
migration, it's also outside of the 'scope' of this change as well,
and there's a chance we use the existing `traits` field in nodes as an
alternative for node-to-rule association instead.

A future follow-up should address these excluded implementations.

Change-Id: I6baf00273e63bb96e133f0cf5da6d8953f97af5a
2025-03-18 11:07:45 +01:00
Zuul
18343b9be6 Merge "Clean-up: Inspection Rules Testing" 2025-03-17 18:43:46 +00:00
Zuul
42fca7f123 Merge "doc: Update the runbook API usage" 2025-03-17 18:02:47 +00:00
cid
910ee2e38c Clean-up: Inspection Rules Testing
Change-Id: I72fd942b72b3e89c9688b6b19614b0bd7a67d0e7
2025-03-17 08:45:50 +01:00
Zuul
d788d94896 Merge "[devstack ]Use tap interfaces for VMs" 2025-03-15 13:12:09 +00:00
Zuul
e2fd3af494 Merge "Add ignore_project_check_for_admin_tasks config option" 2025-03-13 21:50:41 +00:00
Zuul
88a56cbe81 Merge "Update hardware burn-in docs" 2025-03-13 21:50:39 +00:00
Zuul
370dc3e10f Merge "Fix fake classmethods" 2025-03-13 21:50:35 +00:00
Zuul
90f6132746 Merge "Add servicing to stuck states on recovery" 2025-03-13 15:48:45 +00:00
cid
da99e11548 doc: Update the runbook API usage
Improve documentation on how to create, associate and use runbooks
with nodes via traits for cleaning and servicing operations.

Change-Id: If99866ef8bfc200b430f17cff784cf96e916536d
2025-03-13 16:30:57 +01:00
cid
0962a07e0c Remove IPA build on cleanup
Delete the deploy kernel, ramdisk, and ISO files during cleanup
to trigger rebuild on the subsequent stack.sh run.

Closes-Bug: #2076358
Change-Id: I6600b67c9b3455d8191126b24a1941ae7c384e36
2025-03-13 14:09:23 +01:00
Zuul
3f387f3f3d Merge "[CI] Use bigger partition as work dir for metal3 job" 2025-03-12 10:56:59 +00:00
Zuul
4af1ec13fc Merge "fix glance metadata layout" 2025-03-12 03:36:09 +00:00
Kaifeng Wang
e91685f33e Add servicing to stuck states on recovery
servicing is an intermediate state that should be cleaned up
on conductor startup.

Change-Id: I9b08579d0b2620e8bf63db1f189b01cf1fdc537b
2025-03-11 21:49:31 +00:00
Zuul
e30a30ab32 Merge "[CI] Fix libvirt logs collection in metal3 job" 2025-03-11 20:40:18 +00:00
Zuul
1cef45de7f Merge "Follow-up: Apply Inspection Rules" 2025-03-11 19:21:13 +00:00
Zuul
23692d475c Merge "vncproxy: Use dedicated options for SSL" 2025-03-11 16:47:09 +00:00
Satoshi-Sh
1dbb501cd1 Add ignore_project_check_for_admin_tasks config option
Add a new config variable to ignore project_id checks in administrative tasks

Partial-Bug: #2099276
Change-Id: I3c6ba8f995a2781229c07c047f66e6737109cdc9
2025-03-11 16:01:21 +00:00
Zuul
cb38526302 Merge "[CI] metal3 integration: reduce total time between node check" 2025-03-11 15:20:08 +00:00
Riccardo Pittau
b25a3cad60 [CI] Use bigger partition as work dir for metal3 job
In Rackspace env a bigger partition is available and configured
as /dev/xvde1 but not mounted.
We should use that as working dir for the metal3 job as the
standard one is too small and the job fails regularly when
running there.

This allows to make the metal3 job voting again.

Change-Id: I4d50b9c07367a5b1ad25887d87cf2e29ac6b4257
2025-03-11 13:34:34 +00:00
Riccardo Pittau
3925c90a66 [CI] Fix libvirt logs collection in metal3 job
When the metal3 job fails the libvirt logs can't be collected
causing the entire log collection process to fail, de facto
making any troubleshooting process very difficult if not
impossible.
We need to ignore the error form the libvirt logs collection
task to allow the logs collection to finish correctly.

Change-Id: Ibbbb86457cbcf6c28392baad52478dc232d160bd
2025-03-11 13:34:24 +00:00
cid
de5988af29 Follow-up: Apply Inspection Rules
Migrating Inspector to Ironic

Change-Id: I6ff32eb2739d68d1e922b0b64e7c104f7b3a27a6
2025-03-10 20:03:09 +01:00
Zuul
76cc8c6978 Merge "Filter physnets when ports are pre-allocated to a segment" 2025-03-10 18:44:57 +00:00
Zuul
da5434537a Merge "Remove multinancy page" 2025-03-10 17:37:44 +00:00
Riccardo Pittau
fef0cfec78 [CI] metal3 integration: reduce total time between node check
The default total value is 2400 seconds, so 40 minutes, which
is proved to be too long especially in case of failures.
We reduce it to 1800 seconds, 30 minutes, for the time being.

Change-Id: I533e6411fb55fa6e4a609c50bb385279dddcc3d3
2025-03-10 13:23:42 +00:00
Zuul
9dbfad8131 Merge "centos devstack support: fix VM permissions" 2025-03-10 12:31:02 +00:00
Takashi Kajinami
57d7b10cb0 vncproxy: Use dedicated options for SSL
The [ssl] options from oslo.services are deprecated, because these have
been used to enable ssl in eventlet-based wsgi server, which is now
deprecated.

Introduce the dedicated options to [vnc] section to replace these
deprecated options.

Because the vnc console feature is not yet released, no release note
is added by this change.

Change-Id: If9d0e1413b46d7157bcd085280b80bf1e0e6355b
2025-03-08 05:20:59 +09:00
Doug Goldstein
05734cfc95
fix glance metadata layout
The code here builds a dictionary from a glance v2 image object that
roughly resembles the glance v2 image object. The current behavior
nests the 'properties' set on the image under it's own 'properties' key
resulting in the image properties never being seen by the Ironic code.
The breakage results from the change from glanceclient to the SDK which
changed the shape of the returned object. The glanceclient object shape
was that of FakeImage while the SDK returns a Resource based object
which includes attributes for all possible fields which are defined at
the top-level of the object. Since the tests run against a different
value they did not cature the failure. Just changing to the SDK object
results in us copying all these new values to the properties dict which
is definitely not the intention. For maximum compatibility to backport
this filters any value not set from being set into properties and sets
the rest. The broken path is any user of get_image_properties()
(both copies from common/images and deploy_utils) checking for user
supplied properties.

Closes-Bug: 2099953
Change-Id: I1842e2651fd2bd8455646db9a3a80c3b9ece5c97
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-03-06 20:45:58 -06:00
cid
6af973aee6 Install and run sushy-tools within a virtualenv
This ensures gunicorn can find all required packages at runtime.

Closes-Bug: #2098542
Change-Id: I10279575fc1c060dd439d31ae1c07c1267b04342
2025-03-06 10:40:04 +01:00
Steve Baker
25a3dd076a Documentation for graphical consoles
This change cleans up and elaborates on existing graphical console
documentation, and also adds an overview document describing how it all
works together.

Closes-Bug: 2086715
Change-Id: I16b7ffb993e1ca5148b5205f0a35a74db85337d5
2025-03-05 20:09:59 +00:00
Zuul
644fe20576 Merge "Enable trunk plugin for tinyipa-multinode" 2025-03-05 15:14:15 +00:00
Zuul
f6ad9684af Merge "Make floppy images more floppy" 2025-03-05 14:14:16 +00:00
Zuul
bd7132648a Merge "CI: Extend default timeouts slightly" 2025-03-05 08:33:14 +00:00
Zuul
b3d4e157fd Merge "Implement graphical console read-only support" 2025-03-05 07:16:45 +00:00
Zuul
0bf0c9e8db Merge "Add vnc-container image build" 2025-03-05 07:09:00 +00:00
Zuul
d618f946bd Merge "Trivial: Enable disabling tftp setup" 2025-03-05 06:54:41 +00:00
Zuul
b973aeeb79 Merge "Implement drivers redfish-graphical, fake-graphical" 2025-03-05 04:22:12 +00:00
Zuul
eddcfc93ee Merge "Add systemd provider for console containers" 2025-03-05 04:22:08 +00:00
Zuul
874b0c180b Merge "Restore recompile of dnsmasq" 2025-03-05 03:40:08 +00:00
Zuul
369619b4f6 Merge "CI: Make metal3 non-voting" 2025-03-05 00:06:00 +00:00
Zuul
558ca014c1 Merge "CI: Change standalone jobs over to OVN" 2025-03-04 23:51:54 +00:00
Jay Faulkner
53d93d6d72 Restore recompile of dnsmasq
We still need a custom dnsmasq, but due to recent ubuntu upgrades and
devstack changes we always fail the version check and skip the install
of newer dnsmasq. Instead, now we use a sentinel file.

Change-Id: Iefde1721d4ab24521dc2b8f1fe46bf8bd4519f6f
2025-03-04 14:26:44 -08:00
Julia Kreger
45700551d5 CI: Make metal3 non-voting
Metal3 job is intermittently failing running out of disk space.

Until this can be resolved, we need to go ahead and disable this job
from voting.

Change-Id: I60bf98d8a529406ca3c97b3d5953d4b2d01e93d0
2025-03-04 12:30:31 -08:00
Zuul
7cf46f7063 Merge "allow multiple inspection interfaces to load hooks" 2025-03-04 18:20:36 +00:00
Julia Kreger
3ac02101cf CI: Change standalone jobs over to OVN
It seems dnsmasq is back to crashing.

neutron-dhcp-agent[62018]: ERROR neutron.agent.linux.external_process [-]
dnsmasq for dhcp with uuid 1fc184a0-e8c6-47a6-86fe-0291bc22017f not found.
The process should not have died

Instead of routing around by messing with the dnsmasq version now,
just give OVN a spin.

Change-Id: I222ffffacfc0968e23b4ae7f4c33ec5808136694
2025-03-04 06:48:35 -08:00
Zuul
8e4d6f3912 Merge "Drop direct dependency on iso8601" 2025-03-04 12:19:14 +00:00
Zuul
57aef5fe75 Merge "Replace deprecated abc.abstractclassmethod" 2025-03-04 12:19:11 +00:00
Zuul
f4ec09b631 Merge "doc: updates to anaconda deploy interface" 2025-03-04 04:48:39 +00:00
Zuul
81bd8b8055 Merge "Replace deprecated FormatChecker.cls_checks" 2025-03-03 19:57:48 +00:00
Doug Goldstein
b49d509d93
doc: updates to anaconda deploy interface
Updated the documentation for the anaconda deploy interface based on how
it is functioning. Rewrote some sections in an attempt to add clarity
around the behaviors and operations of the interface.

Change-Id: Id4a9b0033d356446b4fe392a20faa63625b4c20d
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-03-03 09:48:47 -06:00
Steve Baker
1ad1b167ff Implement graphical console read-only support
Change-Id: I321c1d0e6bce4e66107f92fc67c95bc38a0a9ad9
Related-Bug: 2086715
2025-03-02 22:27:33 +00:00
Steve Baker
4ed44172b4 Add vnc-container image build
The files in tools/vnc-container allow a container image to be built
which supports Ironic's graphical console functionality.

For each node with an enabled graphical console, the service ironic-novncproxy
(or nova-novncproxy) will connect to a VNC server exposed by a container
running this image.

If the devstack ir-novnc serivce is enabled then this container image
will be built locally and ironic configured to used it for the systemd
console container provider.

This makes a devstack environment functional in accessing graphical
consoles for Dell, HPE and Supermicro.

Related-Bug: 2086715
Change-Id: I0842570cca22ac0e67d358c30225e8e08561f459
2025-03-02 22:27:33 +00:00
Steve Baker
e41cb93eeb Implement drivers redfish-graphical, fake-graphical
New ``console`` drivers ``redfish-graphical`` and ``fake-graphical``
have been added. This allows the graphical console to be accessed for
Dell iDRAC, HPE iLO, and Supermicro hosts. The ``fake-graphical`` driver
is useful for demonstrating the full integration of
``ironic-novncproxy`` and the ``systemd`` provider of
``ironic.console.container``.

Related-Bug: 2086715
Change-Id: If1899aedbcda606895bab120e301a006818b85a5
2025-03-02 22:27:33 +00:00
Steve Baker
48557942ac Add systemd provider for console containers
A new entry point ``ironic.console.container`` is added to determine how
console containers are orchestrated when ``ironic.conf``
``[vnc]enabled=True``. By default the ``fake`` provider is specified by
``[vnc]container_provider`` which performs no orchestration. The only
functional implementation included is ``systemd`` which manages
containers as Systemd Quadlet containers. These containers run as user
services and rootless podman containers. Having ``podman`` installed is
also a dependency for this provider. See ``ironic.conf`` ``[vnc]``
options to see how this provider can be configured.

The ``systemd`` provider is opinionated and will not be appropriate for
some Ironic deployment methods, especially those which run Ironic inside
containers. External implementations of ``ironic.console.container`` are
encouraged to integrate with other deployment / management methods.

Related-Bug: 2086715
Change-Id: Ib890c3c7be91ddd78a43b9c5261dd1d8c1054c04
2025-03-02 22:27:33 +00:00
Takashi Kajinami
48940fcd6a Replace deprecated FormatChecker.cls_checks
The method was deprecated in jsonschema 4.14.0[1] and now triggers
the following warning.

DeprecationWarning: FormatChecker.cls_checks is deprecated. Call
FormatChecker.checks on a specific FormatChecker instance instead.

Also drop redundant override of FormatChecker. The overridden check
method is identical with the same method in the parent class.

[1] cd8f0592b9

Closes-Bug: #2089051
Change-Id: Ibdf450ccf204f1ad39fa4dbc8ff10f6fd0bb17a7
2025-03-02 18:45:12 +09:00
Takashi Kajinami
e6de3578fd Fix fake classmethods
Some of the DB api methods are defined as classmethods but these are
expected to be usual methods by logic calling these.

Change-Id: I772f0f2e52bd5b16adea5dd8e47a99651ece0634
2025-03-02 04:15:07 +00:00
Takashi Kajinami
d1bdee9468 Replace deprecated abc.abstractclassmethod
It was deprecated in Python 3.3 [1].

[1] https://docs.python.org/3.13/whatsnew/3.3.html#abc

Change-Id: Ib7a9385b75104f1d29a125dc7225b8a72882c257
2025-03-02 04:14:23 +00:00
Vasyl Saienko
1412cc336f Enable trunk plugin for tinyipa-multinode
In order to test VLAN aware VMs feature trunk neutron
extension is needed.

Change-Id: I4c0c5b320cb9b63440f007ac7ed91696ac7fad9c
Related-Bug: #1653968
2025-03-01 19:52:59 +00:00
Takashi Kajinami
5230316e7b Drop direct dependency on iso8601
iso8601.iso8601.UTC has been equivalent to datetime.timezone.utc in
Python 3, so the current usage is quite redundant.

Change-Id: I86f21e0555b02da11284b788fbee75cd6ca97f3f
2025-03-01 06:06:01 +00:00
Zuul
5e22704dad Merge "Add extra log to is_image_available" 2025-02-28 02:59:10 +00:00
Julia Kreger
1f5755ec12 Only try and do deep network config validate if admin
User mdfr reported an issue where a user with ironic, who
had member privileges of the node's owner project, reported
they would get an error about ironic being unable to validate
the cleaning network when trying to bind a baremetal port to
a portgroup.

This is rooted in checks to provide early feedback of ironic
configuration issues, which just work if a user is an admin
scoped user... However the networking client utilizes the
credentials from the task, meaning the credentials of the
user with member access.

That being said, we only need to do the additional checks
if the user is an "admin". Modifies the existing code
and test to test/assert the admin role.

Closes-Bug: 2100520
Change-Id: Idfbf0f58c9976bedb60e1eca1dd282875c89977f
2025-02-27 08:08:03 -08:00
Dr. Jens Harbott
56dbf38ed8 Make floppy images more floppy
Some vendors insist that floppy images need to be exactly 1440 KiB in
size and have a suffix of ".img". Let's adapt to this and assume that
this doesn't break other vendors.

Closes-Bug: 2100276
Change-Id: I5be6380e8c8c3eac5bea1c189b205b05a9fae625
2025-02-27 08:32:56 +01:00
Zuul
1471984fc0 Merge "ci: focus ironic-tempest-bios-ipmi-direct-tinyipa" 2025-02-27 05:27:27 +00:00
Kaifeng Wang
55c0a060cd [Trivial] Fix typo of exception error message
Change-Id: Ib3b285ff63c5ab10239954f68080f4ceb5292f1d
2025-02-26 17:53:27 +00:00
Satoshi-Sh
e7d1f8e211 Add extra log to is_image_available
Added a reason why the image is not available for the debuggin.

Partial-Bug: #2099276
Change-Id: Id0f71e201e7e4509e4dd34fa18d1c980dc28b4d3
2025-02-25 15:44:55 +00:00
Harald Jensås
b31a109db0 devstack bindep - [platform:rpm]
On RPM platforms install packages:
* syslinux-nonlinux (pxelinux.0)
* guestfs-tools (virt-make-fs etc.)

Change-Id: I3400fb27b57f3d8bbb69237d86a5b369142a3d1c
2025-02-25 14:10:50 +00:00
Steve Baker
2c472dfa8f Fix default IRONIC_DEFAULT_TRAITS setting
Change-Id: Icf1f4c704d77f720cd8fefda60ddbcabe4853b55
2025-02-25 14:37:37 +13:00
Zuul
b44cce176f Merge "Add ironic-novncproxy service" 2025-02-24 19:06:43 +00:00
Julia Kreger
7d3d75db73 CI: Extend default timeouts slightly
Recently, logic was changed around network testing, but now we're seeing
test timeouts when the test is still running. In other words, we pushed
the time around and we started hitting the overall job timeouts.

As such, extend the window slightly on the default job so the test runs
can hopefully wrap up before the timeout trigger occurs.

Change-Id: Ie9d4fa6d747b93b2570f8abc13ef48c68e265644
2025-02-24 09:48:15 -08:00
Zuul
de4d5733ee Merge "More reliable TinyIPA build with network retries" 2025-02-23 15:02:27 +00:00
Doug Goldstein
e443ddcb92
Update DRAC RAID module import logic
- Refactored the import logic for `sushy_oem_idrac` to use a direct import from
  `sushy.oem.dell` if available, falling back to `importutils.try_import`
  only if the module is not found. This improves clarity and ensures that the
  correct version of the library is preferred.
- Adjusted corresponding tests in `test_raid.py` to reflect the changes in
  the import logic.

Depends-On: https://review.opendev.org/c/openstack/sushy/+/940557
Change-Id: I0dbb0ad341059969b86a508a5ccd1e3654cf613b
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-02-22 13:18:01 -06:00
Vasyl Saienko
dc0dd23994 Enable atop on jobs
In order to stabilize CI we need to have clear understanding
on what is happening on the nodes. Right now we a blind cats
and trying to do predictions based on logs which is hard.
This patch enables atop installation on all jobs by default
which will provide a clear picture of what is happening
on the environment during tests, how many VMs are booted
concurrently etc.

Depends-On: https://review.opendev.org/c/openstack/devstack/+/939578
Change-Id: I79c9c91e81c6a94f4e17191e05d78902dbb3b1f8
2025-02-21 06:45:09 +00:00
Julia Kreger
1afc11be8d ci: focus ironic-tempest-bios-ipmi-direct-tinyipa
This job was previously attempting to run all of our scenario tests,
which is nice, but the reality is that so many test steps also increases
chances for build history.

As such, dialing the job so we're performing the basic needful and
not trying to perform every test possible.

Change-Id: Ie4845fb5810a379bf6209179693eed27301b24a3
2025-02-20 22:16:01 +00:00
Zuul
d3c74c6a4b Merge "Fix devstack plugin for centos" 2025-02-20 17:02:17 +00:00
cid
f333fd4d1c More reliable TinyIPA build with network retries
Wraps `wget` commands with sleep and mutiple retry support
for resilient network downloads.

Partial-Bug: #2098417
Change-Id: Id3e083cc97b71211e5080ad21e2c09d04d8559fa
2025-02-20 15:48:28 +01:00
Julia Kreger
5c285047ae ci: set a longer nova tempest build interval
By default, nova's tempest code checks every second for the status of
an instance being built. But for baremetal, this can take longer. Much
longer because the many steps in a sequence of action to facilitate
deployment.

As such, changing the timer to 10 second will reduce the amount
of logging generated by CI test jobs, which presently can fail
with too much data to be logged causing subunit to fail and rendering
logging lost.

Change-Id: I1f7e0198b61717ffaaeb471dfcb200a5ab58c506
2025-02-20 05:24:17 -08:00
satoshi-sh
45d87a851b Remove multinancy page
Replace the link to tha page with :ref:admin-networking

Closes-Bug: #2098895
Change-Id: I70225b214b439b2ae6bce49e5c12653c63820c6a
2025-02-20 00:03:33 +00:00
Zuul
f9c3c1d9f2 Merge "Mention removing codespell job in bugfix branches" 2025-02-19 22:30:12 +00:00
Steve Baker
beaaf405d3 Add ironic-novncproxy service
This is a forklift of the nova novncproxy service to act as the noVNC
front-end to graphical consoles.

The service does the following:
- serves noVNC web assets for the browser based VNC client
- creates a websocket to proxy VNC traffic to an actual VNC server
- decouples authentication traffic so that the source server can have
  a different authentication method than the browser client

The forklifted code has been adapted to Ironic conventions, including:
- [vnc] config options following Ironic conventions and using existing
  config options where appropriate
- Removing the unnecessary authentication method VeNCrypt, leaving only
  the None auth method.
- Adapting the ironic-novncproxy command to use Ironic's service launch
  approach, allowing it to be started as part of the all-in-one ironic
- Replace Nova's approach of looking up the instance via the token.
  Instead the node UUID is included in the websocket querystring
  alongside the token
- Removing cookie fallback when token is missing from querystring
- Removing expected protocol validation in the websocket handshake
- Removing internal access path support
- Removing enforce_session_timeout as this will be done at the
  container level

Related-Bug: 2086715
Change-Id: I575a8671e2262408ba1d690cfceabe992c2d4fef
2025-02-19 20:17:57 +00:00
Kaifeng Wang
e994d405b0 Remove gmr from the docs
gmr support was removed from ironic, but docs still mention it.

Change-Id: I5e496e2f50e8669eaa7b168994d1640de32a1129
2025-02-19 23:40:12 +08:00
Zuul
88a96b2930 Merge "deprecate shellinabox" 2025-02-19 08:03:48 +00:00
Zuul
e44a969740 Merge "trivial: lock dnsmasq check to ubuntu" 2025-02-19 04:37:07 +00:00
Zuul
0bcbe9945d Merge "move hooks execution into shareable module" 2025-02-18 23:36:22 +00:00
Zuul
96f9d9da28 Merge "OVN UEFI IPv6 CI job" 2025-02-18 21:46:02 +00:00
Julia Kreger
8610346794 Don't log PXE when your not doing PXE.
So... the neutron common code is modeled around PXE, and when you
go to do something with vmedia, you can get errors logged about not
having PXE enabled ports which is misleading.

The reality is the common code needs to base the decision on if all
ports need to be added or if just PXE enabled ports need to be added
based upon the loaded driver via configuration.

As such, now we consult the boot interface's capabilities field
and alternatively pull in the additional interfaces as appropriate
for virtual media users.

Which then also fixes the misleading error!

Closes-Bug: 2098791
Change-Id: I8c9d07e2ded75f138897ece6a67016a6f0020ce6
2025-02-18 11:29:18 -08:00
Julia Kreger
0b57f5609e centos devstack support: fix VM permissions
When running the devstack plugin on Centos, the default
libvirt artifact permissions on the filesystem prevents
libvirt from launching UEFI VMs.

This allows for the VM to be able to launch.

Change-Id: I04fcc86175e90e6ca024a44841f4f05bcb5b1f63
2025-02-18 11:04:30 -08:00
Julia Kreger
449bc1a825 deprecate shellinabox
Shellinabox hasn't received an update in 7 years.
Debian recently asked for maintainership to be handed over due to
open issue counts and lack of responses.

All sorts of open issues exist. It appears branches were deleted
in late 2024, forks still have them though.

Basically, looks like shellinabox is abandoned, and we should
treat it as such and abandon support in Ironic.

Change-Id: I5704e1a6a6a816e1cca3b5d0c791eed030cfc563
2025-02-18 10:25:03 -08:00
Zuul
676b8c69ac Merge "OCI: Send the auth header to IPA" 2025-02-18 16:03:19 +00:00
Riccardo Pittau
fecdaed265 Mention removing codespell job in bugfix branches
Change-Id: Ifaaf1f0c1d583cff21987d704c4a662b3f0bff1b
2025-02-18 10:12:46 +01:00
Zuul
f7155fc38e Merge "trivial: de-distro dnsmasq version check" 2025-02-17 22:19:43 +00:00
Julia Kreger
4d5e2de19f Trivial: Enable disabling tftp setup
Working on Centos, I just want to disable tftp completely.

So I added a flag IRONIC_ENABLE_TFTP

Change-Id: Ia75ccb2705b658fb236454f0931d7220b834883b
2025-02-17 11:12:24 -08:00
Julia Kreger
0aadeeea7d Fix devstack plugin for centos
The emulator *and* the EFI binary paths are different
when using Centos/Fedora, and Fedora/Centos are distinctly
different with EFI folder paths.

Change-Id: I2c6ba884735f22cc9153de0a24282758ffbdc496
2025-02-17 11:12:10 -08:00
Doug Goldstein
4896528353
allow multiple inspection interfaces to load hooks
Allow for multiple inspection interfaces to load hooks for future
expansion of hook execution. Added some wording to the conf option to
make it clear which inspection interface these options are for.

Change-Id: I182bc8537927cb3565a07dcebe813e22926ecdc8
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-02-17 09:38:22 -06:00
Zuul
3603e60c32 Merge "Apply Rules: inspection rules migration" 2025-02-15 03:28:55 +00:00
Zuul
baf7ff9c18 Merge "oci: fix auth config loading" 2025-02-14 22:47:29 +00:00
Zuul
12e095ccf3 Merge "Mask all driver_internal_info in node output" 2025-02-14 22:47:26 +00:00
Zuul
c1a7bf0d09 Merge "Utility functions for graphical console drivers" 2025-02-14 22:47:23 +00:00
Andrew Bonney
feb3205943 Filter physnets when ports are pre-allocated to a segment
If an Ironic Node is connected to multiple physnets, and wants to
connect to a Neutron VIF whose network has segments in multiple
physnets it may be unclear which one to connect to.

If the VIF is already allocated to a subnet with a segment mapping,
this can be used to resolve the process to a physnet.

When a network uses Neutron routed segments, this patch first
checks the port's fixed_ips to see if a segment/physnet can be
determined from the subnet it is attached to. If this cannot be
identified (or fixed_ips is unset), the behaviour falls back to
returning all physnets available in the segmented network.

A similar change in Neutron was made in
I56b22820d29b2d57faf28a2f9b685ab0b2c924b4

Change-Id: Ie693257cdb8c44eeaf49cec9678de047f35d5221
2025-02-14 11:21:53 -08:00
Julia Kreger
690bc31900 trivial: lock dnsmasq check to ubuntu
Centos Stream 9 has 2.90 at this point, we don't need this check
outside of ubuntu right now.

Change-Id: I6510aa8b893d3dea81ec6b7f1cb0b9fcb6ae5edc
2025-02-14 10:48:37 -08:00
Julia Kreger
f5083f7a44 trivial: de-distro dnsmasq version check
While doing some work on a fips-enabled machine, using centos,
I noticed the check is looking for a ubuntu package version.

Realistically, that is wrong, since 2.90 in general is what
we're seeking.

Change-Id: I02179f10a360a5dd83f4efe28c1ecbb51afb57ab
2025-02-14 10:46:13 -08:00
Zuul
715e9c8e71 Merge "Pass agent token to get command results" 2025-02-14 16:12:21 +00:00
Harald Jensås
782045852f OVN UEFI IPv6 CI job
IPv6 job using UEFI and OVN with dhcpv6-stateful address mode.

Updates the devstack plugin to ensure CentOS DIB ironic-python-agent is
always used for dhcpb6-stateful, udhcpc in tinycore does not support
DHCPv6.

Ensure mtu on the ironic-provision network matches PUBLIC_BRIDGE_MTU
when Ironic IPv6 is used. This ensures we do not get packet drops from
over-mtu.

Devstack plugin will ignore any HOST_IPV6 address discovered, always
using the magigv6 interface and 'fc00::1' as IRONIC_HOST_IPV6.

Change-Id: Iab97d78d7a075eaef3bdcfc08fc4f184a5ea490a
2025-02-14 15:36:21 +01:00
Steve Baker
c0681ccf63 Utility functions for graphical console drivers
These are functions used by both the novnc-proxy and the graphical
console drivers related to session management. They are added in this
position in the series for ease of reviewing, and to keep the
novnc-proxy change specific to code which has been forklifted and
adapted from Nova.

Change-Id: I72aa2205f92c153809300fd304558427141cda78
2025-02-14 13:40:04 +13:00
cid
279392966b Pass agent token to get command results
Change-Id: Iad0d8086e1e79b59da3f9940b83128a3b34d4787
2025-02-14 00:25:22 +01:00
cid
15df33437b Apply Rules: inspection rules migration
Change-Id: Icca713bb4ef00d5bffca6e529c8bea4a7fe1f285
2025-02-13 16:17:25 +01:00
cid
d6a692e3fa DB: inspection rules migration
Change-Id: I83b7e37ad44dca395144ce14510a1de0f6eeefa5
2025-02-13 16:17:25 +01:00
Julia Kreger
437ce1467c OCI: Send the auth header to IPA
This change takes the identified authorization header and sends it
in the command to IPA as an argument. This enables a future IPA
patch to recognize an authorization rejection, and to leverage the
header to authenticate to the remote image service.

Also addresses a case where we neglect to preserve the auth token
in the case of a container URL reference with digest value and adds
a corresponding test which didn't exist either.

Change-Id: I8346eb56e90a5a3e2bc68a9e5cd345121f734245
2025-02-13 06:47:54 -08:00
Julia Kreger
6aaa84f11e oci: fix auth config loading
When testing, I guess I didn't actually test loading the token
from config, and relied upon mocking. However, turns out the code
used the wrong load command (loads, versus load), which passed
unit testing, but didn't work when I gave the config a try.

Fixes the call and the testing so it properly passes now.

Change-Id: I4750a82ea07bc803600fddebd16f14a201ae406e
2025-02-12 11:46:09 -08:00
Julia Kreger
5262536417 oci: fix hang with 429 error code handling
While doing some additional testing, I've started to get 429 errors
from Quay which were causing my requests to hang. This was because
the built in retry logic with adapter use. As such, I removed the
adapter use and I now get a 429 error as expected and logged properly.

This was not caught with existing testing because it was getting
captured and held inside of urllib3 with the adapter usage.

Change-Id: I68a532a9765fbf90870ef4372b93738940eabd9e
2025-02-12 10:48:49 -08:00
Doug Goldstein
59804114fb
move hooks execution into shareable module
To allow other inspect interfaces to execute hooks in a common way, move
the execution code into a common inspect_utils module.

Change-Id: Idfe0a36443969347cff41fdb6900a3bc79209823
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-02-11 23:19:41 -06:00
Zuul
472744f390 Merge "bootc deploy interface - for bootable containers" 2025-02-11 17:15:53 +00:00
Zuul
e042073a08 Merge "[docs] Fix link to metal3-integration page" 2025-02-11 14:35:59 +00:00
Zuul
42c72bd2ac Merge "CI: Only artificially pin down the mtu in multinode" 2025-02-11 11:48:52 +00:00
Riccardo Pittau
e0a9a21576 [docs] Fix link to metal3-integration page
Change-Id: I14be65dad0ebd98fdd001c5cf490792f52ae8642
2025-02-11 09:33:51 +01:00
Julia Kreger
c7fa447ab6 bootc deploy interface - for bootable containers
Adds a ``bootc`` deployment interface which can be enabled to
perform deployment of bootable containers. This enables a streamlined
workflow where an operator/user can push container updates and does not
need to build intermediate disk images and then post those disk images
to facilitate the deployment of a bare metal node.

Closes-Bug: 2085801
Change-Id: Iedb93fe47162abe0bd9391921792203301bfc456
2025-02-10 19:58:20 +00:00
Zuul
814384f2cf Merge "Add basic documentation on metal3-integration job" 2025-02-10 18:59:56 +00:00
Julia Kreger
ec53c6b5d2 CI: Only artificially pin down the mtu in multinode
So the prime driver behind pinning the MTU down on our interfaces is so
traffic can cross mutlinode vxlan tunnels between nodes where the devstack
plugin is executing to support more complex tests.

But the reality is that doesn't always make sense, and when Neutron
has a default mtu override based upon "upstream" traffic constraints,
that is likey okay as well.

Part of the CI configuration auto-pins the MTU down, which is fine
for single node testing, however with multinode we need to pin the
MTU further down to try and prevent packets from being dropped on
the internal interfaces use to wire up test VMs.

Change-Id: Idc145f4eea87a8db69202b8d7953975d7d5cba2c
2025-02-10 09:54:05 -08:00
Zuul
9cf39b3769 Merge "Trivial: Remove the long deprecated token arg" 2025-02-10 11:37:12 +00:00
Riccardo Pittau
520d01a0a1 Add basic documentation on metal3-integration job
Give an overview of the metal3 integration job, its workflow,
and adds usefule links to familiarize with the metal3 project
and reach the metal3 community.

Change-Id: I94bd6a90f813af7323a7c3363577953a69e62ade
2025-02-10 11:42:20 +01:00
Zuul
9847c41238 Merge "Automatic zstd detection and decompression..." 2025-02-10 05:43:37 +00:00
Zuul
ab1fe27baa Merge "OCI container adjacent artifact support" 2025-02-10 05:43:34 +00:00
Zuul
1447d32c9d Merge "Checkout dnsmasq in a tmp directory" 2025-02-09 21:52:32 +00:00
Zuul
ef70b9674d Merge "Log secure boot access failures at INFO level" 2025-02-07 22:44:00 +00:00
Zuul
93b80a367e Merge "Fixes upstream table width on cleaning docs" 2025-02-07 21:44:20 +00:00
Julia Kreger
f1cad52602 refactor: split glance handling into it's own method
Just split apart the deploy info generation method so glance
handling is isolated to it's own method as it is is quite complex
for a limited portion of Ironic's user base.

Change-Id: I036b384263e57b3345101a8f5376962faa5c1d2b
2025-02-07 13:42:32 -08:00
Julia Kreger
d6b339ba34 Automatic zstd detection and decompression...
... for conductor downloads.

The issue is we don't have the underlying library for requests to do
Zstandard decompression, but userspace tools are common in linux
distributions, and opportunistically we will try to detect, and
de-compresse artifacts.

Zstandard is popular for compression of artifacts in container
registries.

Change-Id: I0f6b3b7a8685bb2724505836c770e080bc0e0632
2025-02-06 22:47:03 +00:00
Julia Kreger
db4412d570 OCI container adjacent artifact support
Adds support to use an OCI url for references to artifacts
to deploy.

- Identification of a disk image from the container registry.
- Determination of an image_url which IPA leverages to download
  content. Content cannot be compressed at this point in time.
- Ironic can download the file locally, and with a patch to
  detect and enable Zstandard compression, can extract the
  URL, starting from either an OCI container URL with a Tag,
  or a specific manifest digest, which will then download the
  file for use.
- User driven auth seems to be good.
- Tags work with Quay, however not OpenShift due to what appears
  to be additional request validation.

Closes-Bug: 2085565
Change-Id: I17f7ba57e0ec1a5451890838f153746f5f8e5182
2025-02-06 11:38:21 -08:00
Kaifeng Wang
69b3ff4052 Remove ibmc leftovers
Remove leftovers of ibmc driver which was removed from the upstream.

Change-Id: Idb40c2bdd51321ec05fe5ef7ca2f89014f94c6aa
2025-02-06 21:46:40 +08:00
cid
62a44faf6a Log secure boot access failures at INFO level
Handle Supermicro BMC `OemLicenseNotPassed` error.

Story: 2011154
Change-Id: I288099bf276357c884bdee798be5200dea0cf046
2025-02-06 14:17:53 +01:00
satoshi-sh
68f379582d Create a reference section
Added a reference section to doc

Closes-Bug: #2072354

Change-Id: I586364b118307469b8c3fcefada68df11aa854a6
2025-02-05 13:27:36 -06:00
mumesan
fa7a8bf9cc Fixes upstream table width on cleaning docs
The _format_doc function filters out fields from the docstring when generating Sphinx documentation but does not account for a case where there may be blank lines between fields. As a result, only the last group of fields may be filtered out. This fix filters out all lines which are fields.

Closes-Bug: #2097310
Change-Id: I7e702b82b4d2ce20520479d8a8210be36bfbdd5e
2025-02-05 12:12:39 +00:00
Zuul
e506357313 Merge "Fix invalid command in grenade destroy" 2025-02-05 11:01:05 +00:00
Steve Baker
9f43eddb37 Checkout dnsmasq in a tmp directory
Each run of devstack results in the dnsmasq version being restored to
the distro package version before being replaced by this override.  This
means that a second run of stack.sh fails because the dnsmasq checkout
directory already exists.

This change moves the checkout to a tmp dir. This also stops git
complaining about nested git repos from the devstack repo.

Change-Id: Ida3892f2e706fa5a791a048f26440d84876be125
2025-02-04 22:57:46 +00:00
Jay Faulkner
b7e2b1242d Fix invalid command in grenade destroy
This command is invalid and produces errors. Based on context, assuming
it was intended to be a delete.

Change-Id: I8d0d693d757edeb16f7781a09b01a487a170d08d
2025-02-04 12:39:00 -08:00
Zuul
eeed59435c Merge "Support querying node history with sort_key and sort_dir" 2025-02-04 11:12:19 +00:00
cid
778f8f09fb Trivial: Remove the long deprecated token arg
Change-Id: Ibe99dd907a72c707a20c77ec5f598583de3e179f
2025-02-04 08:19:12 +01:00
Zuul
a785452b02 Merge "Trivial: Clean up residual .vbmc dir after clean" 2025-02-04 04:49:08 +00:00
Zuul
329b3e13f2 Merge "move inspection hooks initialization" 2025-02-03 16:54:13 +00:00
Zuul
dd9f4f958b Merge "doc: fix typo and slight wording order for networking" 2025-02-03 15:08:30 +00:00
Vasyl Saienko
d163f1619f [devstack ]Use tap interfaces for VMs
In order to implement port group testing on CI we need to make
sure that we can change mac addresses of interfaces which is
possible with tap interfaces, but not supported for direct mode.
This patch updates VM setup to use taps for interfaces.

Related-Bug: #1718481
Change-Id: I0ef1ad1b2e50cb26839c618a1367704d51ed8a4d
2025-02-03 08:14:26 +00:00
Zuul
3c94e85734 Merge "Fix hold/wait step logic in step validation" 2025-02-03 07:39:59 +00:00
cid
15a3daab36 Trivial: Clean up residual .vbmc dir after clean
Closes-Bug: #2095428
Closes-Bug: #2076258
Change-Id: I0996ffd2422272252c6f3d35dc8e4d46c3f90863
2025-02-03 08:09:18 +01:00
Kaifeng Wang
3ecae32d33 Support querying node history with sort_key and sort_dir
Expose sort_key and sort_dir to the node history api.

Change-Id: I08b59efc41501f1263d023407e22633dc2264932
Closes-Bug: #2026289
2025-02-01 15:32:49 +08:00
Doug Goldstein
1b2482c83a
doc: fix typo and slight wording order for networking
There was a hanging ` but at the same time having two blocks of fixed
width text next to each other it led to some user confusion so reflowed
it to be a bit more clear.

Change-Id: I1f326bf8f6807c8ce1967d954d1b643f31fbaba3
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-01-31 15:39:05 -05:00
Zuul
8bbfb60f85 Merge "CI: Remove IPv6 testing" 2025-01-31 19:49:14 +00:00
Zuul
51d1acebb5 Merge "doc/source/admin fixes part-3" 2025-01-31 12:25:13 +00:00
Zuul
81e09c3eb4 Merge "Fix redfish session cache on missing password" 2025-01-30 23:15:12 +00:00
Dr. Jens Harbott
91b656d31c Fix redfish session cache on missing password
The redfish_password option is optional, make sure that the SessionCache
does not throw an error when it is not set.

Closes-Bug: 2097019

Change-Id: Idf792c982a883a4c07ae1dad72e3c54bc73b96a1
2025-01-30 21:02:26 +01:00
Zuul
c219604a39 Merge "doc: define the shape of inspection inventory" 2025-01-30 19:57:16 +00:00
Zuul
2c3a869388 Merge "Fix agent from being locked out with complex steps" 2025-01-30 18:39:18 +00:00
Zuul
953dec09ef Merge "api: Add schema validation framework" 2025-01-30 05:13:26 +00:00
Doug Goldstein
b1f3ea412c
doc: define the shape of inspection inventory
Added some documentation to define the shape of inspection inventory
data so that hooks can be standardized between inspection interfaces.

Change-Id: I8c04e0b96edd6fc86b038f72edbaa2952bd645f6
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-01-29 17:46:07 -05:00
Doug Goldstein
f544ec706d
allow docs targets to run dot
dot is used to generate some graphics for the docs so it needs to be
allowed to be run.

Change-Id: I1d88b652d8698014da1d0e4ade95c34c1528382e
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-01-29 17:29:00 -05:00
Julia Kreger
5db194c503 Fix agent from being locked out with complex steps
When mixing in-band out-of-band steps, the out-of-band status polling
flag was not being cleared, and was being left to remain in the node
driver_internal_info field, thus preventing future heartbeat operations
from the baremetal node from being processed to check the actual
completion status of a step.

We now always clear the field based upon the workflow in-progress
before starting a new step and should asynchronous steps also
be recorded as a result of any step's actions such as if a reboot
is required.

Special thanks goes to keekz for promptly providing upstream with
the information necessary for us to identify the root cause.

Closes-Bug: 2096938
Change-Id: I5198d9169cff8474c7a990332639b2d0758e6e1a
2025-01-29 20:53:31 +00:00
Steve Baker
083ade489a Mask all driver_internal_info in node output
Rather than masking individual fields, driver_internal_info really
should be masked using the same method as driver_info. This change is
mainly for masking values in future changes, but this change will also
mask `agent_secret_token_pregenerated`.

Change-Id: I7096532ff7615f1390db092bb1659d5a7c909d10
2025-01-30 09:47:32 +13:00
Zuul
81b3612046 Merge "Add lsblk output to metal3 logs" 2025-01-29 14:11:34 +00:00
Doug Goldstein
befcb9736b
move inspection hooks initialization
Moved the initialization of inspection hooks into the inspect_utils
module for future work of having multiple inspect interfaces utilize
this code. The hooks/base module defines the abstract interface for
hooks and provides code documentation. The rest of the directory has
other hooks so this shouldn't blend internal servers for executing the
hooks.

Change-Id: I756067000867f3eaa3a005f88e571a3666bea784
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2025-01-28 14:44:27 -05:00
Zuul
d188dfca98 Merge "trivial: remove xclarity remenent" 2025-01-27 23:44:35 +00:00
Zuul
16693dbb8a Merge "Resolve portgroup deletion failure" 2025-01-27 19:28:26 +00:00
Julia Kreger
be2bd0ea04 CI: Remove IPv6 testing
When Ironic's CI went to Ubuntu Noble, IPv6 testing broke.
Ultimately, that was because the job was changed from BIOS
boot mode to UEFI.

Which in theory was a good thing.

But in reviewing the EDK2 known bugs[0], it is clear IPv6 testing
moving forward needs to be manual and cannot be done automatically.
For the reader's context, EDK2 is the source of the firmware used
for Libvirt UEFI VMs.

In attempting to work through the issues, we discovered:
- EDK2 doesn't care about stateless (auto discovery) mode, and
  thus doesn't work when that is set. It attempts to solicit
  an address, which is an open bug [1] from 2019, opened by
  an Ironic contributor.
- EDK2 *always* attempts PXE v4 first, which takes 60 seconds to
  timeout, before attempting PXE v6.
- PXE v6 *might* work before it times out, which takes 5 minutes to
  occur, if the dhcp server has cleared leases, but there is no
  guarentee. In most cases the result is the DHCP server views the
  address as handed out and that there are no free addresses available
  to supply. This is also rooted in bug [2], also opened in 2019.
- EDK2 then switches gears and tries HTTPBoot... simiarly, but
  the way it does so, noted in bug [3], is also incompatible
  with dnsmasq.

There are additional bugs, but one sort of gets the idea. Some of this
is compounded by aspects like dnsmasq attempting to be strict about
responding to requests in the DHCPv6 model. A different DHCP server
*might* demonstrate a little differently, but fundimentally the same
underlying issues in EDK2 will make testing difficult.

In attempting to fix this issue, we also attempted to revert back to
BIOS mode. This mode uses iPXE ROM images built for QEMU, yet we
quickly discovered these pre-built ROM images lacked IPv6 support
in Ubuntu Noble. This likely a regression of Ubuntu, but bug tracking
points directly to Upstream iPXE which is not valid as it is a compile
time option.

Testing the ROMs showed only DHCPv4 being attempted and IPv6 router
advertisements being entirely ignored. In a sense, if it did work,
it would still kind of be cheating as the iPXE ROM is able to skip
the first part of the complexity related to PXE in general.
In other words, it is not an entirely realistic test
when compared to Bare Metal.

As such, we don't have a forward path to "fix" this CI job as is.

We know the code works. We know vendor firmware sometimes has quarks like
needing stateless or stateful operation, We know Ironic does the
right thing... within it's capabilities. We just can't test this in
CI.

[0]: https://github.com/tianocore/edk2/issues?q=is%3Aissue%20state%3Aopen%20%20ipv6
[1]: https://github.com/tianocore/edk2/issues/9832
[2]: https://github.com/tianocore/edk2/issues/9828
[3]: https://github.com/tianocore/edk2/issues/9689

Change-Id: Ifc25bc1e1abb949892a1297a313d63f74937c9a1
2025-01-25 06:22:18 -08:00
Zuul
3704cc378d Merge "[doc] Add node history to admin guide" 2025-01-24 15:56:06 +00:00
Jay Faulkner
4e782d37ee [doc] Add node history to admin guide
Node history previously was only documented in our troubleshooting faq
and API reference.

Change-Id: I84c32f657d420c9f02458347a318a67bff14e981
2025-01-23 09:19:57 -08:00
Riccardo Pittau
209c8a9969 Add lsblk output to metal3 logs
Change-Id: I0dbf20d6aaf7637acb8d4227cd5968d34aee4f0f
2025-01-23 16:39:43 +01:00
Zuul
3fb614f7b7 Merge "Fix typo calling save_and_reraise_exception" 2025-01-22 01:10:35 +00:00
Julia Kreger
b6275912c2 Fix hold/wait step logic in step validation
Somehow... the hold and wait steps were dropped or were lost in
from when hold/wait step logic was developed. This fixes it and
adds them to a test which exercises the validation logic.

Also takes into account the unhold verb call from Dmitry's change
in https://review.opendev.org/c/openstack/ironic/+/913707 and
adds a test accordingly.

Change-Id: I8c23db46b4a5772d907f6c73ed5b975fdaaf80c8
2025-01-21 11:20:08 -08:00
Zuul
b4598c1cfe Merge "Migrate documentation from ironic-lib" 2025-01-21 17:29:20 +00:00
Derek Higgins
c5cb739461 Fix typo calling save_and_reraise_exception
Related-Bug: 2095403
Change-Id: If0af007253f6f368ed7723df78b2e2756766c9d7
2025-01-21 10:52:08 +00:00
Riccardo Pittau
23e486a1ba Force legacy boot for metal3 integration job
Recently metal3-dev-env moved from bios to UEFI boot mode [1]
but the integration job on the metal3 CI still runs on
ubuntu jammy.
The location of the libvirt loader is different between
jammy and noble so we temporary use this workaround until
we support UEFI on ubuntu noble in metal3-dev-env.

[1] https://github.com/metal3-io/metal3-dev-env/pull/1326

Change-Id: I89caf341ac7078182e836f0fdd9bf08376837b20
2025-01-21 09:18:58 +01:00
cid
6be6999247 Resolve portgroup deletion failure
Add a join query and fix ``id``/``uuid`` mix-up.

Closes-Bug: #2093853
Change-Id: Ifc00069b075fed6bdf79bf4104cfdee62bb7b42a
2025-01-17 19:16:01 +01:00
Jay Faulkner
19ad83b6f5 Migrate documentation from ironic-lib
This was the only meaningful documentation from ironic-lib.

Change-Id: I8c40433edd0c3664488887034a49f687605093c1
2025-01-14 12:59:06 -08:00
Zuul
75b84f6638 Merge "Migrate ironic_lib to ironic" 2025-01-14 17:34:01 +00:00
Muhammad Ahmad
d710027627 doc/source/admin fixes part-3
This a continuation to the efforts to ensure that the documentation is free from typos and grammatical mistakes so that the reader is not confused. Includes fixes for some of the documentation in doc/source/admin/*

Change-Id: Idc29be9815fb53def3482ac0b290a237a0a1b3da
2025-01-12 17:18:45 +00:00
Jay Faulkner
74d239d4eb Migrate ironic_lib to ironic
This migrates ironic-lib code and usages to code in ironic.common.
Relevant unit tests were migrated as well.

Also removes support for ironic-lib from CI and devstack.

Change-Id: Ic96a09735f04ff98c6fec23d782566da3061c409
2025-01-09 13:52:30 -08:00
Riccardo Pittau
62285e7115 Fix bugfix branch release info
Change-Id: I2ec9e092b1c4c0440f4279f8a5469fe10c8e9b3b
2025-01-09 15:33:00 +01:00
Zuul
c5023b8a24 Merge "enable ruff in pre-commit with some initial lints" 2025-01-08 23:49:06 +00:00
Zuul
b806b2c0c2 Merge "move imports to top of file for lints" 2025-01-08 23:38:19 +00:00
Zuul
02e3b6ceb0 Merge "disable ISO cache image format and safety checks" 2025-01-08 20:24:04 +00:00
Julia Kreger
f7ca9ac937 trivial: remove xclarity remenent
I thought I deleted this in the past, but apparently it is still
around. Removing the xclarity/__init__.py file.

Change-Id: I4f74f68b19fc6340bc06310689fbccf08bf80883
2025-01-08 15:33:01 +00:00
Adam Rozman
399cc207d5 disable ISO cache image format and safety checks
This commit:
  - Disables image format checks and safety checks for ISO disk image cacheing

After some discussion in the community it has been decided that instead of
changing the format detection and safety check logic, disabling the format and
safety checks have a smaller maintenance footprint.

Related-Bug: 2091611
Change-Id: Iff2be28c64a0469a3796003f3b8ed28d70631761
Signed-off-by: Adam Rozman <adam.rozman@est.tech>
2025-01-08 12:27:52 +02:00
Scott Solkhon
602a8ba38c Update hardware burn-in docs
Adds docs for GPU burn-in.

Depends-On: I8f8cace6ebc2b7f1c245c82a64609cdfc1c492f9
Change-Id: I23235b0dcdc209180a4fe5f47ed4c6ca71f37ad6
2025-01-07 18:37:14 +00:00
Zuul
8620ee8dfe Merge "change ambiguous variable name" 2025-01-07 16:45:11 +00:00
Zuul
04da975809 Merge "Calculate missing checksum for file:// based images" 2025-01-07 12:45:32 +00:00
Zuul
8ab51b45a7 Merge "Trivial deprecation fixes." 2025-01-06 20:45:23 +00:00
Steve Baker
b827c7bf72 Calculate missing checksum for file:// based images
The fix for CVE-2024-47211 results in image checksum being required in
all cases. However there is no requirement for checksums in
file:// based images.

This change checks for this situation. When checksum is missing for
file:// based image_source it is now calculated on-the-fly.

Change-Id: Ib2fd5ddcbee9a9d1c7e32770ec3d9b6cb20a2e2a
2025-01-07 08:57:37 +13:00
Zuul
3206da1f25 Merge "apply line length rules to the doc directory" 2025-01-06 18:06:22 +00:00
Zuul
707766e155 Merge "CI: Remove legacy metalsmith job" 2025-01-06 18:06:19 +00:00
Zuul
16f0e53d61 Merge "doc/source/admin fixes part-2" 2025-01-06 13:08:49 +00:00
Takashi Kajinami
95f514da06 Replace crypt module
The crypt module was removed in Python 3.13 . Replace the module by
new methods from oslo_utils.secretutils .

Closes-Bug: #2083955
Change-Id: Ib574fc1b0f267e9b42f899f02a7ef84188ef9e85
2025-01-02 13:07:00 +00:00
Julia Kreger
92d01258ab CI: Remove legacy metalsmith job
Swaps the legacy metalsmith job for the uefi metalsmith job.

Change-Id: Iaa41da52ca6e3d8b5b4694edce78a87756f0e3fb
2024-12-19 21:41:14 +00:00
Zuul
9479347cf4 Merge "CI: Detail job removal permission" 2024-12-19 21:06:18 +00:00
Zuul
1c63ca7562 Merge "Handle Power On/Off for child node cases" 2024-12-19 17:21:40 +00:00
OpenStack Proposal Bot
337871c821 Imported Translations from Zanata
For more information about this automatic import see:
https://docs.openstack.org/i18n/latest/reviewing-translation-import.html

Change-Id: I43389a37b072d8edf2a1661403acc6739a6b1a1e
2024-12-18 03:22:08 +00:00
Zuul
615b41ead0 Merge "docs: mention bug 1995078" 2024-12-17 09:34:05 +00:00
Doug Goldstein
231d7f47e5
enable ruff in pre-commit with some initial lints
Used pycodestyle, pyflakes, flake8-logging-format, and flake8-logging to
bring ruff to the ironic tree.

Change-Id: I4e355b0d2cf065f8844794b14474c34b65e7562b
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2024-12-16 09:07:39 -06:00
Doug Goldstein
d4d4c099c1
move imports to top of file for lints
This should be with the other imports.

Change-Id: Ic11de949aeed60e7d8c4445ee2e80d324109c151
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2024-12-16 09:07:38 -06:00
Zuul
f42a6783b2 Merge "The i18n function is used but not imported" 2024-12-11 02:15:11 +00:00
Zuul
84cf3c21bf Merge "docs: clarification around setting port llc data" 2024-12-11 00:59:06 +00:00
Zuul
de309fa4b1 Merge "Skip functional tests on pre-commit config update" 2024-12-11 00:59:02 +00:00
Julia Kreger
233251c8bd CI: Detail job removal permission
During the PTG, we discussed one of the challenges was keeping up on
removal of jobs *and* openly giving ourselves permission to remove
jobs which are *not* required after a certian point in time.

The critical aspect to this noting when/what we can clean up without
risk so we don't feel the need to keep things going forever when
there is not as much value to the overall health of the project.

Change-Id: I64f8f09c087d94376cbc32ef678a5da6595a805a
2024-12-10 15:34:29 -08:00
Julia Kreger
8aff176d31 docs: mention bug 1995078
Change-Id: I143e822c0fe42e231dfe3c4fe72177607489dad6
2024-12-09 14:48:13 +00:00
Muhammad Ahmad
5c0869bfb6 doc/source/admin fixes part-2
This a continuation to the efforts to ensure that the documentation is free from typos and grammatical mistakes so that the reader is not confused. Includes fixes for some of the documentation in doc/source/admin/*

Change-Id: Ibbce369ff5fcccaf0f3aea90f2780a7a700698a1
2024-12-07 18:27:40 +05:00
Doug Goldstein
f5ffda75f6
change ambiguous variable name
This is a flake8 lint.

Change-Id: I1701f86c3b9ab759408a759787fb4fb3bd2825f3
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2024-12-06 08:57:48 -06:00
Doug Goldstein
6bfd84b66b
apply line length rules to the doc directory
We've got code here and no reason it shouldn't be included in our sanity
lints.

Change-Id: I0d7d668bc8e2d214799f7f876a795d4af7346105
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2024-12-06 08:53:48 -06:00
Doug Goldstein
42d05e9a0d
The i18n function is used but not imported
This function is used in this file but never imported.

Change-Id: Ic9e2de7505a11c4fa9267fbde2989db31e14dd34
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2024-12-06 08:44:54 -06:00
Zuul
afd59e3da9 Merge "clean up lints for automated_steps doc plugin" 2024-12-06 13:50:23 +00:00
Zuul
5a3d342018 Merge "docs: note ipv6 is a good idea with neutron interface" 2024-12-05 17:38:32 +00:00
Julia Kreger
67978311d5 docs: clarification around setting port llc data
... and a typo fix from a prior change.

This change clarifies local link information, by default is attempted
to be collected through introspection use, but also clarifies when
that might not work as expected, or when configuration may need to
be updated, and details the command to use to fix that information.

Change-Id: I4ab2d870858279892a0222b89e31cec80a72fa6b
2024-12-05 09:15:02 -08:00
Zuul
c44d30664b Merge "dedup reboot request in redfish bios path" 2024-12-05 08:25:26 +00:00
Zuul
e829e35907 Merge "Update Node Cache after Successful Clean/Service" 2024-12-05 02:42:03 +00:00
Doug Goldstein
cdf5e1f2e3
clean up lints for automated_steps doc plugin
Cleaned up lint warnings for the automated_steps sphinx doc plugin.
Removed unused imports. Fixed using .format() in a logging message.
Fixed using an ambiguous variable name. Fix line length.

Change-Id: Ic171103f7e7d21a08e330552f2588bf69ada4837
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2024-12-04 15:47:47 -06:00
Zuul
a5b95d56ab Merge "Task Manager: Log if the lock takes too long" 2024-12-04 18:58:46 +00:00
Zuul
100258d048 Merge "Neutron: account for disable_power_off" 2024-12-04 18:58:43 +00:00
Zuul
f9067cda06 Merge "Use OVN and OVS from OS packages in CI" 2024-12-04 18:40:50 +00:00
Iury Gregory Melo Ferreira
f6904d9783 Update Node Cache after Successful Clean/Service
This commits makes sure we call update_node_cache
after we finish a successful cleaning/servicing.

Change-Id: I62403120c758caac38a4d2b3912a9c43f65161cc
2024-12-04 12:23:06 -03:00
Julia Kreger
c980a6de4c docs: note ipv6 is a good idea with neutron interface
One caveat around dhcpv6 and network interfaces, is the binding logic
in the ``neutron`` network interface is able to generate multiple
dhcp addresses for use, where as the flat interface is not able to.

Change-Id: If89c618ec951f75b9b09d7218b8500fd43a0d381
2024-12-03 07:48:04 -08:00
Zuul
3421bb614a Merge "Allow setting of disable_power_off via API" 2024-12-02 12:25:06 +00:00
OpenStack Release Bot
bf8ec3f0ee reno: Update master for unmaintained/2023.1
Update the 2023.1 release notes configuration to build from
unmaintained/2023.1.

Change-Id: I31bb0ec208aa0f14c1294e764c78086d9bdd9260
2024-11-29 07:54:40 +00:00
cid
ab26fe5116 Trivial deprecation fixes.
Change-Id: Ie6bebb298be6d608502363456345bbbb95c9ad5c
2024-11-28 19:05:59 +01:00
Riccardo Pittau
a5af5ae5c3 Use OVN and OVS from OS packages in CI
In Ubuntu Noble OVN is at version 24.03 and Openvswitch at 3.3.0
Both versions are new enough that can be used instead of
recompiling from source.

Change-Id: I0d0a75944759e97d135341c18a3be9cb09202ddb
2024-11-28 14:43:21 +01:00
Derek Higgins
13f61e674e Allow setting of disable_power_off via API
Change-Id: I1555878ba847805fddaf0d7a2a4babe50acfa674
2024-11-28 12:06:23 +00:00
Zuul
9a2c8084c2 Merge "docs: final cleanup pass on networking" 2024-11-27 20:44:03 +00:00
Zuul
21648c4440 Merge "docs: rewrite ml2 and update physnet context" 2024-11-27 20:35:05 +00:00
Zuul
a0ee93c622 Merge "docs: change network setup steps into the commands" 2024-11-27 20:34:57 +00:00
Zuul
b99fdee73f Merge "Run metal3 integration job on ubuntu noble" 2024-11-27 09:56:34 +00:00
Sharpz7
93ad67a445 api: Add schema validation framework
This is effectively a carbon copy of the code from Nova, Manila, Cinder et
al but modified to work with pecan instead of Routes. We do not use all of
the new code yet, but we will in a future change.

Related-Bug: 2086121

Change-Id: I76c1600036c82ead436cd0fb7e7dee1e34e21907
Signed-off-by: Stephen Finucane <sfinucan@redhat.com>
2024-11-26 18:42:05 +00:00
Zuul
f087b3c8d6 Merge "Replace image_format_inspector with its oslo.utils version" 2024-11-25 21:01:46 +00:00
Zuul
e2aa23edb1 Merge "Agent deploy: account for disable_power_off" 2024-11-25 17:45:54 +00:00
Julia Kreger
62ce5ccaec docs: final cleanup pass on networking
Putting format/cleanup changes in one final patch
just to try and streamline everything together.

Change-Id: Ic55157380a1f4b440f4c278b378cf84d1d048984
2024-11-25 07:57:28 -08:00
Zuul
57319b7126 Merge "docs: begin making a general networking document" 2024-11-25 15:11:05 +00:00
Zuul
992d5c2c6f Merge "docs: add additional content for host clock skew" 2024-11-25 14:54:08 +00:00
Riccardo Pittau
59e6423977 Run metal3 integration job on ubuntu noble
The change https://github.com/metal3-io/metal3-dev-env/pull/1470
adds support for ubuntu 24.04 to metal3-dev-env.
We can now migrate the metal3 integration job to noble based node.

Change-Id: I7734c0bb2402a48f2247f5c8890c79c5e11a1e97
2024-11-25 14:58:41 +01:00
Zuul
261e66bbad Merge "api: Introduce new mechanism for API versioning" 2024-11-22 21:47:15 +00:00
Julia Kreger
1b6ab89e85 docs: rewrite ml2 and update physnet context
Change-Id: I6fd86c52e114f41d2f04a6cfccfd4072a369bd78
2024-11-22 11:51:00 -08:00
Julia Kreger
b12f28dd9c docs: change network setup steps into the commands
Update the docs so port creation/setting commands and their
flags are explicitly denoted instead of part of a weird setup/use
state the docs were in.

Change-Id: I32e010efaa34f90d3023a25e7900b048467e62fb
2024-11-22 11:45:37 -08:00
Zuul
fca9704edf Merge "First pass on some strucutral context setting for networking" 2024-11-22 19:45:20 +00:00
Julia Kreger
e02fa1591d docs: begin making a general networking document
Apparently we had most of our networking context in the multitenancy
document, leading to confusion and also a lacking background context
which is needed for users to understand mechanics.

These changes have been broken into several different changes
because the file is going to be drastically different once we
done clarifying the documentation.

Change-Id: I7fd76a00d9bb344453fc1b214f170113d73fe9bc
2024-11-22 11:42:39 -08:00
Zuul
9b8ede5e43 Merge "IPMI power: account for disable_power_off" 2024-11-22 13:01:41 +00:00
Zuul
4266e8638d Merge "Use quay.io registry image for metal3 job" 2024-11-22 00:08:29 +00:00
Zuul
736cfd3a81 Merge "Remove default override for config options policy_file" 2024-11-21 17:54:34 +00:00
Riccardo Pittau
f41504a41d Use quay.io registry image for metal3 job
As alternative to docker registry image.
This is to avoid issues related to dockerhub rate limits.

Change-Id: Ia0b543aaedc03d4030e0335236b9b336ef0ce355
2024-11-21 18:02:26 +01:00
Zuul
e57e3cb330 Merge "Inspection: account for disable_power_off" 2024-11-21 15:17:07 +00:00
Zuul
eb4d0ed430 Merge "Refactoring: simplify tear_down_agent" 2024-11-21 15:00:56 +00:00
Zuul
aa0697a0cf Merge "Disable deep image inspection for kernel/initramfs" 2024-11-21 01:05:47 +00:00
Julia Kreger
4fe0ad357c First pass on some strucutral context setting for networking
So the multitenancy docs are, in a weird sense, the primary
reference point for ironic networking documentation.

And in order for it to be digestable, we need to set some
appropriate context so the reader will understand what needs
to occur for use.

Change-Id: I0f8067d9b4db2bb057e60d723dff913afbc16027
2024-11-20 14:22:46 -08:00
Sharpz7
c49bd143f8 api: Introduce new mechanism for API versioning
...and apply it to our first controller, the controller for the
'/shards' API.

Rather than having a check inside the method or overriding
RestController._route, indicate the minimum (and potentially maximum API
version supported by a decorator. This is similar to what Nova et al do,
but without the descriptor protocol-derived hijinks. Doing things this
way allows us to attach metadata to the controller which can later be
inspected by a schema generator.

Later changes can add more API versions.

Related-Bug: 2086121

Change-Id: I9ccfe8240860d6300bbec5ae7d06f1dfc47f788c
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2024-11-20 19:47:27 +00:00
Jay Faulkner
360e21124c Use specific fix-commit from dnsmasq
I have requested a new release from dnsmasq here:
https://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/2024q4/017828.html
but until they perform one, we should at least checkout and build
a version of dnsmasq with this fix, instead of downgrading to one that
is slightly less broken.

Related-Bug: 2026757
Change-Id: I8abac5fa729035341c90d7881cb35aff751da101
2024-11-19 10:37:21 -08:00
Julia Kreger
757bf27cac
Task Manager: Log if the lock takes too long
In order to troubleshoot some of the locking issues, we need to
understand if we're getting held up on the start of the lock or
on the far end of the log upon completing the actual needful
work.

This change adds additional logging on the front end if it is
on the front end, and also sets the rpc object to None explicitly
before returning the update_node result, since it appears a stream
of them can cause issues for sqlite's release of the database from
one thread to another.

Change-Id: I8ef68ff62e8f93f7bc5bd9ee7c6ac8d96328f929
2024-11-18 17:41:32 -06:00
Zuul
4cbd353c5e Merge "trivial: remove libpq from bindep file" 2024-11-18 18:18:40 +00:00
Zuul
609ef91707 Merge "Fix policy checks added with runbooks" 2024-11-18 16:12:31 +00:00
Zuul
e13f593f37 Merge "Add support for Ubuntu 24.04" 2024-11-18 15:20:37 +00:00
Zuul
d43a93535a Merge "Fix genconfig: remove now-gone ironic_lib modules" 2024-11-15 18:59:21 +00:00
Jay Faulkner
e2fce4c0d5 Fix genconfig: remove now-gone ironic_lib modules
For oslo-config-generator, you have to list the external libraries that
provide configuration options so it knows to pull them in. Several of
the listed ironic_lib modules are no longer in that project causing
failures.

Change-Id: If270ac0701769a6ce8131816b1cb4921120bd7ab
2024-11-15 07:53:04 -08:00
Dmitry Tantsur
669304bc0c
Replace image_format_inspector with its oslo.utils version
Take into account that safety_check() now raises instead of returning
False. This also allows us to have reasonable log messages.

Account for the fact that the resulting format for raw conversion of
whole-disk images is "gpt". Add this value to the default permitted
formats.

Change-Id: I72fb4b94a2d3ce9dc8e66142e4e0fa2dd8c25845
2024-11-15 15:48:08 +01:00
Dmitry Tantsur
c43022c759
Disable deep image inspection for kernel/initramfs
The validator in oslo.utils fails on certain kernel images because it
considers them GPT images with an invalid boot partition. In the end,
these images are raw from our perspective, and should not be checked.

I'm marking the whole TFTPImageCache as not using validation.

Change-Id: Idac3a270e2a294a0a5df08ffe66817e05cb0bb76
2024-11-15 15:30:56 +01:00
Julia Kreger
bf644e8274 Fix policy checks added with runbooks
In the runbooks change, I43555ef72cb882adcada2ed875fda40eed0dd034,
new policies were added for a user sending a list of service steps
or clean steps to the API.

This was done with the generic check_policy helper, however the helper
does not understand how to populate the ``node`` mapping data to enable
RBAC rule value matching. Doing so requires a special node policy
checker method.

As such, the policy checker was changed, and additional tests were added.

One final note, strucutrally the new policies were being checked *after*
we stated to do state verification of the request. RBAC checks should be
performed upfront... which also eases the burden of testing the RBAC
model. Accordingly, the policy checks were moved together
in the provision state logic.

Closes-Bug: 2086823
Change-Id: I18c56cb4becf9e6181689ddc0f1c7433327a3aa6
2024-11-14 14:32:26 -08:00
Zuul
e0e43f6353 Merge "Remove postgresql testing and documentation" 2024-11-14 22:02:47 +00:00
Julia Kreger
e3953b845e trivial: remove libpq from bindep file
As noticed on If6e4432b000996789346a1f7449410cfc8497fe1
libpq is likely not needed in the jobs. As such, removing.

Change-Id: I16cdd1f84f8fe1bdb8fe08536ae2a7d7ef6a70a9
2024-11-14 13:06:48 -08:00
Zuul
ba6c1e5205 Merge "update doc and drop deprecated plugin" 2024-11-14 19:35:58 +00:00
Dmitry Tantsur
a0dddb19a6
Agent deploy: account for disable_power_off
* In tear_down_agent: lock down the agent and keep the node powered on.
* In boot_instance: reboot the node instead of powering it on.
* In tear_down_inband_cleaning/service: avoid powering off the node.
* In tear_down_service: lock down the agent before tearing down.
* In tear_down and clean_up: do not power off, reboot after clean-up.
* In rescue/unrescue: use one reboot instead of power off/on.

Not locking down in tear_down_inband_cleaning because the node will not
end up on a tenant network (and lockdown may disrupt fast-track).

Depends-On: https://review.opendev.org/c/openstack/ironic-python-agent/+/934234
Partial-Bug: #2077432
Change-Id: Ib2297ec5b69df6b2ecd11942fb8fdc9d640de6bc
2024-11-14 15:32:53 +01:00
Dmitry Tantsur
26966bb15a
Neutron: account for disable_power_off
Disallow using disable_power_off with the neutron network interface by
default and add an option to allow it.

Change-Id: Ie5e3f82422514a13610fd15025b52c35f55b2eac
2024-11-13 15:28:19 +01:00
Dmitry Tantsur
80c83d82f2
Refactoring: simplify tear_down_agent
Split away the soft power off code to make the function simpler for
future additions related to disable_power_off.

Also fix incorrect interpolation in the adjacent log message.

Change-Id: Ifd091b10dd42f68ad8951a5fce79aee691fc77f8
2024-11-13 12:57:59 +01:00
Dmitry Tantsur
91b7a46214
Inspection: account for disable_power_off
Changes the logic when starting and finishing inspection to avoid using
the power off call (reboot is used instead).

Change-Id: I03134b30c819a62f7a289fbcc62dda49540e9d9f
2024-11-13 12:48:36 +01:00
Zuul
dcbe0e882e Merge "bump some pre-commit hooks and remove default cfg" 2024-11-12 23:26:33 +00:00
Jay Faulkner
466cd3902c Remove postgresql testing and documentation
Ironic has maintained a CI job for years after postresql support was
deprecated in order to prevent unintentional breakage of that support.
Now, we have confirmed evidence that other openstack components, such as
keystone, required for testing this postgresql support no longer
function in this job.

As a result, ironic can no longer test postgresql support. Operators
utilizing postgresql who have not yet migrated must migrate now.

Change-Id: If6e4432b000996789346a1f7449410cfc8497fe1
2024-11-12 14:41:04 -08:00
Julia Kreger
f53ccb647f
Handle Power On/Off for child node cases
So, there are cases where say you may have multiple DPUs in a
physical server, each card when fully operating can consume 100-150
watts. In some cases, these cards can have external power supplies,
but need the physical host in a running power-on state in order for
the device to be powered on.

Conversely, we also now power off the child nodes if the parent
node has been requested to be powered off, since we *really* don't
want cause inadvertent harm to the child node.

This is realistically a fix we should backport once we sort
through the details, if we agree this makes sense to do, as is.

Change-Id: Ib2bfe04cdaa82264ba8bb1e71477899bb6268179
2024-11-12 11:27:52 -06:00
Riccardo Pittau
e7fc5c93ab Add support for Ubuntu 24.04
Depends-On: I699d26d44e2cb8b40f3f87557762c696ea9a7ac8
Change-Id: I61e5cf4dbf81b5914fd9b7922e62721e45fed658
2024-11-12 12:39:45 +01:00
likui
8de2b49502 update doc and drop deprecated plugin
panko was deprecated, also the whole TripleO project was deprecated
and its master is no longer maintained.

[0] https://review.opendev.org/c/openstack/governance/+/850005

Change-Id: Ib370a84faf1b3b289142e350145f68f59a2235e0
2024-11-11 23:21:31 +00:00
Takashi Kajinami
0a526482e2 Skip functional tests on pre-commit config update
This file has no functional impact and is not used in any tests so
far.

Change-Id: I7997d74398e77d485a9f5882791e2368f122c4a5
2024-11-12 00:55:43 +09:00
Ghanshyam Mann
cde358bdac Remove default override for config options policy_file
olso.policy 4.5.0[1] changed the config options policy_file
default value to 'policy.yaml', which means it is changed
for all the OpenStack services and they do not need to
override the default anymore.

NOTE: There is no change in behaviour here, oslo.policy provides
the same configuration that services have overridden till now.

[1] https://review.opendev.org/c/openstack/releases/+/934012
[2] https://review.opendev.org/c/openstack/requirements/+/934295

Change-Id: I98be6739dcdc3203effb2c21f13c6f71332f1813
2024-11-10 21:37:55 -08:00
Zuul
feb7740009 Merge "devstack - enable v6 addr list if q-dhcp enabled" 2024-11-10 05:37:35 +00:00
Zuul
2c7ed62e9a Merge "Instance provisioning fails on SQLite" 2024-11-10 05:37:31 +00:00
Doug Goldstein
5cf5f6f275
bump some pre-commit hooks and remove default cfg
Removed default config options while bumping the versions of some
pre-commit hooks. Moved the configuration of doc8 to pyproject.toml to
hopefully consolidate everything in one place. Enable codespell hook to
correct the spelling for users.

Change-Id: I76933b52ed8009f5e97c382b82dd786adf3a5444
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2024-11-09 12:25:48 -05:00
Zuul
488bc76cab Merge "add pyproject.toml to support pip 23.1" 2024-11-09 04:17:33 +00:00
Zuul
b2f47d4428 Merge "trivial: Fix policy scope restriction for automated cleaning" 2024-11-09 00:56:31 +00:00
Zuul
63c911be45 Merge "Use linux instead of linuxefi in grub config" 2024-11-08 16:44:49 +00:00
Zuul
d564c4ceb0 Merge "Redfish power: account for disable_power_off" 2024-11-08 16:27:39 +00:00
Zuul
c35db0127c Merge "Actually ignore [inspector]power_off with fast track" 2024-11-08 12:10:24 +00:00
Doug Goldstein
f13ae500c5
dedup reboot request in redfish bios path
Deduplicate the way to flag that a reboot is requested after a BIOS
reset or BIOS settings change. This makes it easier to have a periodic
timer poll the status in the future.

Change-Id: I44a4008b75139494aa36d8b01e8c9c86bbcdf494
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2024-11-07 10:11:13 -06:00
Zuul
d815291294 Merge "Migrate lint to pre-commit" 2024-11-07 13:07:34 +00:00
Riccardo Pittau
27bd049257 Use linux instead of linuxefi in grub config
The EFI handover protocol has been deprecated since a while
and recently moved to be optional and enabled by default [1].
As a consequence, the linuxefi and initrdefi binaries that
were specifically compiled to use that option, are
also deprecated and they have been removed in most of
the recent linux distributions in favor of the generic
linux and initrd that are now compatible with UEFI boot.
This patch changes linuxefi to linux and initrdefi to
initrd in all the grub templates, using the generic
entries for all the platform architectures.

[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cc3fdda2876e58a7e83e558ab51853cf106afb6a

Closes-Bug: #2081305
Change-Id: Ie5b2265d7afc8b71fabfca6ca6687e0e34ce3b5b
2024-11-07 09:40:35 +01:00
Doug Goldstein
2cb56f8b99
add qemu-img to necessary dependency list
The unittests want qemu-img available now so add that as a dependency
that users need to install before running the tests.

Change-Id: I2169988c653088115c7b388113b5e76e721e2429
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2024-11-06 11:51:57 -06:00
LALLAU Bertrand
6af6d10ab3 Instance provisioning fails on SQLite
The following error occurs when using SQLite:
oslo_config.cfg.NoSuchOptError: no such option hostname in group [DEFAULT]

`hostname` is not defined in [DEFAULT] group, use `host` instead.

Closes-Bug: #2086682
Change-Id: Ic93b5d7c6ea27a3c47daa6b2c6671aaa401b5427
2024-11-05 18:54:41 +00:00
Dmitry Tantsur
4f40ddef26
Actually ignore [inspector]power_off with fast track
The option's help says that the option is ignored when fast track is on,
but in reality it only happens with the legacy inspection.

The clean-up logic diverges between the two inspection implementation,
so change the new implementation to reuse the old clean-up code.

Add a few missing unit tests.

Change-Id: I2e84aa285b5673bcc911d35439ba80a739460f59
2024-11-05 16:41:08 +01:00
Jay Faulkner
6008d31f2f
add pyproject.toml to support pip 23.1
pip 23.1 removed the "setup.py install" fallback for projects
that do not have pyproject.toml and now uses a pyproject.toml
which is vendored in pip.
To address that, this change adds the minimal pyproject.toml
to enable pbr to be properly used to build editable wheels.

This is required to support installing devstack on
centos stream 9 and related distros with GLOBAL_VENV=True
Without this change the wsgi scripts are not generated in
editable mode. i.e. pip install -e /opt/stack/keystone

See https://pip.pypa.io/en/stable/news/#v23-1
and https://github.com/pypa/pip/issues/8368 for more
details on the removal of the fallback support.

setuptools v64.0.0 is used to support editable installs
via its PEP-660 implmentation
https://github.com/pypa/setuptools/pull/3488

This patch was taken nearly verbatim from the equivalent nova change.

Co-Authored-By: Sean Mooney <work@seanmooney.info>
Change-Id: I34888e8f87b4a3ab09546ba58ef5f2cf495bc7e3
2024-11-05 08:00:24 -06:00
Riccardo Pittau
166e317945 Check for AMD virtualization support
As we do for Intel vmx we shold also check for AMD svm support
before dropping to tinyipa.

Change-Id: I8507db1bf99631b1076fa5db7ddc6bc3fb7e8083
2024-11-05 11:27:48 +01:00
Zuul
6f4e679c4c Merge "Fix lint issues with documentation" 2024-11-05 08:27:15 +00:00
Julia Kreger
ffecec3c55 trivial: Fix policy scope restriction for automated cleaning
By default, the decision if to clean is a "system" decision,
and not necessarilly a "user" or "operator" decision. However
some operators may choose to have custom policies to enable
specific tenants to have additional rights without granting
special system scoped users.

This change just changes the labeling on the default rule to
permit it to match a project scoped user while leaving the
default rule in place. This slightly changes the resulting
error, but doesn't change the error code, and enables operators
to run with custom rules for this entry.

Change-Id: Ie963abcbff079664b8407499c3e943ad3fd8f315
2024-11-04 09:19:32 -08:00
Zuul
21d6133fa1 Merge "Remove trailing whitespace" 2024-11-04 11:11:48 +00:00
Zuul
dac825a187 Merge "Correct duplicated names/entries in unit tests" 2024-11-04 10:04:19 +00:00
Zuul
20f7e5a517 Merge "CI: Change 4k block device job to use LVM" 2024-10-31 18:59:06 +00:00
Zuul
312fed31d7 Merge "Added missing fields in API Ref" 2024-10-31 16:36:44 +00:00
Sharpz7
8466ba7c2b Added missing fields in API Ref
Change-Id: Ia2de52368d7f7967b0cb62cf433883490feebd6b
2024-10-30 22:11:28 +00:00
Zuul
8ba066b33c Merge "Enable WSGI module entrypoint for Ironic" 2024-10-30 18:16:11 +00:00
Jay Faulkner
80c8b9f3fc Migrate lint to pre-commit
Migrate all existing linters to pre-commit. This consolodates our bandit
and codespell job into the general pep8 job.

Change-Id: I6b40a3338d98fab500e22918b6bd5b8bff2106fd
2024-10-29 14:59:33 -07:00
Jay Faulkner
f6191f2969 Fix lint issues with documentation
The doc8 linter found several syntax problems in our docs; primarily a
large number of places we used single-backticks to surround something
when we should've used double-backticks.

This is frontrunning a change that will add these checks to CI.

Change-Id: Ib23b5728c072f2008cb3b19e9fb7192ee5d82413
2024-10-29 14:59:28 -07:00
Jay Faulkner
045249f60d Remove trailing whitespace
Trailing whitespace is soon to be caught by the global pre-commit
linter changes. This fixes this issue in anticipation of that lint.

Change-Id: I48597afde4c55775ccca56f927c30ca4f3465523
2024-10-29 14:55:44 -07:00
Jay Faulkner
95ae183dc4 Correct duplicated names/entries in unit tests
There were several duplicated entries. Where they appeared
actually-different, I changed the name. Where they appeared identical, I
deleted the duplicate.

These will be linted in the future once we switch to pre-commit.

Change-Id: I880dc6b6de593c12e5ac026edfbe95258e87bcde
2024-10-29 14:55:44 -07:00
Jay Faulkner
a72aad5354 Make all API samples valid JSON
As part of the migration to pre-commit for CI, we will begin linting
JSON files in the repo. These were all invalid JSON and are being
updated in anticipation of that update.

Change-Id: Ib6c7581fb20211d2b7134f506286c73e5c2cd6bb
2024-10-29 14:55:44 -07:00
Zuul
e8d29df979 Merge "Gracefully handle bad request exception" 2024-10-28 13:20:35 +00:00
Zuul
660c588dcb Merge "Expand detected strings in check_cipher_suite_errors" 2024-10-25 16:14:38 +00:00
Zuul
07465858f5 Merge "docs: adds link to oslo_messaging_notifications documentation" 2024-10-25 15:15:46 +00:00
Jay Faulkner
3db454f0ea Enable WSGI module entrypoint for Ironic
This adds a wsgi entrypoint module which can be used with a wsgi runner,
such as uwsgi, to launch Ironic API processes without the need of a
separate script.

The legacy WSGI script is currently being installed by PBR, and as part
of the migration to a pyproject.yaml-compatible PBR, we cannot use the
wsgi-scripts plugin anymore, and will be removing the script installed
by it in a future Ironic release.

The new WSGI script, because it has statements at the module top-level,
cannot be autodocumented; we now exclude it.

Also we don't treat all warnings as errors in pdf docs builds to allow
the use of mock autosummary, starting with including the wsgi module.

Co-Authored-By: Doug Goldstein <cardoe@cardoe.com>
Change-Id: I584ac6a25c4e6cd9744a609b50d12b434a930dc6
2024-10-25 16:57:05 +02:00
Zuul
81fa3c0729 Merge "Remove Python 3.8 support" 2024-10-24 18:19:00 +00:00
Zuul
f76b006b3f Merge "Add support for node name in port creation" 2024-10-24 18:18:56 +00:00
Julia Kreger
fde2cd608e CI: Change 4k block device job to use LVM
An interesting, and frustrating aspect of 4k block devices is that the math begins
to be impacted across the whole of the useage of the device.
Specifically the LVM block spacing also begins to be thrown
"out of alignment" which changes user calculations.

Most users doing smaller allocations likely won't matter, but users doing
thin volumes or filling the percentage of the remaining usable volume, also then
break.

So realistically, the best path to ensure we have appropriate 4k device testing,
and our dependent tooling in diskimage-builder is also getting tested, is to run
the more complex case in our CI job.

This change is dependent upon two other changes which are under review.

Change-Id: I5b23403c783fa84b4158708741524c3dc9a92722
2024-10-24 10:56:31 -07:00
Takashi Kajinami
6bbfa45e1e Remove Python 3.8 support
Python 3.8 was removed from the tested runtimes for 2024.2[1] and has
not been tested since then.

Also add Python 3.12 which is part of the tested runtimes for 2025.1.
Now unit tests job with Python 3.12 is voting.

[1] https://governance.openstack.org/tc/reference/runtimes/2024.2.html

Change-Id: I706c8b22fbf29e057942990a1004a42763594746
2024-10-24 18:13:34 +09:00
Nicholas Kuechler
48b2d856a5 docs: adds link to oslo_messaging_notifications documentation
Change-Id: I1bf907247559c9945def34dc1b7fccb634324636
2024-10-23 09:51:43 -05:00
cid
da002a341c Add support for node name in port creation
Add support for creating ports using either node UUID or node name.

Closes-Bug: #1439901
Change-Id: I215619648bbe7aa1152e0f117971bece74ffe1fe
2024-10-23 11:43:10 +01:00
Pavlo Shchelokovskyy
80540bb52d Expand detected strings in check_cipher_suite_errors
we see some slightly different errors returned in the wild
for some HW.

Change-Id: Ic822c8283600b658ba5ff7bc007cb95352d82a86
Related-Bug: #2085137
2024-10-22 23:14:41 +03:00
Zuul
1f740c8a90 Merge "docs: Updates redfish metrics docs with required configuration file settings" 2024-10-22 18:49:03 +00:00
Zuul
100f9b6829 Merge "Enable GLOBAL_VENV in ironic grenade jobs" 2024-10-22 18:48:58 +00:00
cid
c09525dd81 Gracefully handle bad request exception
Closes-Bug: #1619235
Change-Id: I156ba389e437c49ae75411cfbf0e29bcd54733bc
2024-10-22 13:01:31 +01:00
Zuul
fd51cead30 Merge "Added Localdev Docs on changing microversion" 2024-10-21 23:28:19 +00:00
Sharpz7
823a7c93bd Added Localdev Docs on changing microversion
Added some documentaition that details how to change the ironic localdev microversion for testing purposes.

Rendered View: https://files.mcaq.me/944ch.png

Change-Id: I1e21a12ad1413046a41f856ddf229e399f82523a
2024-10-21 22:27:01 +00:00
Ghanshyam Mann
7b807eff73 Enable GLOBAL_VENV in ironic grenade jobs
grenade by default enable GLOBAL_VENV which means it
install and run everything from virtual env

- https://review.opendev.org/c/openstack/grenade/+/930507

We faced the error in ironic grenade scripts in virtual env
so GLOBAL_VENV was disabled explicitly. This fixing the scripts
and enable GLOBAL_VENV in ironic jobs also.

Change-Id: I48ee1dd4adc2e5bcc18c5f116d979e7524248495
2024-10-17 14:48:11 -07:00
Zuul
45ee7dc365 Merge "CI: Add a 4k disk CI job" 2024-10-17 15:37:45 +00:00
Dmitry Tantsur
d295c3e154
IPMI power: account for disable_power_off
Change-Id: Iaf338a63b53d78478782f5e8ead33deb5d1f8468
2024-10-17 17:12:40 +02:00
Zuul
69a788ab55 Merge "devstack: Remove IRONIC_USE_WSGI" 2024-10-17 14:07:58 +00:00
Dmitry Tantsur
599fb4b64a
Redfish power: account for disable_power_off
Change-Id: I7ba8ec97a59623081af45248ae688d0d7d3d1f70
2024-10-17 15:58:14 +02:00
Zuul
0d07ad03d8 Merge "devstack: Remove IRONIC_USE_MOD_WSGI" 2024-10-17 13:28:13 +00:00
Nicholas Kuechler
ae4d5b5c49 docs: Updates redfish metrics docs with required configuration file settings
Change-Id: Ide7c245e017a92519e17ed1fb62c7fc986a1ae6a
2024-10-16 15:29:37 -05:00
Stephen Finucane
05ccd2c323 devstack: Remove IRONIC_USE_WSGI
No jobs are setting this, nor have any set it in some time. Remove it.

Change-Id: I38a092de125e382607d89d8e5a3b85db809a6d61
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2024-10-16 11:48:06 +01:00
Stephen Finucane
fd9e8b9455 devstack: Remove IRONIC_USE_MOD_WSGI
Nothing is setting this anymore, making this a layer of indirection
we do not need. Remove it.

Change-Id: Iba3674536ee98ba4d2d0cb5ffb0ec52e5286b7e7
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
2024-10-16 11:16:49 +01:00
Ghanshyam Mann
5f58cbf22d Continue disable the GLOBAL_VENV in grenade job
Grenade is moving to virtual env by default
- https://review.opendev.org/c/openstack/grenade/+/930507

and ironic job is failing on virtual env
- https://zuul.opendev.org/t/openstack/build/f5c4aa3dd64047a1909c4a964ad89aa8/log/controller/logs/grenade.sh_log.txt#15028

Until ironic greande job is ready for virtual env,
let's continue disable it in ironic side.

Change-Id: Ia76054c7b977dd17778dc4c89e8e212ab22f51af
2024-10-15 22:02:35 -07:00
Zuul
c80b8bfdb2 Merge "Reject explicit requests to power off nodes with disable_power_off" 2024-10-14 14:36:00 +00:00
Zuul
6e078cdb6b Merge "Add disable_power_off field to the node model" 2024-10-11 21:26:21 +00:00
Zuul
a47cb572d6 Merge "docs: Add context around asynchronous device initialization" 2024-10-09 15:37:01 +00:00
Zuul
181d721057 Merge "Fix actual size calculation for storage fallback logic" 2024-10-08 15:53:56 +00:00
Zuul
fca4843295 Merge "Add timeout to SERVICEWAIT" 2024-10-08 15:53:54 +00:00
Julia Kreger
ac31720ac1
docs: Add context around asynchronous device initialization
Centos Stream and ultimately RHEL have switched to asynchronous
device initialization, which impacts root device hints and their
usability on those systems, in large part because context which
people have traditionally had, no longer holds true on those newer
kernels.

This doc update attempts to provide the needful context to guide
operators to the best possible outcome given the distribution changes.

Change-Id: I541086cfe235b10f1f1dba95fad95022a22f9ce7
2024-10-07 07:13:26 -05:00
Takashi Kajinami
1f5798bced Use oslo.utils implementation to parse server address
... so that the address can be properly parsed even when IPv6 address
is used.

Change-Id: Ic3e043e9272518f73252ea9a8f0524ed092204b9
2024-10-06 00:58:41 +09:00
Zuul
462f86889b Merge "Checksum files before raw conversion" 2024-10-03 17:58:06 +00:00
Julia Kreger
00c5e0faf8 Checksum files before raw conversion
While working another issue, we discovered that support added to
the ironic-conductor process combined the image_download_source
option of "local" with the "force_raw" option resulted in a case
where Ironic had no concept to checksum the files *before* the
conductor process triggered an image format conversion and
then records new checksum values.

In essence, this opened the user requested image file to be
suspetible to a theoretical man-in-the-middle attack OR
the remote server replacing the content with an unknown file,
such as a new major version.

The is at odds with Ironic's security model where we do want to
ensure the end user of ironic is asserting a known checksum for
the image artifact they are deploying, so they are aware of the
present state. Due to the risk, we chose to raise this as a CVE,
as infrastructure operators should likely apply this patch.

As a note, if your *not* forcing all images to be raw format
through the conductor, then this issue is likely not a major
issue for you, but you should still apply the patch.

This is being tracked as CVE-2024-47211.

Closes-Bug: 2076289
Change-Id: Id6185b317aa6e4f4363ee49f77e688701995323a
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2024-10-03 15:06:07 +00:00
Julia Kreger
90f9fa3eb0 Fix actual size calculation for storage fallback logic
When we were fixing the qemu-img related CVE, in our rush we didn't
realize that the logic for storage sizing, which only falls back to
actual size didn't match the prior interface exactly. Instead of
disk_size, we have actual_size on the format inspector.

This was not discovered because all of the code handling that side
of the unit tests were mocked.

Anyhow, easy fix.

Closes-Bug: 2083520
Change-Id: Ic4390d578f564f245d7fb4013f2ba5531aee9ea9
2024-10-03 06:53:30 -07:00
Julia Kreger
0d7fd73919 CI: Add a 4k disk CI job
Add a CI job to leverage a 4k logical block disk image which is
deployed to the remote system to ensure the build pipeline and
code to naviate 4k disk images is in working order.

Change-Id: If7aee654f9282b33ea489558f45f45cfed86e9d1
2024-10-02 14:25:19 -07:00
OpenStack Proposal Bot
083ea91abf Imported Translations from Zanata
For more information about this automatic import see:
https://docs.openstack.org/i18n/latest/reviewing-translation-import.html

Change-Id: I9f3d07f56e24d359e8e9055faf4613af3ce41c0f
2024-10-02 04:09:53 +00:00
Dmitry Tantsur
f92258e767
Reject explicit requests to power off nodes with disable_power_off
Checks are added to three places:
1) Power state change API
2) Power sync loop in the conductor
3) The common node_power_action call

Partial-Bug: #2077432
Change-Id: Ifcc539b32022870bf8e96aa17fdeb2d111d2a393
2024-09-27 16:43:37 +02:00
Zuul
be33fcf38b Merge "Drop logic for pysnmp < 5" 2024-09-27 13:05:38 +00:00
Dmitry Tantsur
b1e38a45c4
Add disable_power_off field to the node model
No actual logic behind it and not exposed in the API yet.

Partial-Bug: #2077432
Change-Id: Ibf1f51ab4fc62c081bbaf487aa31018d340e45e8
2024-09-27 13:47:35 +02:00
Zuul
e25cff9621 Merge "Firmware Update via Firmware Interface Docs" 2024-09-27 09:02:52 +00:00
Zuul
6f6ae12948 Merge "doc: Promote built-in introspection from experimental" 2024-09-27 09:02:49 +00:00
Zuul
b430d3ed67 Merge "[doc] Add instructions on making big fake-BM nodes" 2024-09-27 09:02:47 +00:00
Zuul
bae9c25a75 Merge "CI: Enable the ability to have test VMs with different block sizes" 2024-09-27 09:02:44 +00:00
OpenStack Proposal Bot
aac5fa28e6 Imported Translations from Zanata
For more information about this automatic import see:
https://docs.openstack.org/i18n/latest/reviewing-translation-import.html

Change-Id: Ie2be0e7ccb1e881c2a2a6b46fd9f83d565d9bf7d
2024-09-27 03:28:43 +00:00
Takashi Kajinami
46f1962ea1 Drop logic for pysnmp < 5
According to the driver-requirements.txt, nironic requires pysnmp >= 5
now, so this logic is just useless.

Change-Id: Iea843689ebf04fa0539c0ff2c783c18131646dff
2024-09-27 11:36:30 +09:00
Julia Kreger
6f1c603b5b CI: Enable the ability to have test VMs with different block sizes
Recently we became aware that some operators might need a larger
block size, but our CI testing doesn't represent any ability to
assert a different block size.

We can now assert a block size override in the scripting which
allows us to create a CI job.

Change-Id: I8470fb5b2827226dc155938a94c3a2cbe98912b5
2024-09-26 15:21:46 -07:00
Zuul
9550eca761 Merge "Refactoring: get rid of AgentDeployMixin" 2024-09-25 11:03:14 +00:00
Zuul
c8b5619714 Merge "Fix double transition to INSPECTFAIL on aborting in-band inspection" 2024-09-25 10:45:18 +00:00
Dmitry Tantsur
1a0de72470
Add timeout to SERVICEWAIT
Change-Id: I11ae8fc3273107b9e6713166fb077f00e2dcef7e
2024-09-25 11:51:04 +02:00
Zuul
05cc53f0df Merge "Move the benchmark job to the experimental pipeline" 2024-09-24 23:14:58 +00:00
Zuul
9fe510a14a Merge "Fix inspect interface for redfish driver in the docs" 2024-09-24 12:49:08 +00:00
Iury Gregory Melo Ferreira
82b67aa36c Firmware Update via Firmware Interface Docs
This patch adds some initial documentation
for the update step available via
the redfish firmware interface.

Change-Id: I4a70e2e78d725fd96a2ddd116c6d6e0d9c3b9639
2024-09-24 08:12:16 -03:00
Mahnoor Asghar
adfb091695 Fix inspect interface for redfish driver in the docs
Change-Id: If8d833bc5b012a17588aa7e3ebcb143bba12de12
2024-09-24 07:08:18 -04:00
Dmitry Tantsur
8a6b5eb8c3
Fix double transition to INSPECTFAIL on aborting in-band inspection
Both the driver and the conductor code try to transition the node to
INSPECTFAIL, with the 2nd attempt failing. Rework the driver code to
only do implementation-specific clean-up. Also safeguard the conductor
code against this case.

Change-Id: Ie1c64b4807ecf29fa0da54501798d363675977c8
2024-09-24 10:39:40 +02:00
Zuul
75927a8673 Merge "doc/source/admin fixes part-1" 2024-09-24 07:44:03 +00:00
Dmitry Tantsur
4724eb9d6f
Refactoring: get rid of AgentDeployMixin
Its existence is probably a legacy of the iSCSI deploy times. Currently,
we have 4 different base classes/mixins in agent_base, which is
confusing even for a long-term contributor like me. AgentDeployMixin is
only used in CustomAgentDeploy, so it makes sense to get rid of it to
simplify the code navigation.

All deploy steps are moved to CustomAgentDeploy. Two two helper methods,
prepare_instance_to_boot and configure_local_boot are only used in
AgentDeploy, so moving them there.

Change-Id: Ib670571eb511d2f2e724ecfab1d2abb1ab471346
2024-09-23 17:22:58 +02:00
Zuul
04dc10331b Merge "Imported Translations from Zanata" 2024-09-23 15:07:33 +00:00
Zuul
c84aee5608 Merge "Fix typo in parameter description" 2024-09-23 15:07:30 +00:00
OpenStack Proposal Bot
c2ed9296f5 Imported Translations from Zanata
For more information about this automatic import see:
https://docs.openstack.org/i18n/latest/reviewing-translation-import.html

Change-Id: I4126f8c0edfa759dea7e5dad54e520f579b94a45
2024-09-22 03:19:40 +00:00
Takashi Kajinami
c53ed07155 Fix typo in parameter description
Trivial-Fix

Change-Id: I3334823fbb614192771a77d3123aa9cf2546e5a1
2024-09-21 23:10:09 +09:00
OpenStack Release Bot
fd2572f463 Update master for stable/2024.2
Add file to the reno documentation build to show release notes for
stable/2024.2.

Use pbr instruction to increment the minor version number
automatically so that master versions are higher than the versions on
stable/2024.2.

Sem-Ver: feature
Change-Id: I96466f75eab2af275b1c903f1b5f3151f539e34e
2024-09-20 13:53:38 +00:00
Takashi Kajinami
533e1ad609 doc: Promote built-in introspection from experimental
The feature is no longer considered experimental. Remove a few warnings
and wordings to reflect the current state.

Change-Id: I1a3dcb54e3a948aa9fc6f59d67f72de51df20e84
2024-09-19 23:23:29 +09:00
Julia Kreger
5857ca0cd5 Update release mappings
Change-Id: I34ebd75faa4129732b5018af9801721ed992c16d
2024-09-18 11:45:04 -07:00
Zuul
5e7143c052 Merge "Drop SQLALCHEMY_WARN_20" 2024-09-18 16:59:22 +00:00
Zuul
4ca6a3b573 Merge "Add microversion headers to root ('/') endpoint" 2024-09-18 16:59:19 +00:00
Julia Kreger
f082c24d2a Add Prelude for end of cycle release
Change-Id: Ia32cfc52eef5c2693c307d2eec6289e41af6b278
2024-09-16 21:49:22 +00:00
Zuul
17b162e14e Merge "Bring back the metal3-integration job" 2024-09-16 16:37:23 +00:00
Zuul
3028de6ba0 Merge "Remove skip check for Python 3.6" 2024-09-16 16:11:15 +00:00
Zuul
c6523c521c Merge "CI: Remove scope enforced ci jobs" 2024-09-16 16:11:11 +00:00
Zuul
513198819a Merge "Make sure qemu-img command is available in debian/suse" 2024-09-16 16:09:21 +00:00
Zuul
67c9b5e554 Merge "Remove default override for RBAC config options" 2024-09-16 15:24:14 +00:00
Takashi Kajinami
eb27c6e219 Drop SQLALCHEMY_WARN_20
This environment was used by SQLAlchemy 1.4 and is no longer necessary
since SQLAlchemy was bumped to 2.0 .

Change-Id: I0e01f61529b633251f99d5a1a3e00ffca6c8837f
2024-09-16 06:25:25 +00:00
Muhammad Ahmad
7e85b3ed4d doc/source/admin fixes part-1
This a continuation to the efforts to ensure that the documentation is free from typos and grammatical mistakes so that the reader is not confused. Includes fixes for some of the documentation in doc/source/admin/*

Change-Id: I9ff40f1982ffad86a41e44395b6bee3a8dbfe43a
2024-09-15 10:33:49 +00:00
Zuul
7cddefd609 Merge "Drop description for ZeroMQ" 2024-09-13 14:33:31 +00:00
Dmitry Tantsur
a8c3beaca6
Bring back the metal3-integration job
Change-Id: I77516938a1322ba5016e478266a5e6292e4c7daa
2024-09-13 16:00:22 +02:00
cid
b19507d647 Add microversion headers to root ('/') endpoint
Adds microversion headers to the root endpoint so the '/' and '/v1'
endpoints consistently include microversion headers.

Closes-Bug: #2079023
Change-Id: Iea78b33e04e256c1139dd46a25f6d6a2be8e1ccc
2024-09-13 14:36:35 +01:00
Takashi Kajinami
1c201f0947 Make sure qemu-img command is available in debian/suse
The qemu-img command is required not only in Red Hat family but in
the other families such as Ubuntu, Debian or OpenSUSE.

Ensure the command is installed by bindep.

Change-Id: I94960fc644e2b8524d14633960a88a71437f0618
2024-09-13 22:11:27 +09:00
Takashi Kajinami
771cee4640 Drop description for ZeroMQ
ZeroMQ support by oslo.messaging was removed during Stein cycle so
the description is no longer useful.

Change-Id: I7f3fddc49d97195fc18fd2df41a9c505745e43db
2024-09-13 15:18:16 +09:00
Dmitry Tantsur
d44a658836
Remove legacy Query support from _paginate_query
It relies on risky stuff like nested read transactions, which are known
to be problematic on SQLite.

Change-Id: I61a885c0cb7555919279b3e21e872752dcffc64b
2024-09-12 19:59:58 -05:00
Zuul
960b7ba393 Merge "Set node "alive" when inspection finished" 2024-09-12 16:46:39 +00:00
Dmitry Tantsur
4fea3575c6 Fix inspection if bmc_address or bmc_v6address is None
IPA started sending None when the device is not found.

Change-Id: Ibeef33ff9a0acdb7c605bc46ef9e5d203c7aaa6d
2024-09-12 08:36:24 +00:00
Dmitry Tantsur
510f87a033
Try limiting MTU to at least 1280
Temporary make metal3-integration non-voting until we merge the fix for
regression https://review.opendev.org/c/openstack/ironic/+/928885.

Change-Id: If8f9907df62019b3cf6d6df7d83d5ff421f6be65
2024-09-12 10:35:40 +02:00
Dmitry Tantsur
341ddfe757
Move the benchmark job to the experimental pipeline
It's useful, but nobody is looking at it anyway. While I'm going to try
fixing it, running it every time is a waste of resources.

Change-Id: I794e1975f27f4a643b56dc81db8358700a71b8bd
2024-09-11 12:53:30 +02:00
Zuul
072619978e Merge "Deduplicate and remove invalid information for steps" 2024-09-10 14:31:36 +00:00
Zuul
d41a1c6f72 Merge "Support Automatic Lessee from instance metadata" 2024-09-05 23:49:48 +00:00
Ghanshyam Mann
3f6507d851 Remove default override for RBAC config options
RBAC config options enforce_scope and enforce_new_defaults
were disabled by default in oslo.policy and Ironic had to override
the default value to enable those by default. Now oslo.policy
(4.4.0 onwards[1]) changed the default values[2][3] and enabled
by default for all the services. OpenStack service does not need
to override the default anymore.

NOTE: There is no change in behaviour here, oslo.policy provides the
same configuration that Ironic has overridden till now.

[1] https://review.opendev.org/c/openstack/releases/+/925032
[2] https://review.opendev.org/c/openstack/oslo.policy/+/924283
[3] https://review.opendev.org/c/openstack/requirements/+/925464

Change-Id: I280ae374048b16f1d27a55b09a4d7729de43f469
2024-09-05 12:46:12 -07:00
Julia Kreger
94fcae5e1a CI: Remove scope enforced ci jobs
The default has changed for oslo.policy, no need for us to do
explicit enabled testing overall. As such removing.

Change-Id: I2d91a0c219bd3a2d59cad2775cde5aab46130921
2024-09-04 17:32:22 -07:00
Julia Kreger
c996aafa6d CVE-2024-44982: Harden all image handling and conversion code
It was recently learned by the OpenStack community that running qemu-img
on untrusted images without a format pre-specified can present a
security risk. Furthermore, some of these specific image formats have
inherently unsafe features. This is rooted in how qemu-img operates
where all image drivers are loaded and attempt to evaluate the input data.
This can result in several different vectors which this patch works to
close.

This change imports the qemu-img handling code from Ironic-Lib into
Ironic, and image format inspection code, which has been developed by
the wider community to validate general safety of images before converting
them for use in a deployment.

This patch contains functional changes related to the hardening of these
calls including how images are handled, and updates documentation to
provide context and guidance to operators.

Closes-Bug: 2071740
Change-Id: I7fac5c64f89aec39e9755f0930ee47ff8f7aed47
Signed-off-by: Julia Kreger <juliaashleykreger@gmail.com>
2024-09-04 15:18:58 -07:00
Derek Higgins
b07ebc4123 Set node "alive" when inspection finished
To make the node fast trackable as soon as
inspection finishes, in addition add a wait for the
agent to callback should it not be available when
fast track is attempted.

Closes-Bug: #2078820

Change-Id: I8a95fc08cf355b7b745a565e3a05c9dc0875a63e
2024-09-04 09:19:58 +01:00
OpenStack Proposal Bot
e01522cd4c Imported Translations from Zanata
For more information about this automatic import see:
https://docs.openstack.org/i18n/latest/reviewing-translation-import.html

Change-Id: I4e4714bd26a38aa6dd3635b7b5a61b15e810fe14
2024-09-04 03:54:19 +00:00
Zuul
da5e44908b Merge "Enable the inspection test in the redfish standalone job" 2024-09-03 17:49:14 +00:00
Zuul
b0a650a086 Merge "Better handle missing inspection_network" 2024-09-03 14:58:38 +00:00
Takashi Kajinami
40e1003878 Remove skip check for Python 3.6
... because python 3.6 is no longer supported.

Change-Id: I382b315d59b1f77c44dc2372d26a957b8d1b510f
2024-09-03 16:06:22 +09:00
Jay Faulkner
0eda3d65ea Support Automatic Lessee from instance metadata
Ironic already has support for automatically setting a lessee on
deployment, but it is only supported for direct deployments with Ironic,
as it uses request context which is not preserved in the Nova driver.

Now, when combined with the related Nova change, Ironic can support this
behavior for fully integrated installations. On deploy time, Nova will
set several fields -- including project_id -- in instance info. If
enabled, Ironic will then use that project_id as the automatic lessee.
The previous behavior of using the project_id from the request context
is still supported as a fallback.

This is being tracked in nova as blueprint ironic-guest-metadata.

Closes-Bug: #2063352
Change-Id: Id381a3d201c2f1b137279decc0e32096d4d95012
2024-09-02 18:14:22 -07:00
Jay Faulkner
9810fa996a [doc] Add instructions on making big fake-BM nodes
Many testing scenarios, including testing "full size" DIB ramdisks
instead of using tinyipa, require adjustment of our proscribed values
for Ironic VM size. Document this in the devstack guide.

Change-Id: I58823fa19d65c12ea2f9229394080f83d1d397f4
2024-08-30 12:49:11 -07:00
Zuul
3f22f8c5f0 Merge "Temporarily disable PXE booting test in the standalone job" 2024-08-29 16:06:02 +00:00
Zuul
67542d639a Merge "idrac: inherit driver interface from redfish" 2024-08-29 04:55:05 +00:00
Jay Faulkner
42bd2a069a Use the correct command to fetch ovs state
Typo fix: s/osv/ovs/ in the command name.

Change-Id: I5c42accf5e020ad3ecf652bcabdb8b8521f95907
2024-08-28 08:49:21 -07:00
Doug Goldstein
52fdbb743d
idrac: inherit driver interface from redfish
With the removal of the wsman interfaces in the idrac driver and only
redfish being supported, the idrac driver should inherit from the
redfish driver to ensure that it properly supports all the redfish
supported interfaces. Furthermore with several of the interfaces being
no-op passthru to the redfish implementation there is no reason to not
let the user select those interfaces as well. With an eye towards not
having to support these in the future, direct users to use the stock
redfish versions in the docs as well.

Change-Id: I79ab44f31660e6d5311db46223e8bd60d2b3f213
Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2024-08-28 08:47:32 -05:00
Zuul
f8c5fa7939 Merge "Replace reference to ari/aki" 2024-08-27 23:10:59 +00:00
Dmitry Tantsur
72c792bb28
Temporarily disable PXE booting test in the standalone job
It only passes because the boot interface handling is broken in
ironic-tempest-plugin. Once something like
https://review.opendev.org/c/openstack/ironic-tempest-plugin/+/925981
merges, it will start failing with a timeout.

Temporarily remove it from the list to allow progress on other changes.

Change-Id: I155f520be9b5815f390364c4de12528920b7594a
2024-08-27 14:46:50 +02:00
cid
aaec00275a Replace reference to ari/aki
Replace 'ari' and 'aki' with correct values for kernel/ramdisk
artifacts.

Closes-Bug: #2074090
Change-Id: I5b5bcf7e081fc0865ec43ccf6a988280ec7c9273
2024-08-27 13:46:10 +01:00
Zuul
d6188b752c Merge "Update network_data.json to include dns nameservers" 2024-08-26 21:05:11 +00:00
Jay Faulkner
1aa780377e Deduplicate and remove invalid information for steps
Lots of references to deprecated ways of doing things, as well as two
entire separate sections dedicated to how disk erasure works.

Also ensured we reference new valid config options surrounding disk
erasure.

Additional improvments could include adding documentation around how to
skip disks per node (or linking to any preexisting docs around it).

Change-Id: Ifa029e26eff0637b443d094d85e773b885d0979b
2024-08-26 11:24:37 -07:00
Zuul
e6e075de1f Merge "Clarify how to configure for non-master branch" 2024-08-26 16:20:29 +00:00
Zuul
02833477e0 Merge "Fix versions in release notes" 2024-08-26 16:20:10 +00:00
Zuul
58a79bedfa Merge "docs-audit-2024: Labeling references" 2024-08-26 13:14:20 +00:00
Zuul
569b7d0971 Merge "[docs] Add procedure to EoL and delete old bugfix branch" 2024-08-26 12:35:08 +00:00
Zuul
5a05bed8c2 Merge "Some documentaion improvements for ironic docs" 2024-08-23 14:21:32 +00:00
Riccardo Pittau
df39b78745 Fix versions in release notes
Change-Id: Id8f29cf987fe3e39f536b345c62cbf6d7073b51c
2024-08-23 10:14:13 +02:00
James Denton
11dfe23cf7 Update network_data.json to include dns nameservers
This patch updates network_data to include dns nameservers. This
is especially important when booting virtual media in a dhcp-less
environment.

Change-Id: Icf0d9b5781edd193b2313441e8586b745574edbb
2024-08-22 14:43:24 -05:00
Jay Faulkner
8e6b758bfa Clarify how to configure for non-master branch
Since we're a plugin, the TARGET_BRANCH instructions in the normal
devstack guide are not enough. We should specifically instruct people to
avoid this pitfall.

Change-Id: I7c9fd98c582984036e0b19714b8f387a31e8715f
2024-08-22 10:32:09 -07:00
Dmitry Tantsur
e3d6b644ff
Enable the inspection test in the redfish standalone job
Change-Id: If975a303b6a74efdb2688ad6ae961c34336d99bb
Depends-On: https://review.opendev.org/c/openstack/ironic-tempest-plugin/+/925981
2024-08-22 17:50:44 +02:00
cid
17ba2b3db7 docs-audit-2024: Labeling references
Rewrite page headings with correct labeling for references
and specifications.

Closes-Bug: #2072352
Related-Bug: #2072349
Change-Id: I82313c18294ff8572ae6a6a02607068370f195c3
2024-08-22 15:02:59 +01:00
Dmitry Tantsur
018a7dcaed
Better handle missing inspection_network
Currently, if the inspection network is not provided, neutron-based
network interfaces fail with something like:

    Driver redfish does not support inspection (disabled or not implemented)

This is utterly misleading. Use a hand-crafted error message instead.
Same for the PXE boot interface. Also add missing documentation.

Change-Id: I79086db1c270e02a6c74b870acc336e8da54dea3
2024-08-22 15:32:22 +02:00
Riccardo Pittau
2a6abc8107 [docs] Add procedure to EoL and delete old bugfix branch
The process is currently manual and requires some precise steps.

Change-Id: I25c1c03426fa306681b48c4a5cfb53ff47c8c027
2024-08-22 10:13:05 +02:00
Zuul
501b8f463b Merge "Update configuration value in iRMC" 2024-08-21 19:20:53 +00:00
Muhammad Ahmad
c316443c94 Some documentaion improvements for ironic docs
The documentation contains a significant amount of grammar mistakes.

This could cause confusion in certain scenarios to correctly understanding the
context. Starting to go though the documentation and pushing this commit
as a start.

Change-Id: If2c18909a83ba501b5ffae494934fb631b009e54
2024-08-21 14:24:40 +05:00
Zuul
3d1422fb7b Merge "docs-audit-2024: Use gerunds for task headings" 2024-08-21 08:10:51 +00:00
Zuul
c40ec80a02 Merge "Add unit test to ensure full node object is not logged" 2024-08-20 09:20:44 +00:00
Mahnoor Asghar
040924ee63 Add unit test to ensure full node object is not logged
Change-Id: Ief6351f77a06966200c5cdaa443cc89e49198eec
2024-08-19 12:37:41 +02:00
Zuul
5821444b86 Merge "add virtual media GET api" 2024-08-16 22:40:24 +00:00
cid
a885a0544d Update configuration value in iRMC
Addresses the inline TODO within the Ironic codebase,
to set the ``kernel_append_params`` to the same value as
in the [pxe] configuration after the Xena release.

Current Release: Dalmatian

Change-Id: I1ce3ab560ab04979b7f31393a9877c4d1314925c
2024-08-15 20:09:24 +01:00
Bela Szanics
754cf3f582 Fix conductor startup warning message
Closes-Bug: 2077079
Change-Id: I4b3c7a95846504c1070a1f7ba60866bd35a7f8fa
2024-08-15 11:11:29 +00:00
Zuul
54e3f25c24 Merge "Link to configuration options" 2024-08-14 19:38:55 +00:00
Zuul
f6f645e126 Merge "Follow up to the runbooks change (#922142)" 2024-08-14 10:27:56 +00:00
cid
ba096e091a Follow up to the runbooks change (#922142)
Update api-ref, documentation to reflect the new
endpoints and the new way to set node provision state.

Related-Bug: #2027690
Change-Id: I2106691c08eb04d1001ccf97e6e08fc811356874
2024-08-13 11:52:36 +01:00
Zuul
bc81e17752 Merge "Update error message" 2024-08-13 00:04:22 +00:00
Zuul
50c12609cc Merge "DevStack: enable the new in-band inspection by default" 2024-08-12 17:01:07 +00:00
cid
a9a6ec7b39 Update error message
Removes reference to the deprecated and removed config
option, ``[pxe]ipxe_enabled`` mentioned as a valid
configuration option in error message.

Change-Id: I7747a52f74513645b0dce48781e6ad5dd08fd1e2
2024-08-12 14:10:00 +01:00
cid
582b2e991c Link to configuration options
Implement cross-referencing to configuration options
through out the Ironic documentation.

Closes-Bug: #2076111
Change-Id: I28712a3a92eb7e7d9875e49ea3ed8800168262fe
2024-08-09 18:45:51 +01:00
Kaifeng Wang
23b61e2ba8 Fix error message not interpolated
Change-Id: I19bd8b83b2537ac682be86b9bb71509fb40bdcd7
2024-08-08 21:47:32 +08:00
Riccardo Pittau
3f34f04bf0 [CI] Fix job parent name
ironic-tempest-partition-uefi-redfish-vmedia was renamed to
ironic-tempest-uefi-redfish-vmedia a long time ago

Change-Id: Iaa63e9cf12d47667955973033586fa65dd18e6b7
2024-08-08 11:23:26 +02:00
Himanshu Roy
c9cf2347ea add virtual media GET api
Closes-Bug: 2072307
Change-Id: I6020a7904639f5b6628bcabb5a861ecc397a8b05
Signed-off-by: Himanshu Roy <hroy@redhat.com>
2024-08-08 13:33:14 +05:30
Zuul
8b296e242b Merge "Self-Service via Runbooks" 2024-08-07 18:03:36 +00:00
cid
4750c4e9fa docs-audit-2024: Use gerunds for task headings
Ironic docs improvements. Addressing one of the issues from
the Ironic documentation audit. Using gerunds in titles and
including *Ironic* in the title to improve SEO.

Closes-Bug: #2072351
Related-Bug: #2072349
Change-Id: I9f9c47654386df416b51e8a0cd48f5a89f55e799
2024-08-07 15:18:25 +01:00
Zuul
701ad07b57 Merge "CI: set tftp folder permission" 2024-08-07 14:11:02 +00:00
Zuul
86bc7f7fdb Merge "Deprecate [agent]/manage_agent_boot" 2024-08-07 14:00:26 +00:00
Dmitry Tantsur
db7e4deff9
DevStack: enable the new in-band inspection by default
This change makes it possible to test the new "agent" implementation.
The PXE environment is not migrated so far, so managed inspection is
assumed by default.

Change-Id: I60a11454aefc01333e3f788e2b09ec6e47423223
2024-08-05 13:27:40 +02:00
cid
48f50248c2 Self-Service via Runbooks
Adds runbooks; the new API feature that makes it possible for
project members to self-serve maintenance tasks through curated step
lists associated with target nodes via traits.

In addition to basic CRUD support, runbook extends current API flow for
performing manual cleaning and servicing to support runbooks in lieu of
an explicit/arbitrary ``clean_steps`` and ``service_steps`` user-defined
lists.

Demo Video: https://youtu.be/00PJS4SXFYQ
Closes-Bug: #2027690

Change-Id: I43555ef72cb882adcada2ed875fda40eed0dd034
2024-08-02 05:44:29 +01:00
Zuul
9eb702d17d Merge "[devstack] Ensure downgrade_dnsmasq is idempotent" 2024-07-31 19:52:47 +00:00
Riccardo Pittau
816a7dfe8b Remove ironic-inspector from bugfix branches
Change-Id: Ic54c5da159e05b20686ef4fbb54f6690abc32a22
2024-07-30 15:05:09 +02:00
Zuul
160701ed16 Merge "Require hashed passwords for rescue by default" 2024-07-30 10:38:46 +00:00
Zuul
fd11cd5bfb Merge "Test devstack OSCaas against all Ironic jobs" 2024-07-30 09:17:29 +00:00
Zuul
c375a01ecb Merge "Log node UUID and not entire node instance to avoid logging its driver_info field" 2024-07-29 14:28:02 +00:00
Zuul
6d550c064c Merge "Test empty media type in redfish virtual media boot" 2024-07-26 17:49:56 +00:00
Jay Faulkner
bfdfd6c161 [devstack] Ensure downgrade_dnsmasq is idempotent
Right now, when restacking to get new code checked out, we fail due to
the dnsmasq directory already existing. Now, skip the downgrade if we
detect the correct version -- as we would on a second run.

Change-Id: I5c3d28f75b66d14540cbafa03bff8b7def688da5
2024-07-25 13:50:59 -07:00
Mahnoor Asghar
88ad9a7bbf Log node UUID and not entire node instance to
avoid logging its driver_info field

Change-Id: I07eed090920c777046fe29618d5d8be42618a0f6
2024-07-24 07:54:55 -04:00
Doug Goldstein
acf1c7d43e
idrac driver doc should mention all dependencies
To utilize the idrac-redfish interfaces, you need the sushy-oem-idrac
package to be installed along side of sushy itself.

Change-Id: I3376cd0b40fce49345121ad84d35749241e9dbe8
2024-07-22 14:56:15 -05:00
Zuul
6d5bcdf42d Merge "grub: directly load linked config file" 2024-07-22 17:05:47 +00:00
Zuul
71db05bf0d Merge "Flexible IPMI credential persistence method configuration" 2024-07-22 17:05:44 +00:00
Zuul
e7061ae3ed Merge "Upgrade check on removed or deprecated hardware types and interfaces" 2024-07-22 16:47:01 +00:00
Zuul
a895131cd2 Merge "Inspector migration: mention switching over to ironicclient" 2024-07-22 15:29:24 +00:00
Zuul
5ca8f1145b Merge "Add Targets to firmware.update on multi system BMCs" 2024-07-22 14:44:59 +00:00
Zuul
f182c33b4d Merge "Render the redfish interop profile in the docs" 2024-07-22 12:29:27 +00:00
Zuul
9aada0524c Merge "Allow disabling specific boot modes during deployment/enrollment" 2024-07-22 11:43:58 +00:00
cid
58f84d2854 Allow disabling specific boot modes during deployment/enrollment
Allow operators to provide a list of disabled boot modes for
new deployments ``disallowed_deployment_boot_modes`` and/or
enrollments ``disallowed_enrollment_boot_modes``.

Defaults are an empty list, [], indicating all modes are
allowed.

Closes-Bug: #2068530
Change-Id: I1404c81718cd6bb2977e6f298d9b7d11664226d0
2024-07-20 23:46:52 -05:00
OpenStack Proposal Bot
1e52143f07 Imported Translations from Zanata
For more information about this automatic import see:
https://docs.openstack.org/i18n/latest/reviewing-translation-import.html

Change-Id: I2ee45dd00aa9e210d5a1664b444413f8e587c595
2024-07-19 04:14:34 +00:00
Jacob Anders
3a40347598 Add Targets to firmware.update on multi system BMCs
Currently, Ironic doesn't add Targets parameter to SimpleUpdate call
when updating firmware. This patch makes Ironic aware of multi-System
BMCs and send Targets parameter if this condition is detected. This is a
prerequisite for using sushy-tools simulated firmware upgrades for
testing.

Change-Id: I5fd0228200afc28b24d90595244d3961b05acc52
2024-07-16 23:12:27 +10:00
OpenStack Proposal Bot
11ce62d34f Imported Translations from Zanata
For more information about this automatic import see:
https://docs.openstack.org/i18n/latest/reviewing-translation-import.html

Change-Id: Ifdfeb120dd57da6b5f6c4a26303030f14a8b664f
2024-07-13 04:40:21 +00:00
Zuul
18f50f2886 Merge "Follow-up to change; #922951 breaks RAID" 2024-07-12 21:11:32 +00:00
Zuul
5b54f87f65 Merge "Localdev: disable caching and related periodic" 2024-07-12 15:45:33 +00:00
cid
fc69f9aad6 Follow-up to change; #922951 breaks RAID
It turns out the `controllers` and `storage_controllers` fields
will always simply exist in sushy.

So, a change of approach.

Change-Id: Ia67531178c33bbb7fc79a6385a043f6fd682116c
2024-07-12 14:24:54 +01:00
Zuul
bc5536e7a7 Merge "CI: Remove grub http boot from standalone CI test" 2024-07-11 17:36:18 +00:00
Julia Kreger
631f50d21b CI: set tftp folder permission
In trying to chase down why the raw tftp boot of grub is not
happy, I determined that the tftp folder being created had the
wrong permissions out of the box. Ironic has an optional knob for
this, so we're going to set it by default.

Change-Id: If2a0e5e47163a3525ecd245e8b54cacea9a615de
2024-07-09 23:13:25 +00:00
Julia Kreger
74113c41e4 Fix anaconda boot interface
Change I45ee1c8a73ed13511bc47a69130105f16d34be1e inadvertently broke
the anaconda deploy interface because it sends an empty callback url.

Seems valid enough in that case, it is now handled.

Change-Id: Ife6fa3469ee6eb0663b4af63197deab96ed6aa1e
2024-07-09 21:11:23 +00:00
Julia Kreger
4d46bbf712 grub: directly load linked config file
While troubleshooting grub network boot issues,
I did some reading and found out our model of config
was technically wrong to use a menuentry to load config
in another menuentry which may or may not be loaded.

I mean it worked, but it is simpler to just say
"go source this content into our state".

Change-Id: I5e2ec2dc5110fa0a4f9e11478502a199354454f5
2024-07-08 14:46:27 +00:00
Julia Kreger
8730a1a4b8 CI: Remove grub http boot from standalone CI test
Long story short, in some circles the EFI grub network boot
over http with VMs is regarded as unstable. What appears to
be happening, with service logs at least, is we get a HEAD
request (grub code always issues a HEAD request first to minimize
memory usage), and then re-requests the file contents.

So what we end up seeing on the grub side is:

error: Fail to receive a response! status=104

error: Fail to send a request! status=0x800000000000000f.

What appears to happen is things get gumed up in firmware and
the generally that means we can't run this test in CI.

Change-Id: I1471c9429b742abb250b9a3a910108f1711ad574
2024-07-08 14:28:15 +00:00
Jay Faulkner
d146558ac3 Require hashed passwords for rescue by default
We added this option, and advertised it's default would change several
years ago. This completes the migration.

Change-Id: I64f80fa2f971a223156cc5bf4231b59da0189885
2024-07-05 14:43:05 +00:00
Zuul
111466f782 Merge "Deprecated field in Redfish Driver" 2024-07-05 09:01:26 +00:00
Zuul
ae423e6b07 Merge "Reorganize the documentation front page" 2024-07-05 02:42:29 +00:00
Zuul
00dc3f10e0 Merge "Rework the navigation in the contributor guide" 2024-07-05 02:42:27 +00:00
Zuul
eda09db2a6 Merge "Fix rendering of Redfish properties in the documentation" 2024-07-04 17:27:24 +00:00
Jay Faulkner
e2dad9128a Localdev: disable caching and related periodic
When running out of a local tox environment, don't try to cache images,
or cleanup cached images.

Change-Id: If153923d340455497018bf0021bab86a4c8ae69b
2024-07-03 15:57:21 -07:00
Zuul
a594e63c7f Merge "Add tox env for local dev; update documentation" 2024-07-03 10:18:28 +00:00
Jay Faulkner
465bedbe7f Deprecate [agent]/manage_agent_boot
This configuration directive is completely untested, undocumented,
and requires deployers to manually configure significant
infrastructure for it. It also bypasses several deploy-time sanity
checks around whether or not we expect the server to boot.
Deprecating it for removal in 2025.2 release.

Related-bug: #2071741
Change-Id: Id73d9097e9e4152c7b635a4269b548c9dbdda0a6
2024-07-02 15:23:04 -07:00
Jay Faulkner
54c7ce513b Fixup: Move release note to proper directory
Somehow we approved a releasenote in the Ironic folder; instead we
put these in the root folder.

Change-Id: I098090f006f4aebaa9159f34d7b1906956c1ab36
2024-07-02 15:16:37 -07:00
Jay Faulkner
3dcbc19541 Add tox env for local dev; update documentation
This is a quick and easy way to get Ironic up for testing; updated to be
even quicker and easier if you don't need multiprocess or mysql.

Co-Authored-By: CID <cid@gr-oss.io>
Change-Id: Ibef8a24868fd1f507e69e6d615d6327031d11495
2024-07-01 18:28:12 +00:00
Dmitry Tantsur
1db409747f
Inspector migration: mention switching over to ironicclient
Change-Id: I6ef6f7e1971c320ced7fbfa912078b8227006e7f
2024-07-01 18:36:18 +02:00
Dmitry Tantsur
bb4cd9ea78
Upgrade check on removed or deprecated hardware types and interfaces
Issues an error on removed items still used in the configuration.

Issues a warning on deprecated items or nodes that use removed drivers
or interfaces.

Change-Id: Iebb4cd611f7111cde20acf9ba3d4c9127925b6cf
Closes-Bug: #2051954
2024-07-01 15:44:23 +02:00
cid
944ee5eee1 Deprecated field in Redfish Driver
Replaces depracated field ``storage.storage_controllers`` with the
new ``storage.controllers`` in the Redfish driver.

Closes-Bug: #2070485
Change-Id: Ibe66c73c8d2e402fabaa7a3a2fbc2f3c44e47dbd
2024-07-01 03:56:01 -07:00
Zuul
3820fc19c9 Merge "Update the redfish interoperability profile" 2024-07-01 09:19:22 +00:00
Zuul
4a49bb64cb Merge "Make redfish firmware update a service step" 2024-06-30 15:52:34 +00:00
Zuul
b1e9d6f0e8 Merge "Add RPC calls and handlers needed to support async service steps" 2024-06-30 12:19:52 +00:00
Zuul
6ad623bb84 Merge "Fix log statement about starting inspection" 2024-06-29 17:11:58 +00:00
Zuul
c63b56edfa Merge "Remove deprecated idrac wsman driver interfaces" 2024-06-28 18:44:45 +00:00
Zuul
98ff48a930 Merge "Remove unused parameter in ansible driver" 2024-06-28 18:36:29 +00:00
Jacob Anders
62ff8a949f Make redfish firmware update a service step
This commit makes changes neccessary for redfish.firmware.update to work
as both clean_step and service_step. This is done by adding a service
step decorator, adding conditional code to pass the execution to the
appropriate subsequent functions and modifying the periodics used to
handle async tasks.

Change-Id: I20a40127f66f734005a03365b806310a155dc237
2024-06-28 10:41:02 +10:00
Jacob Anders
b9d1ace728 Add RPC calls and handlers needed to support async service steps
This change adds missing RPC calls and handlers to bring service steps
to parity with deploy and clean steps, allowing service steps to run
asynchronously.

Change-Id: I82f95236797f24b84798be92b53deb7ec4f46dce
2024-06-28 09:07:03 +10:00
Dmitry Tantsur
be5c4b7d63
Render the redfish interop profile in the docs
Adds a pretty straightforward Sphinx plugin that reads the JSON profile
file and renders it nicely in a document that is then included from
the Redfish page.

Change-Id: Ic2da61cb510897eac8a2e162816cfd05cc22994c
2024-06-27 16:32:28 +02:00
Dmitry Tantsur
d28a61b2c0
Update the redfish interoperability profile
* Remove @Redfish.Copyright, it's not an allowed field.
* Remove unused fields such as AssetTag.
* Mark fields used in inspection and other optional features as
  optional.
* Add missing VirtualMedia on System and VirtualMedia fields.
* Add missing Thermal information and its subresources.
* Clarify which fields on System are links.
* Add Purpose field to all fields and actions.
* Expand the BIOS object with the actual requirements.
* Add ServiceRoot and services we use.
* Add missing resources related to RAID.

Change-Id: I35f8f49e4c70e736b685c3eeebf79326592b6314
2024-06-27 16:24:24 +02:00
Mahnoor Asghar
e95d5a8446 Fix log statement about starting inspection
Change-Id: I3e5a63100882774e85235f6f0d8aeb0c2a9610ca
2024-06-27 10:16:10 -04:00
Riccardo Pittau
7fe19631be Test empty media type in redfish virtual media boot
Change-Id: Ie3d4337fff2eb1ce1ee1861295fcb212a850d54c
2024-06-27 16:02:14 +02:00
Zuul
25b2564bde Merge "Fix execution of node servicing steps exposed by IPA's HardwareManager" 2024-06-27 08:59:51 +00:00
Zuul
6ed746cf5e Merge "Follow up to change on testing CI on ARM" 2024-06-25 11:50:52 +00:00
Zuul
352bfe0984 Merge "Enable HTTP network boot for Redfish hardware" 2024-06-25 01:27:35 +00:00
Julia Kreger
578f24bf18 Remove deprecated idrac wsman driver interfaces
Change-Id: I70738db25fdf9902575ac92195c3a40f1d7a0976
2024-06-24 15:03:28 -07:00
cid
3fd1fb3518 Follow up to change on testing CI on ARM
Setting the minimum needed for configuring devstack.

Related-Change: #915441
Change-Id: Ia94ebe2d2a1bd66cd03a4c833273b20ff15171f4
2024-06-24 20:00:53 +01:00
Dmitry Tantsur
656f93b6e7
Reorganize the documentation front page
This is largely inspired by the excellent feedback we got from David
Welsch, although this patch is only a very early first step towards
where we want to be with the documentation.

First, I'm splitting the large administrator guide into several large
sections: features, operation, architecture. Some of their topic might
actually find a better home outside of the administrator guide, but I
don't go that far in this change.

Second, I'm grouping several separate things together with the larger
topics:
- API topics are relevant for users and are grouped with the user guide
- Configuration guide and release notes are grouped with the
  administrator guide.
- The command reference is renamed for clarity and also grouped with the
  administrator guide since these are not user-visible commands.
- I'm dropping the "Advanced topics" subsection. While I like its
  intention (and I think it was me who added it in the first place),
  it's clear that such separation makes these topics much less
  discoverable.

Third, I'm playing with :maxdepth: here to make the sub-pages more
informative.

Change-Id: Icd0a35b252136b7da107c6346c48473cf1b99bcb
2024-06-24 13:25:51 +02:00
Dmitry Tantsur
a36fd00951
Rework the navigation in the contributor guide
The goal here is to give newcomers an easier overview of the contributor
guide. Currently, the index page only points at a couple of sections in
the contributor index, which may be confusing. So:

1) Expand the contributor reference from the index page one more level.
2) Update headings in the contributor guide to match the toctrees and
   their expected level.
3) Expand toctrees in the contributor index one more level.
4) Move references to the development enviroment to a higher level
   toctree to make them visible in the index.
5) Apply consistent upper case heading.

Change-Id: Ifb9fdc96b368095437771217090120e83eaa0fa7
2024-06-24 13:24:54 +02:00
cid
2548f022c5 Flexible IPMI credential persistence method configuration
Instead of only file-based persistence which leaves files
with credentials on the conductor disk for the duration of
the session.

User can now pass ``True`` to the ``store_cred_in_env`` parameter
which instead stores IPMI password as an environment variable, still
for the duration of the session, but limiting exposure to just the
user session of ironic and anyone that has access to it.

Defaults to ``False``.

Closes-Bug: #2058749

Change-Id: Icd91e969e5c58bf42fc50958c3cd1acabd36ccdf
2024-06-21 18:11:54 +01:00
Dmitry Tantsur
ef1ea4d36b
Fix rendering of Redfish properties in the documentation
The syntax we're using there is not valid, change to a definition list,
add double ticks and change a mention of an option to a link.

Change-Id: Idf37436d034fe8bb65bff92eddadfd82d7431df0
2024-06-21 17:01:50 +02:00
Zuul
0e5efe4d9b Merge "Fix and document redfish metrics" 2024-06-20 17:15:31 +00:00
Zuul
17c96e3e97 Merge "Documentation: migration guide from inspector" 2024-06-20 16:20:34 +00:00
Zuul
9a8147bb17 Merge "Decompose the Redfish documentation" 2024-06-20 15:48:42 +00:00
Jay Faulkner
c21b7d7038 Enable HTTP network boot for Redfish hardware
Redfish hardware usually will support better methods -- e.g.
redfish-https or redfish-virtual-media, however we've had some user
requests for the http boot interfaces on Redfish.

Since we can generally expect the generic boot interfaces to work on
redfish, this enables all of them.

Related-Bug: #2032380
Change-Id: I9c36072f6165baaa985862113b283f34bed7bee4
2024-06-20 08:41:53 -07:00
Zuul
19c8efd9d7 Merge "Provision ARM (aarch64) fake-bare-metal-vms" 2024-06-19 16:59:05 +00:00
Zuul
941f2e36fa Merge "Remove ibmc hardware type" 2024-06-19 16:59:01 +00:00
Dmitry Tantsur
a88cc4d9de
Documentation: migration guide from inspector
Change-Id: I622085adc431555789921f04b5ba2375f806075e
2024-06-19 18:41:23 +02:00
Zuul
8a209f1372 Merge "Remove deprecated xclarity hardware type" 2024-06-19 13:53:09 +00:00
Zuul
7b30263d08 Merge "Build PXE config for node in SERVICING state" 2024-06-19 08:52:52 +00:00
cid
209ba79732 Provision ARM (aarch64) fake-bare-metal-vms
This commit introduces support for provisioning ARM (aarch64)
fake-bare-metal VMs in Ironic for the purpose of eventually supporting
CI testing on ARM64 architecture-based hardware.

Change-Id: Ie4bff8892228275ad0fb940c30e8071f7f4c423f
2024-06-19 03:17:05 +01:00
Julia Kreger
f14794ca2e Remove ibmc hardware type
There has been no testing of this hardware type in quite some time,
and the last we heard the vendor was moving towards redfish.

Change-Id: Ib32db463981ec54430884ac760956b7c7b40b17f
2024-06-18 16:33:35 -07:00
Julia Kreger
c02ad76fef Remove deprecated xclarity hardware type
Change-Id: I93e0d947d0f790bd4dfaa73e2cd31fdd36262af2
2024-06-18 16:33:00 -07:00
Przemyslaw Szczerbik
4f924f2d64 Fix execution of node servicing steps exposed by IPA's HardwareManager
Implement execute_service_step() in AgentBaseMixin that will
asynchronously execute service step on the agent. Without it, Ironic
will try to find <step_name> attribute on the object that implements
interface specified by the servicing step.

Example:

Step: [{"interface": "deploy", "step": "burnin_cpu"}]
Error: AttributeError: 'AgentDeploy' object has no attribute 'burnin_cpu'

Closes-Bug: #2069430

Change-Id: Idb1d5b50656c3765ea5c9e21b7844946ae4cfc67
Signed-off-by: Przemyslaw Szczerbik <przemyslaw.szczerbik@intel.com>
2024-06-18 02:22:03 -07:00
Przemyslaw Szczerbik
78f54dfefa Build PXE config for node in SERVICING state
When [pxe]enable_netboot_fallback option is enabled, it's necessary to
build PXE config for nodes in SERVICING provisioning state. Otherwise
node servicing tear down will fail and node will be placed into
servicing failed state.

Closes-Bug: #2069413

Change-Id: Ib00504563f9fa7bed99a0fa1949ac99ea6870875
Signed-off-by: Przemyslaw Szczerbik <przemyslaw.szczerbik@intel.com>
2024-06-14 04:22:12 -07:00
cid
d189465b1d Update version change log with special treatment of .json removal
Log removal of support for treatment of .json for API objects

Change-Id: I9c10a1d166cf8f55070024000eb64be1319bb6e5
2024-06-13 14:56:40 +00:00
Dmitry Tantsur
d3fd725ef9
Fix and document redfish metrics
Provides a complete documentation for metrics that the Redfish
management interface can collect.

The Power payload refers to InputRanges in a broken way: this field is a
list, but the code treats it as a singular resource. No hardware I have
access to provides it this way. Since input ranges are constants and
thus arguably don't qualify as runtime metrics, removing them instead of
fixing.

Change-Id: Ida1be1341346df917073e649a23a2f116b262e66
2024-06-13 13:04:44 +02:00
Dmitry Tantsur
95784428a4
Decompose the Redfish documentation
This page is huge and keeps growing. So:
* Move additional topics to sub-documents.
* Move ESP creation to the install guide (it's not even
  Redfish-specific).
* Create a generic firmware updates document.

Provide a feature listing at the top for easier navigation.

Change-Id: Ic58c139da5e1e60f5ce4d2cec18972ebee9e2485
2024-06-13 12:37:11 +02:00
Zuul
ebbc8300c3 Merge "minor: additional tests for interaction around node lookup" 2024-06-12 19:56:03 +00:00
Zuul
89dae21abb Merge "docs: add some additional context around iPXE and secure boot" 2024-06-12 15:02:43 +00:00
Zuul
6590f10f03 Merge "Makes metal3 integration job vote again" 2024-06-12 14:52:20 +00:00
Zuul
c75d04d68d Merge "Follow up to broken Zuul config" 2024-06-12 14:42:15 +00:00
Riccardo Pittau
aaf62c6789 Makes metal3 integration job vote again
Fix in BMO at
https://github.com/metal3-io/baremetal-operator/pull/1780

Change-Id: I3785441f4f327dcec113276803becd938fe87b9c
2024-06-12 08:54:16 +02:00
Zuul
d0a833095a Merge "Link MACs with PXE config to pxe_enabled ports" 2024-06-12 02:32:39 +00:00
Zuul
b5d7006864 Merge "Correct bond_mode enum value for 802.3ad" 2024-06-12 00:08:13 +00:00
Zuul
b2a57f6bed Merge "Change [agent]require_tls to True by default" 2024-06-11 23:33:49 +00:00
Zuul
fa685bf8fa Merge "fix: Fix class typo for portgroup. Portgroup instead of PortGroup" 2024-06-11 19:13:53 +00:00
Zuul
5a28e00d18 Merge "Trivial: Cleanup in neutron common code" 2024-06-11 16:57:18 +00:00
Jay Faulkner
28e83a0877 metal3 integration is unstable currently, disable
Disabling temporarily.

Change-Id: I08b7c1140e3f027b59cd6aaf2b160f67e20da314
2024-06-10 14:38:28 -07:00
cid
8cd3fcd786 Trivial: Cleanup in neutron common code
Change-Id: Icd308b53908ee5b99cc7b5fbb40c4462faf70927
2024-06-10 17:11:55 +01:00
Zuul
10239b0d5e Merge "Fix wrong option mentioned in release notes" 2024-06-10 15:00:03 +00:00
Zuul
fe8126d1f6 Merge "ci: fix https boot artifact path" 2024-06-10 15:00:00 +00:00
cid
e958b379c1 Link MACs with PXE config to pxe_enabled ports
Currently, Ironic creates a pxe link file for every port,
even when a port's pxe_enabled property is set to false,
which means it can still boot from this port when it shouldn't.

With this commit, unless explicitly configured otherwise, only
pxe_enabled ports (pxe_enabled=True) will have the pxe link file.

Closes-Bug: #1741422
Change-Id: I013861dd5b9a7525058606f8dc8b05502a28af1e
2024-06-10 15:10:05 +01:00
Takashi Kajinami
316274a9d3 Fix wrong option mentioned in release notes
The [conductor] graceful_timeout option does not exist, and
the [conductor] heartbeat_timeout option is actually used instead.

Change-Id: I689fcf8c392eecbcf8ee12b2f67f78f9f22d17aa
2024-06-10 17:36:50 +09:00
Zuul
a51726ca08 Merge "Minor ramdisk interface docs update" 2024-06-09 08:42:25 +00:00
Julia Kreger
46cc9e1d99 ci: fix https boot artifact path
Change-Id: Idb5720599f38b3732240e0feddacfdc739c5a67c
2024-06-07 14:41:02 -07:00
Julia Kreger
af33d8bd71 minor: additional tests for interaction around node lookup
A recent evaluation of the lookup code yielded an awareness that
while we're sort of following the overall community pattern of
testing what we expect in terms of patterns and behavior, really
needed just a little bit more in the way of testing.

While ultimately, these tests are really just exercising front
end validation, it is still important to check to have increased
assurance of a secure codebase.

Change-Id: Iaa917191e0f118f8828161174ea1fe8c55c8f4ee
2024-06-07 10:28:30 -07:00
Julia Kreger
ed4f44e97f Remove unused parameter in ansible driver
Turns out the MAX_DISK_PARTITONS parameter is unused. Removing.

Change-Id: I45310dd514d6058f7d81a5dd412515146748ac91
2024-06-07 09:05:37 -07:00
Julia Kreger
eaa0521bee fix: Fix class typo for portgroup. Portgroup instead of PortGroup
Apparently, this has been around for ages, btu the error was likely
not exactly right as a result of this. Anyway, quick fix.

Change-Id: Idee3c1edfdd65928eaa5f8d30b62474d85dec277
2024-06-07 07:55:23 -07:00
Zuul
8086167054 Merge "Assert URL consistency for agent_url" 2024-06-06 13:14:36 +00:00
Zuul
5b9c92e3cb Merge "Excise use of non-timezone aware utcnow()" 2024-06-06 13:14:34 +00:00
Julia Kreger
613348d112 docs: add some additional context around iPXE and secure boot
Change-Id: Ifecd92b80472b3e28307ddbdbaeeb08ec0950c54
2024-06-05 11:24:15 -07:00
Zuul
40f0980f9b Merge "docs: fix wrong configuration option name" 2024-06-05 18:11:35 +00:00
Curt Moore
b00c499650 Correct bond_mode enum value for 802.3ad
Change-Id: Ic7162f7d04673bfc5b2dec575b2bdffbc6ea0fe8
2024-06-05 08:16:06 -05:00
Pierre Riteau
7bb93f0d5e docs: fix wrong configuration option name
Change-Id: I1e8e028cc31ac2ca70afc2183196321f9e8a377d
2024-06-05 13:55:17 +02:00
cid
e736513bec Follow up to broken Zuul config
Change-Id: I5f870dcf37bae492be30749e4e963425818e6df7
2024-06-05 12:23:52 +01:00
Pierre Riteau
916b0f409b docs: fix markup
Change-Id: I8e23534db1e0a7e4385278732431f6531bf41075
2024-06-05 11:48:31 +02:00
Julia Kreger
6095b4017d Change [agent]require_tls to True by default
While looking at the overall heartbeat/agent workflow, it seemed
like the [agent]require_tls setting should likely be True by
default, as we are well past the initial phase where operators
might not have the TLS capability when upgrading.

Change-Id: Id526e948e6c5ed032d7542232b1c1a31cb285b26
2024-06-04 14:30:38 -07:00
Zuul
b51c8a404b Merge "GRUB conf template compatibility with arm server" 2024-06-04 17:47:40 +00:00
Julia Kreger
88c45151fa Assert URL consistency for agent_url
While agent_url is software generated, it is still a public endpoint
and at least needs some upfront filtering applied. To do this, we
can leverage urllib in the standard library to disassemble the
url, and reconstruct it based upon the standards. The plus of this
approach is that it will remove some invalid formatting for us, and
if things are too out of line, an exception is raised as ValueError.

An important note, this is *not* explicitly urlparsing security[0] as
denoted in the Python urllib documentation, but that the application
should operate defensively.

[0]: https://docs.python.org/3/library/urllib.parse.html#url-parsing-security

Change-Id: I45ee1c8a73ed13511bc47a69130105f16d34be1e
2024-06-04 10:22:49 -07:00
Julia Kreger
e651e9986c Minor ramdisk interface docs update
Change-Id: I6b9249a01c0ef5997c750e6a07f877bd94bf239c
2024-06-03 15:45:11 -07:00
Zuul
8bdf1fca91 Merge "docs: augment security docs" 2024-06-03 22:09:04 +00:00
cid
e8634748a1 GRUB conf template compatibility with arm server
Determine the appropriate GRUB commands during UEFI boot
based on the node's CPU architecture.

Closes-Bug: #2050054
Change-Id: I0c5f513cdc8f4112f8dfdeb4ccaf566d3424a2ca
2024-06-03 17:02:21 +01:00
cid
b5b7e60c47 Excise use of non-timezone aware utcnow()
Replace all instances of `datetime.datetime.utcnow()`,
which is deprecated, with the timezone-aware oslo's
`timeutils.utcnow()` method, across the Ironic project.

Closes-Bug: #2067740
Change-Id: I998681c14f945846f58e723b9be2202dbe8ea12c
2024-06-03 12:15:22 +01:00
Julia Kreger
b64a8ff6ef Follow-up: minor wording change from 920706
Just changing "deployment or cleaning operations" to
"inband operations", since the agent can run in many
different inband operational steps.

Change-Id: Iaaa03ebc3dab724eb7afb0ee686bd22c8a2879be
2024-05-31 07:06:56 -07:00
Julia Kreger
268b28f527 Enhance security notes in config description
Some of the configuation knobs require more specific details
regarding security or denial of service related possibilities
if tuned to inappropriate values.

Overall, just some minor improvements for clarity

Change-Id: I008d6e00a528bddba0f843f34968155a9da3ff36
2024-05-31 14:04:51 +00:00
Julia Kreger
9f456bb63c docs: augment security docs
A quick review of the security documentation yielded a need
to revise and clarify the security documentation a little,
which includes a couple security related features.

And also fix the syntax on the example policy entries while
adding a missing third, ! results in a "default false" response.

Change-Id: I3d10ca4631703051109c443d5591a7e86f858c66
2024-05-31 07:04:30 -07:00
Zuul
2f41bf1a0d Merge "Fix some typo in servicing doc" 2024-05-29 15:40:22 +00:00
Zuul
9d791077a3 Merge "Use specific element to detect database backend" 2024-05-29 15:09:41 +00:00
Zuul
7fafe27ba7 Merge "Add pre-commit configuration and docs" 2024-05-29 11:58:35 +00:00
Zuul
a3ec7e7dc9 Merge "Update front page of contributor guide" 2024-05-29 11:13:34 +00:00
Zuul
33f3f6b26c Merge "Add Node Servicing to api-ref" 2024-05-29 02:36:43 +00:00
Jay Faulkner
c6328874a5 Update front page of contributor guide
This highlights:
- The dev-quickstart guide, which is more up to date than most
  contributor docs.
- Common docs (OpenDev / OpenStack contributor guides)
- Bug information (also very up to date)

This removes:
- Top-level link to BfV and multitenant devstacks; these configs are
  linked from devstack-guide
- Hilariously out of date information around branch support

Change-Id: If47d9776c65c91b972a3fab8364eacc50a29b2bb
Depends-On: https://review.opendev.org/c/openstack/ironic/+/920365
2024-05-28 14:34:40 +00:00
Kaifeng Wang
a52cba727e Fix some typo in servicing doc
Some word refer to cleaning steps while should be servicing step.

Change-Id: I417635a0cbb8643d997bc317ad81772d411cd7bd
2024-05-28 19:30:42 +08:00
Jay Faulkner
b44cad8e5e Fix CI issues in codespell/pep8
Codespell upgrade caused failures, fixed spelling where
appropriate, added ignores where appropriate.

Some new package release broke pep8 runs; fixed by no
longer pinning Pygments version.

Change-Id: I670bbb170823d6a0ace8eeb9d9e486e8e9bf7404
2024-05-28 02:38:31 -07:00
Zuul
df6342d1ab Merge "Fix negative lookahead assertion syntax error" 2024-05-23 16:19:33 +00:00
cid
74b148b685 Fix negative lookahead assertion syntax error
Python regexes are deprecated in Zuul, so this commit updates the
configuration to use RE2-compatible syntax.

Change-Id: If4973be103076f5a3879dc630e104d129377f7da
2024-05-23 13:56:19 +01:00
Jay Faulkner
1285417c7a Add Node Servicing to api-ref
Adding service verb and service_steps attributes to API reference.

Change-Id: I7078f3b9e415c30ab45291bef8c52a66ff7eab8c
2024-05-21 14:33:44 -07:00
Takashi Kajinami
9bed01d2f6 Use specific element to detect database backend
... instead of using the whole url string. The url string may include
the pattern and the current logic is not robust enough to ignore
wired naming.

Change-Id: I80c59c67773f868b45f1ff3b34877c1bab73b225
2024-05-16 00:56:37 +09:00
Julia Kreger
0d2a2e4bf4 docs: allow the state diagram to be larger
The state digram is constrainted into a frame of the page rendering
and the prior configuration set it to be a maximum of 660 pixels,
however we should allow the image to be aligned to page size which
can result in a larger image, but still constrained slightly so
spinx includes a link to the image.

Change-Id: I19350fc010bd5aac798b2d57ea3d2eb98239a457
2024-05-15 06:48:40 -07:00
Zuul
339e149c50 Merge "Add servicing states to states doc, fix state diagram" 2024-05-15 04:22:53 +00:00
Zuul
c31fea571b Merge "docs: Cleanup/revise Secure Boot docs" 2024-05-14 23:12:19 +00:00
Jay Faulkner
223a700434 Test devstack OSCaas against all Ironic jobs
Depends-On: https://review.opendev.org/c/openstack/devstack/+/676016
Change-Id: Ia850715cad6f80be73372b5323d78f7a9ba74251
2024-05-14 13:34:54 -07:00
Zuul
b8bcfc33cb Merge "Remove SQLAlchemy tips jobs" 2024-05-14 17:22:53 +00:00
Zuul
4b35da4ece Merge "[devstack] Upload images with --file instead of stdin" 2024-05-14 15:48:13 +00:00
Zuul
dcace881bc Merge "docs: revise notes around iso booting for clarity" 2024-05-13 16:37:25 +00:00
Jay Faulkner
74ecde7ea0 Add servicing states to states doc, fix state diagram
Good news, pydot (original) is maintained again and pydot2 apparently is
not. By switching to pydot instead of the fork, svg generation works
now.

This adds states for servicing, and swaps us back to svg for the
regenerated diagram.

Change-Id: I410182ee04293434d889747ddec229870c908d91
2024-05-10 14:31:55 -07:00
Zuul
a2f4b2f410 Merge "Fix spurious CI job failures around partition images" 2024-05-08 23:05:37 +00:00
Dan Smith
a0f48b6425 [devstack] Upload images with --file instead of stdin
This makes all the image upload commands in the devstack plugin use
--file instead of stdin redirection, and also uses an absolute path.
One of the commands was already doing it this way. By doing the upload
like this, it makes the devstack plugin usable with the OCaaS devstack
mode (for faster openstack client ops) since we can't pass the image
stream via stdin. Most people will be using --file for uploading
anyway, so this is probably more realistic anyway.

Change-Id: I8d97ed731133d02aed46a078c50769692ad7ba04
2024-05-08 11:00:44 -07:00
Julia Kreger
5a75e9afbb docs: detail limitation of use of config drive + rebuild
Change-Id: I2054d6a87d7dcf74004d3404c73e39a100f1fe9b
2024-05-07 10:31:34 -07:00
Julia Kreger
8d0b556e3d Fix spurious CI job failures around partition images
Cirros partition images have some underlying limitations,
meaning it is not ideal for any step which requires the image
to hae commands executed in it to perform operations, such as
mounting additional filesystems in UEFI mode, or installing
grub in BIOS mode.

This is because cirros images are an unpacked ramdisk, in other
words, the posted disk image *has no* contents on the root
filesystem of the image. While we attempt to unpack[0] this as well,
this can also fail creating false failures resulting in check
jobs failing and then working on recheck.

As the constraint is the same as the BIOS mode check, and there
is no realistic fix, this change removes the boot mode check and
thus always disables partition image testing with tempest *when*
cirros is in use.

note 0: We presently unpack using a virtual machine launch so it
takes place with the same process as when cirros starts, however
linux doesn't always boot, and the tools don't really determine
if that is the case or not, and if we retool it, we should just
move to a direct extraction and image re-pack.

Change-Id: I7687ff1eddb14d22b981860d4c4c9b172bae45b7
2024-05-07 09:40:32 -07:00
Zuul
5717c7e599 Merge "docs: document stance on partition image use" 2024-05-06 10:49:17 +00:00
Zuul
38aa6433cb Merge "reno: Update master for unmaintained/zed" 2024-05-06 09:53:32 +00:00
Zuul
3134f13acf Merge "doc: Fix wrong example of [ipmi] cipher_suite_versions" 2024-05-06 08:34:34 +00:00
OpenStack Release Bot
13ab26188c reno: Update master for unmaintained/zed
Update the zed release notes configuration to build from
unmaintained/zed.

Change-Id: I473ad6309784bc3e672eedb556d1694a2e5f99f5
2024-05-06 06:23:45 +00:00
Takashi Kajinami
198e2ceb3b doc: Fix wrong example of [ipmi] cipher_suite_versions
The example suggests python-style representation but this is not
actually parsed as expected.

Change-Id: I21ce1db655f81cd3fb3a0a0b92f8b81ff1e77c45
2024-05-04 18:38:58 +09:00
Zuul
f39594fcec Merge "Remove eventlet workarounds" 2024-05-03 17:53:15 +00:00
Jay Faulkner
e4c2f884cb Remove eventlet workarounds
The bugs these work around have been fixed for a long time, and we
require modern eventlet for Ironic. Let's remove the workaround.

Change-Id: Idecb3c5a774aecc6b65d0abd0262fe4b8625c6b7
2024-05-03 07:57:27 -07:00
Jay Faulkner
9c955685c4 Add pre-commit configuration and docs
pre-commit is a git hooks framework which does lots of useful things
before you commit, like validating lint and codespell -- easy things to
forget, especially in a post-codespell world.

Related-bug: 2047654
Change-Id: I22738f9dceebe194e5aedff8815cd786013de456
2024-05-01 14:00:30 -07:00
Zuul
820ec7ddc7 Merge "Replace cinderclient usage with openstacksdk" 2024-05-01 17:22:26 +00:00
Julia Kreger
021117e354 docs: revise notes around iso booting for clarity
Had someone try to boot the tinycore ISO on a UEFI machine, and they
got a nice error. Just turns out we needed to update our docs a little
bit to provide appropriate clarity.

Change-Id: I1adfb62ea22d0b58740ceadc8c338fc04d9b78de
2024-05-01 10:14:20 -07:00
Zuul
dec5780fca Merge "Inject a randomized publisher id" 2024-05-01 04:58:12 +00:00
Zuul
06c492aad5 Merge "Remove special treatment of .json for API objects" 2024-05-01 04:55:26 +00:00
Zuul
0e4adceda3 Merge "Run neutron for the functional test job" 2024-05-01 04:55:23 +00:00
Steve Baker
91d4bacbec Replace cinderclient usage with openstacksdk
Change-Id: Ib4a533584da85281d425fdbffa12a52d4838e185
Closes-Bug: #2042494
2024-05-01 07:58:41 +12:00
Takashi Kajinami
1e4ef9395a Remove old excludes
These are detected as errors since the clean up was done[1] in
the requirements repository.

[1] 314734e938f107cbd5ebcc7af4d9167c11347406

Also remove the note about old pip's behavior because the resolver
in recent pip no longer requires specific order.

Change-Id: I742ea0192398b9e9b78b969fa81f65621d9490de
2024-04-30 22:43:13 +09:00
Zuul
384c692f59 Merge "Fix iscsi url generate method for ipxe" 2024-04-29 22:57:31 +00:00
Zuul
d49a1b907c Merge "ci: re-enable grenade test job" 2024-04-29 22:52:48 +00:00
Zuul
b6b8ee07ce Merge "Replace glanceclient usage with openstacksdk" 2024-04-29 15:26:56 +00:00
Zuul
3a95a38b65 Merge "Redfish: fix error formatting when mounting vmedia" 2024-04-29 14:41:34 +00:00
Dmitry Tantsur
f43587effd
Redfish: fix error formatting when mounting vmedia
Also add missing error into the message.

Change-Id: I9610add40afbb7beb30d375a3a455434f5446cc7
2024-04-29 14:11:06 +02:00
frankming
dcf059af9e Fix iscsi url generate method for ipxe
Boot from volume feature has a ipxe template render step, and it need
to generate iscsi urls for booting the volume. However, it not works. In
the function, lun field should be hexadecimal instead of decimal,
according to SAN URIs description at https://ipxe.org/sanuri. So we
need to fix it.

Closes-Bug: #2055355
Change-Id: I080ca42c9ba05f2a4e0752312b79a32bef825752
Signed-off-by: frankming <chen27508959@outlook.com>
2024-04-29 17:06:34 +08:00
Zuul
08209c48ab Merge "docs: update ilo docs regarding status -> use redfish" 2024-04-29 08:30:06 +00:00
Steve Baker
978afbd5a1 Replace glanceclient usage with openstacksdk
Closes-Bug: #2042495
Change-Id: Ic8421bd937a3a1ab6c3b86c259cd929810c0532e
2024-04-29 12:30:33 +12:00
Julia Kreger
fb850e7f00 Inject a randomized publisher id
To serve as a mechanism to allow an interlocking device identification
this patch injects a publisher id value into ISO images *and* the kernel
command line for any software running from the ISO image to match
the ISO in use to the location of data housed locally from within the
image.

Related-Bug: 2032377
Change-Id: I9b74ec977fabc0a7f8ed6f113595a3f1624f6ee6
2024-04-28 00:21:06 +00:00
Zuul
6437a2e794 Merge "Validate url options at config input layer" 2024-04-27 06:52:59 +00:00
Julia Kreger
508b1ccab3 ci: re-enable grenade test job
Change-Id: I1d2af3918dcc7cf3248edb460898044e35812b52
2024-04-26 16:53:04 -07:00
Julia Kreger
bccea706c8 docs: update ilo docs regarding status -> use redfish
Change-Id: I67f275556186887ae6f555379c9f4c24cde48638
2024-04-26 16:41:38 -07:00
Julia Kreger
91ee72800f docs: document stance on partition image use
Change-Id: Ice381b2d22af48a99081080f5985f609a13dc939
2024-04-26 16:38:07 -07:00
Zuul
770a758b7d Merge "Trivial: use canonical name of microversion-parse" 2024-04-26 23:19:45 +00:00
Zuul
cd489983de Merge "Ensure [molds] password is not logged" 2024-04-26 15:19:20 +00:00
cid
ee5315bcf3 Remove special treatment of .json for API objects
- /v1/nodes/test.json will now only mean node with the name
"test.json"
- /v1/nodes/test.json.json will mean a node with the name
"test.json.json" and,
- /v1/nodes/test will mean a node with the name "test".

So /v1/nodes/test.json will no longer default to "test" and
will HTTP 404 unless a node with the name "test" actually exists.

This also removes the backward compatibility with the
guess_content_type_from_ext feature

Closes-Bug: #1748224

Change-Id: If4b3a23e2a09065f5e063e66cff66b96af4d3393
2024-04-25 17:58:00 +01:00
Julia Kreger
6c1e002c0d doc: Add extra context around release mapping
Adds some inline text to help contributors who
have not had to deal with release mappings before.

Change-Id: I064e5c80a11005df97e38523a7d703e803fa4a41
2024-04-25 06:49:29 -07:00
Dmitry Tantsur
f7fd7961c0
Trivial: use canonical name of microversion-parse
Change-Id: I8b457b531cc181bbb43e8e21bcd29929ce5725f7
2024-04-24 09:13:47 +02:00
Riccardo Pittau
c1f3daf7b0 Fix attach/detach vmedia redfish implementation
We need to map with virtual media devices and not boot
devices only.

Change-Id: I88b56ae26d9f1d8642ed6ffc5c055f8d56f6939a
2024-04-23 08:55:18 +02:00
Takashi Kajinami
623949bfae Ensure [molds] password is not logged
The [molds] password option accepts a secret value apparently. So its
value should not appear in debug logs.

Change-Id: If8a54c1d4f74516f1c24f7286e76955b2e424f5c
2024-04-22 06:47:44 +00:00
Takashi Kajinami
9cead9457c Validate url options at config input layer
oslo.config provides the URIOpt class which enforces valid URI(URL)
format. Use this built-in feature to detect any malformed values for
better feedback.

Change-Id: I0d846f78f8132a2d63266b7b3331ec7118cea1b4
2024-04-22 15:27:21 +09:00
Zuul
b4773ad8d0 Merge "docs: update redfish docs to detail swift url issues" 2024-04-21 12:16:13 +00:00
Zuul
1cefbbcc75 Merge "redfish: change default virtual media storage to local storage" 2024-04-21 12:16:10 +00:00
Zuul
1904d3c1bf Merge "Docs: Remove outdated RBAC content" 2024-04-19 22:10:14 +00:00
Julia Kreger
62506393f1 docs: Cleanup/revise Secure Boot docs
Change-Id: I40346e09f94eaf227e273734efce659ff23b29fb
2024-04-19 14:50:25 -07:00
Julia Kreger
ae2b5f5f1f redfish: change default virtual media storage to local storage
This may be the most overridden default of Ironic, which means
we need to change the default value.

The default for ``[redfish]use_swift`` was historically ``true``,
however we've generally found that BMCs are particularlly sensitive
to extra characters in the URL as the characters may signify a
dynamically generated file, which would be problematic as virtual
media webservers also generally require range retrieval support.

This change makes the default ``false`` which should lead to one
less override for operators being necessary in practical operation.

Change-Id: Iad57b3c6423bced0e3cb6fb4e31aad6d805f26fa
2024-04-19 21:43:24 +00:00
Julia Kreger
126041be95 docs: update redfish docs to detail swift url issues
Change-Id: I45f7b647475c81e836f6d3ee036b33aee383fe6c
2024-04-19 14:42:43 -07:00
Zuul
3c5b4cb349 Merge "Follow-up: Use `microversion-parse` to parse version headers in API requests" 2024-04-19 15:52:31 +00:00
Zuul
27dbc24c85 Merge "Fix device_type in attach/detach vmedia for Redfish" 2024-04-19 13:59:40 +00:00
Julia Kreger
ae4b585343 Run neutron for the functional test job
The functional test job needs neutron for neutron dependent
tests to be able to execute. As such RabbitMQ and Neutron
are enabled for the functional test job at this time.

Change-Id: I04f76ca1570b969136c0922eb07bc85360369920
2024-04-18 21:19:41 -07:00
Zuul
11309e7aea Merge "Remove redundant priority override code from service steps" 2024-04-18 21:59:40 +00:00
Zuul
7969baf58e Merge "Correct logging call in _heartbeat_service_wait method" 2024-04-18 21:59:37 +00:00
Zuul
a7b2908e2c Merge "CI: Unpack cirros image partition jobs" 2024-04-18 19:20:12 +00:00
cid
20543fc115 Follow-up: Use `microversion-parse` to parse version headers in API requests
Adds a release note, unit test, and documentation update as a follow-up to the
`microversion-parse change <https://review.opendev.org/c/openstack/ironic/+/913793>`_

Change-Id: I535af988125a511e4f54c9d81acd47c327413774
2024-04-18 19:53:34 +01:00
Zuul
f494d2760a Merge "Small Doc Fix: Moved user export for devstack guide." 2024-04-18 18:12:22 +00:00
Riccardo Pittau
68fcc6b0d2 Fix device_type in attach/detach vmedia for Redfish
We need to translate the generic device_type to sushy device_type

Change-Id: Id09e6f2b989513b41980c7b89c9d76edecc320db
2024-04-18 18:39:12 +02:00
Zuul
5fabff87d1 Merge "Use .coveragerc file" 2024-04-18 07:59:33 +00:00
Jacob Anders
92b61e280c Remove redundant priority override code from service steps
Currently, service steps are only supported as a user-requested action.
This change removes references to overriding priorities for service
steps as these overrides will have no effect and may cause confusion.

Change-Id: I35a8b59b17fdff3161df835903acec529e732c4f
2024-04-18 17:54:37 +10:00
Jacob Anders
e04741ac3f Correct logging call in _heartbeat_service_wait method
Currently, _heartbeat_service_wait() is causing an error due to a
missing parameter in the call. This change resolves this issue by
removing the reference to the missing parameter.

Change-Id: I03faa67953daf282ae1b576a2a949c94a2efa973
2024-04-18 07:47:35 +00:00
Julia Kreger
fb00fa5037 Docs: Remove outdated RBAC content
Change-Id: I45f4417c3075349ac3dd36413034cff1895b1eff
2024-04-17 12:27:51 -07:00
Zuul
c85d9c8326 Merge "Load machine type from command-line" 2024-04-17 17:31:18 +00:00
Zuul
7df06977d3 Merge "Add states.SERVICING and SERVICEWAIT to _FASTTRACK_HEARTBEAT_ALLOWED" 2024-04-17 10:34:59 +00:00
Jacob Anders
619e1ac80c Add states.SERVICING and SERVICEWAIT to _FASTTRACK_HEARTBEAT_ALLOWED
Currently, service steps may fail to start in scenarios dependent on IPA
fasttrack. This change attempts to resolve this by incorporating
servicing states in the fast track allowed states whitelist while also
making _FASTTRACK_HEARTBEAT_ALLOWED a superset of _HEARTBEAT_ALLOWED
instead of duplicating values in the two constants.

Change-Id: I47984469c1432e7fc7b4f1494b9f6c551c34672f
2024-04-17 14:04:16 +10:00
Sharpz7
9c237240ba Small Doc Fix: Moved user export for devstack guide.
A small bugfix - you now need to ensure that the user env var is set before running any openstack commands (At least the ones that devstack uses)

Change-Id: I4afad7ea588cf6505a7b1186c749d13827b24290
2024-04-16 22:48:09 +00:00
Zuul
d68490c6fe Merge "Use the new microversion-parse library to parse the version headers" 2024-04-15 23:38:05 +00:00
Zuul
ddca532f52 Merge "Fix the confusion around service_reboot/servicing_reboot" 2024-04-15 23:38:00 +00:00
Zuul
3123e82a14 Merge "Fix servicing clean-up" 2024-04-15 23:37:57 +00:00
Zuul
36251de6f1 Merge "Add note regarding metal3 ci job in CI config for stable runs" 2024-04-15 23:37:55 +00:00
cid
211e007472 Load machine type from command-line
Change-Id: Ib2bdac78e0eb4043e2a2f86244ea168641571817
2024-04-16 00:30:44 +01:00
Alexon Oliveira
668dd24108 Remove deprecation warning by setting schema
Closes-Bug: #2061160

Change-Id: Ie5af73dd1b8af29734d1cf34b070e2a2bbc09949
Signed-off-by: Alexon Oliveira <alolivei@redhat.com>
2024-04-15 14:54:17 -03:00
Zuul
ffd0e5c95d Merge "db: Replace use of Engine.execute() method" 2024-04-15 16:11:18 +00:00
Zuul
044ca92902 Merge "Make codespell voting" 2024-04-15 10:04:14 +00:00
Zuul
a329135fad Merge "Fix spelling reported by codespell" 2024-04-15 10:01:50 +00:00
Takashi Kajinami
a27f29fb4c Remove SQLAlchemy tips jobs
The most recent SQLAlchemy and Alembic versions are now in
upper-constraints. As a result, this job has served its purpose and can
be removed. For more information, see [1].

[1] https://lists.openstack.org/archives/list/openstack-discuss@lists.openstack.org/thread/RBHXHTO3GUOOXVSZXD4C2O3TKDOH2QSC/

Co-Authored-By: Stephen Finucane <stephenfin@redhat.com>
Depends-on: https://review.opendev.org/c/openstack/requirements/+/879743
Change-Id: I51fe54d10f7b1c8fa9052f6e382a97861f469859
2024-04-15 08:27:55 +00:00
Takashi Kajinami
7408a93dcd db: Replace use of Engine.execute() method
Resolve the following RemovedIn20Warning warning:

  The Engine.execute() method is considered legacy as of the 1.x
  series of SQLAlchemy and will be removed in 2.0.

Closes-Bug: #2061345
Co-Authored-By: Stephen Finucane <stephenfin@redhat.com>
Change-Id: Ib0519af8a15ca02e351f8d739d52f4e658f7615a
2024-04-15 17:27:33 +09:00
Winicius Silva
774890dd7f Make codespell voting
Change-Id: Ia3e0d347d0ca80f5f632a7ad889bea17391da136
2024-04-12 14:41:56 -03:00
Winicius Silva
0f62bd2164 Fix spelling reported by codespell
Change-Id: I5a1f68189eb75b92bedeaaa8b645be7f10b0d30f
2024-04-12 14:34:49 -03:00
Dmitry Tantsur
004e78c413
Fix the confusion around service_reboot/servicing_reboot
We ended up using two names for the same flag (and forgot it in one
place completely). To not just fix the issue but also prevent it in the
future, refactor asynchronous steps handling into a new helper module
with constants and helper functions.

I've settled on servicing_reboot as opposed to service_reboot because
that's the value we currently set (but not read), so it provides
better compatibility when backporting.

Remove excessive mocking in the Redfish unit tests.

Change-Id: I32b5f860b5d10864ce68f8d5f1dac3f76cd158d6
2024-04-12 18:09:54 +02:00
Zuul
7d1bc77861 Merge "Handle servicing failures in the Redfish BIOS interface" 2024-04-12 14:41:15 +00:00
Dmitry Tantsur
c61c7fabe3
Handle servicing failures in the Redfish BIOS interface
Change-Id: I58a27ec9e3646b143fc0874f033849056848c411
2024-04-12 13:52:13 +02:00
Zuul
60b263df50 Merge "Fix get_async_step_return_state to account for servicing" 2024-04-12 11:49:28 +00:00
Zuul
9d8d5a9387 Merge "Remove unused DEFAULT_NEUTRON_URL constant" 2024-04-12 08:50:35 +00:00
Dmitry Tantsur
6c8673c1b4
Fix servicing clean-up
Serious issues:
- Nothing powers on nodes after servicing, so they end up active and
  powered off in the end.
- Restoring power state was done three times.

Minor issues:
- Function _tear_down_node_servicing is called twice causing a traceback.
- Furthermore, process_event('done') is also called in another place
  in deploy utils.
- Make sure nodes are never considered for fast-track when servicing, it
  prevents clean-up of virtual media devices.

Change-Id: I92fd7a0009a816e93e316e4674c7509b61a474d4
2024-04-12 10:48:57 +02:00
Dmitry Tantsur
c1ce255f01
Fix get_async_step_return_state to account for servicing
Change-Id: I502be5613ffef7c2f51eafd0a10d5e9c5d5ec2a4
2024-04-11 13:42:07 +02:00
Dmitry Tantsur
22aa29b864
Stop assuming service steps have priorities
Unlike clean, deploy and verify steps, service steps cannot run
automatically and thus do not have a usable notion of priority. It's not
possible to provide a priority through the API but our validation code
still requires it. This change gets rid of most priority handling for
service steps, leaving only some foundation for future enhancements.

Change-Id: I82aefc03a5c062b67e0f457612fe568399226dc8
2024-04-10 13:59:19 +02:00
Zuul
7737a2549d Merge "Add states.SERVICING and SERVICEWAIT to need_prepare_ramdisk" 2024-04-10 09:09:31 +00:00
Jacob Anders
70ccb6af11 Add states.SERVICING and SERVICEWAIT to need_prepare_ramdisk
Currently, service steps do not work with virtual media deployments
because states.SERVICING and states.SERVICEWAIT are missing from the whitelist
of valid provision_states. This change resolves this issue.

Change-Id: I5e3ec08d128b35385f2d90c9c852140b757b8dbf
2024-04-10 10:48:04 +10:00
Zuul
604ff49456 Merge "Fix redfish detach generic vmedia device method" 2024-04-09 14:57:28 +00:00
Riccardo Pittau
58fc21fc0b Fix redfish detach generic vmedia device method
Fixes usage of redfish detach virtual media feature to be conform to
the general implementation.
Before the detach virtual media API call using redfish driver was not
working as intended and caused the operation to fail.

The method implementation was allowing only a single device_type
while it should be multiple devices to match the conductor manager
implementation.

Change-Id: I9edd3b77eeb3ec1b0484d4e6f0c6dea53e83f9ad
2024-04-09 11:07:50 +02:00
Takashi Kajinami
2f040ea32e Remove unused DEFAULT_NEUTRON_URL constant
This constant is not used by any logic in the current code.

Change-Id: I75122a8c8a3698227b381bb72d58c09d8b77982f
2024-04-08 13:25:27 +09:00
Zuul
d5802f832f Merge "Expose conductor online boolean for accurate alive" 2024-04-07 17:38:51 +00:00
Zuul
243e14359a Merge "Fix generating local paths when connecting virtual media" 2024-04-05 17:44:09 +00:00
Zuul
cf71415410 Merge "CI: Limit redfish https job to wholedisk images" 2024-04-05 14:11:23 +00:00
cid
5552e54d8b Use the new microversion-parse library to parse the version headers
Closes-Bug: #1584718

Change-Id: Icb2e21775d1500878bb6d29f45e82e32f14332aa
2024-04-05 09:28:52 +00:00
Dmitry Tantsur
a9a4fff71c
Fix generating local paths when connecting virtual media
The generate path does not contain the node UUID, causing conflicts.

Also make sure to always clean up any existing files first.

Change-Id: I30f948d64e7b87f33841dc22828db60338a62dd8
2024-04-03 16:16:31 +02:00
Zuul
d68aea2ebe Merge "ci: automatically set the branch for IPA to match TARGET_BRANCH" 2024-04-02 11:21:34 +00:00
Julia Kreger
adef5d60a7 CI: Unpack cirros image partition jobs
Cirros, by default, as part of its initialization, copies the initial
ramdisk contents over the filesystem on disk. This changes the partition
image creation job so we do it upfront so the partition image looks like
and matches what we generally expect from a partition image as opposed
to just a kernel, ramdisk, and bootloader.

Change-Id: Idde30e33e9453f8564a7c3b9109c4e567146dee7
2024-04-02 03:53:37 +00:00
Julia Kreger
16e839d749 CI: Limit redfish https job to wholedisk images
Change-Id: I174b7e01e1009b6e44e529fbc1d4d1d0032f5f85
2024-04-01 17:50:39 -07:00
Julia Kreger
c2dd5fc830 Add note regarding metal3 ci job in CI config for stable runs
Change-Id: I2a9cc075579356c2d3e47b414ae8af162eea1608
2024-04-01 07:29:04 -07:00
Zuul
bc260cc838 Merge "Do not rely on predefined UUIDs in tests" 2024-03-29 16:33:59 +00:00
Zuul
565d18f0d5 Merge "Fix Reopen Web Console Duplicate Sol Session" 2024-03-28 21:41:33 +00:00
Zuul
0d6bbb3620 Merge "Drop fallback to unmanaged inspection for virtual media and UEFI boot" 2024-03-27 22:19:29 +00:00
Zuul
2cb8eafc6a Merge "Fix new codespell issues; tweak config" 2024-03-27 22:13:42 +00:00
Julia Kreger
12cf47da0b ci: automatically set the branch for IPA to match TARGET_BRANCH
... if present, use TARGET_BRANCH parameter to influence which
branch is used for IPA downloads.

Change-Id: I9d8878ddc56f1cd90debfc2e61838162fe39e039
2024-03-27 13:46:52 -07:00
OpenStack Proposal Bot
272344e951 Imported Translations from Zanata
For more information about this automatic import see:
https://docs.openstack.org/i18n/latest/reviewing-translation-import.html

Change-Id: I3394a59586b253c4270b5590ff63b86ab8399d57
2024-03-25 04:45:51 +00:00
Zuul
9fa0320458 Merge "Add redfish https boot CI job" 2024-03-24 21:36:07 +00:00
Riccardo Pittau
388b9ddcac Update min required version of scciclient
For compatibility with pysnmp-lextudio and pyasn1 we increase the
minimum required version of python-scciclient to latest available.
Also capping proliantutils to avoid breaking changes.

Change-Id: I64587d24383dc05927135d7e7e3a2a6975a58558
2024-03-22 13:18:52 +01:00
Steve Baker
161374f763 Expose conductor online boolean for accurate alive
Currently the online database column is not considered when displaying
the "baremetal conductor list" Alive status. This means that when a
conductor is stopped gracefully it will be shown as (inaccurately)
alive for the duration of [conductor]graceful_timeout.

This change adds the online field to the alive evaluation, so the
conductor must be online *and* have a recent heartbeat.

Change-Id: Ic5a8d56ec236faca1b9797bd0d3e42c956469fab
2024-03-22 15:07:12 +13:00
OpenStack Release Bot
cd117d1ed9 Update master for stable/2024.1
Add file to the reno documentation build to show release notes for
stable/2024.1.

Use pbr instruction to increment the minor version number
automatically so that master versions are higher than the versions on
stable/2024.1.

Sem-Ver: feature
Change-Id: Ie669c480f361e7df0ba0566931685a3bf38045a2
2024-03-19 15:25:16 +00:00
Zuul
99b1f9c479 Merge "Bump proliantutils for pyasn1 compatibility" 2024-03-18 16:46:53 +00:00
Zuul
5c00b7cf0b Merge "Fix data length exceeding limit error" 2024-03-18 14:40:05 +00:00
Dmitry Tantsur
b7954ad720
Do not rely on predefined UUIDs in tests
Change-Id: I0e9d73351a92e133cd6c484b5fb415ae005314b0
2024-03-18 12:35:30 +01:00
Dmitry Tantsur
2f399a1fb7
Drop fallback to unmanaged inspection for virtual media and UEFI boot
It is not expected that nodes configured this way start PXE-booting.

Change-Id: I9bc5ab73bb54e0612fb6025f10c4d41a5b8842cb
2024-03-18 10:26:47 +01:00
Riccardo Pittau
d57e113605 Bump proliantutils for pyasn1 compatibility
Latest version moves back to lextduio pysnmp keeping pyasn1
as dependency.

Change-Id: I042a74eccacd6f358daf04d4ccbd53390bcc8df8
2024-03-18 10:14:23 +01:00
Zuul
60e780fe15 Merge "Ignore generated config/policy file" 2024-03-17 23:05:39 +00:00
Zuul
0237392002 Merge "Fix artifical rbac policy constraint that resulted in 500s" 2024-03-17 21:33:45 +00:00
CID
ef8bca007d Fix data length exceeding limit error
This commit increases the length of the 'user' column to
accommodate longer UUIDs, ensuring that the full user UUIDs are stored
without exceeding the column limit.

Closes-Bug: #2054594
Change-Id: I59b435ca2bb5850bb2338228b64868c2003bfea3
2024-03-16 22:26:15 +00:00
Jay Faulkner
10785a0550 Release mappings for 23.1, 24.0, 24.1/2024.1
Release mappings! We made a Caracal!

Change-Id: I0106d43080746e1b159f4a54e6808d477cfbef44
2024-03-15 11:44:13 -07:00
Zuul
8922c79b7c Merge "Support more standard way of passing lists via query strings" 2024-03-15 14:09:31 +00:00
Zuul
2f71e5d512 Merge "Update regex to detect closed branch" 2024-03-15 01:58:15 +00:00
Zuul
f2257d33db Merge "docs: augment admin troubleshooting docs for system scope context" 2024-03-15 01:58:12 +00:00
Zuul
64595e704a Merge "Release notes prelude for 2024.1/24.1" 2024-03-15 01:58:07 +00:00
Zuul
96565b6894 Merge "Tempest test with only wholedisk for some jobs" 2024-03-15 00:46:31 +00:00
Zuul
bf1aadf2bc Merge "Allow usage of virtual media via System" 2024-03-14 22:14:59 +00:00
Zuul
16b0ea709a Merge "Implement generic redfish vmedia attach detach" 2024-03-14 21:39:50 +00:00
Iury Gregory Melo Ferreira
10ebbe74da Tempest test with only wholedisk for some jobs
Changing the ironic-tempest-uefi-redfish-vmedia and
ironic-tempest-ovn-uefi-ipmi-pxe jobs to only run
tempest test_baremetal_server_ops_wholedisk_image.

We saw failures on the partition tests for this jobs.

Related-Bug: #2057972
Change-Id: I2e26d7955ade11046bf89b6f4c9c2c4f16da1574
2024-03-14 18:39:39 -03:00
Jay Faulkner
0c735264d6 Release notes prelude for 2024.1/24.1
Change-Id: If17630cccd4e61d4c966deec6ff473a50752eeb2
2024-03-14 20:12:15 +00:00
Jay Faulkner
45502d7beb Fix new codespell issues; tweak config
Configuration was fine for the gate, but I've updated it to ignore
directories and files that can be found in a well-used development
checkout.

Fixed any new spelling issues.

Change-Id: Icef5addba938b27911c26e841a37a2e9ba3fbe43
2024-03-14 12:57:26 -07:00
Zuul
8fa1de8ab0 Merge "[codespell] Adding CI target for Tox Codespell" 2024-03-14 17:38:09 +00:00
Zuul
4aa096877e Merge "[codespell] Adding Tox Target for Codespell" 2024-03-14 17:13:10 +00:00
Zuul
df9e1ba80e Merge "[codespell] Fixing Spelling Mistakes" 2024-03-14 17:13:05 +00:00
Riccardo Pittau
69635a1597 Move back to plain pyasn1
The latest pyasn1-lextudio patch has been yanked [1] and
all the working versions have been removed from pypi, it
looks like lextudio won't maintain pyasn1 anymore.
We should move back again to plain pyasn1 [2].

Also bump proliantutils min required version as it
has already switched back to working pyasn1 and pysnmp.

[1] https://pypi.org/project/pyasn1-lextudio/
[2] https://pypi.org/project/pyasn1/

Change-Id: Id2e7f75690c42fe0785b4ab0fb0a885261a44aef
2024-03-14 14:40:17 +01:00
Zuul
6c29b2c72c Merge "reno: Update master for unmaintained/xena" 2024-03-14 12:17:52 +00:00
Zuul
728de6ffe8 Merge "reno: Update master for unmaintained/wallaby" 2024-03-14 12:09:49 +00:00
Zuul
99d217718e Merge "reno: Update master for unmaintained/victoria" 2024-03-14 12:09:46 +00:00
OpenStack Release Bot
18e22b0892 reno: Update master for unmaintained/xena
Update the xena release notes configuration to build from
unmaintained/xena.

Change-Id: Iede7e335ad5e2303d7f7e7ec5526cf72fbfb38c2
2024-03-14 11:28:02 +00:00
OpenStack Release Bot
6c6f034e73 reno: Update master for unmaintained/wallaby
Update the wallaby release notes configuration to build from
unmaintained/wallaby.

Change-Id: I1c3d05be89f2101e5f2a72d19b43afa762ff4b7a
2024-03-14 11:23:32 +00:00
Zuul
b19d5bf538 Merge "Temporary move metalsmith legacy CI job to non-voting" 2024-03-14 11:23:02 +00:00
OpenStack Release Bot
667e7bf23d reno: Update master for unmaintained/victoria
Update the victoria release notes configuration to build from
unmaintained/victoria.

Change-Id: Ia14b67a6a0a81e022c4588096078225c546c2c93
2024-03-14 11:18:59 +00:00
Winicius Silva
6d046ad7b4 Allow usage of virtual media via System
DMTF now changes their Virtual Media URI to support Systems. Redfish driver now
support this resource to boot, so it is needed that Ironic have a way to use it.

Closes-Bug: #2039458
Change-Id: I66e8edb847e93f96374072525222f05e7561fb07
2024-03-13 22:02:08 -03:00
Zuul
f5500996f8 Merge "Modify ESP configuring script of redfish document" 2024-03-13 16:29:39 +00:00
Riccardo Pittau
01b868a23e Temporary move metalsmith legacy CI job to non-voting
The job is broken because of an issue with parted.

Change-Id: Id8275e46f4c87f71964bd7afaad772a7bd3080e5
2024-03-13 16:10:28 +01:00
Riccardo Pittau
237510ae2c Implement generic redfish vmedia attach detach
This patch adds implementation of attach/detach generic virtual
media device to the Redfish driver.
Also the redfish vendor eject vmedia action is now deprecated
and it will be removed during the next cycle in favor of the
generic API.

Change-Id: I9daff59128f537a3da2e882adf5c97be9c4ab8d9
2024-03-13 12:09:15 +01:00
Takashi Kajinami
b9be548827 Guide users/developers to launchpad
Ironic team decided to switch back the project to launchpad, so
the reference in README should be updated accordingly.

Change-Id: I4a05e998614aed7ebdd62bf2bc3e28a7fa17a444
2024-03-13 19:34:50 +09:00
Takashi Kajinami
eaf1c4fd3a Ignore generated config/policy file
These files should be generated by tools and should not be added to
the repository.

Change-Id: I5f262d9c0761d1c7a18675b6da36bd388e446c97
2024-03-13 10:32:57 +00:00
Takashi Kajinami
616e6d120a Update regex to detect closed branch
... based on the change made in reno recently[1].

[1] https://review.opendev.org/c/openstack/reno/+/910547

Change-Id: I0eea3de292c5e0f57d2136064e70227c5865c8b8
2024-03-13 19:31:27 +09:00
Zuul
2f3448a421 Merge "Special case lenovo UEFI boot setup" 2024-03-12 22:28:26 +00:00
Julia Kreger
325c2b0a96 docs: augment admin troubleshooting docs for system scope context
Change-Id: I55d94e40e0cc11106b8f0622355db0011e811622
2024-03-12 12:20:31 -07:00
Zuul
5f4b964dd7 Merge "[trivial] add device_type param to attach_vmedia_device" 2024-03-11 22:07:16 +00:00
Zuul
97cf900538 Merge "Switch to qemu-img functions from ironic-lib 6.0.0" 2024-03-11 21:27:15 +00:00
Zuul
bb3b0e9b95 Merge "Add inspection PXE filter service" 2024-03-11 18:31:10 +00:00
Dmitry Tantsur
4b31cc1c48
Switch to qemu-img functions from ironic-lib 6.0.0
Change-Id: I0010d8710db4f2859dabe8ccfa5bf478d4f039f6
2024-03-11 17:16:12 +01:00
Julia Kreger
c6a4005049 Fix artifical rbac policy constraint that resulted in 500s
Some of the endpoints are *highly* restricted in ironic's newer
more stringently enforced RBAC world. Some of these endpoints would
emit 500s by default, when realistically it was the policy definition
saying "only system scope could be used" for the endpoint, but the
reality is that 403 is what should have been returned for a client to
properly understand what is going on.

Change-Id: If5e13764dad886ba3ee1a848f3ff9f3279f4d7f6
2024-03-11 08:07:32 -07:00
Julia Kreger
fcbc2b6df6 Add redfish https boot CI job
Adds a job which utilizes the redfish-https boot mechanism
code which recently landed in ironic, which operates similar
to virtual media

Change-Id: Iad55a263ed34e6b121495b72a3c79449d7471901
2024-03-11 14:15:52 +00:00
Riccardo Pittau
ed14b2e04f [trivial] add device_type param to attach_vmedia_device
We missed it.

Change-Id: I4bd8e07f301a298e495e88a2d80f6932290634ba
2024-03-11 15:11:06 +01:00
Zuul
1e84214d38 Merge "ci: support overriding the service project name" 2024-03-11 12:49:27 +00:00
Zuul
30974ba0da Merge "Fix error handling in the virtual media attach API" 2024-03-08 10:57:19 +00:00
Zuul
c139b22e8a Merge "Detect ilo6 and redirect to redfish" 2024-03-08 02:25:13 +00:00
Zuul
4a147edd4d Merge "Fix multiple assignment of redfish_system_id during node creation" 2024-03-08 01:00:03 +00:00
likui
e5f7e052ac Fix Reopen Web Console Duplicate Sol Session
Reopen web console may occasionally result in duplicated
sol session. get_console action open
one console process while another sol session remains.

This patch adds "sol deactivate" action before get
console. Make sure the current connection always a success.

Change-Id: Ie5d9c94a3e9e3561b6aa1a52462d6739662d4eb0
2024-03-07 15:41:32 -08:00
Dmitry Tantsur
79523c5911
Fix error handling in the virtual media attach API
Currently, if the image download fails, there are no traces of the
error. This change adds logging and populates last_error.

Change-Id: I73ea2f94fb910daf21a5d4f52d6839aac3bad579
2024-03-07 18:48:13 +01:00
Zuul
aa8d9eeb80 Merge "fix errors messaging around network mappings" 2024-03-07 16:17:06 +00:00
Zuul
bc73982a2a Merge "Split conductor-specific RPCService" 2024-03-06 20:53:55 +00:00
cid
abe8843ddc Fix multiple assignment of redfish_system_id during node creation
``redfish_system_id`` is being passed multiple times to the node at
creation as ``node_options`` never defaults back to it's initial state
throughout the iteration of the while loop.

Though it is surprisingly functional, it's fragile and this change aims
to fix that.

Closes-Bug: #2054597
Change-Id: I2c151afafb86191f047985ac00075a791639646d
2024-03-05 16:17:39 +01:00
Zuul
ae51a14bde Merge "Log upon completion of power sync" 2024-03-05 05:59:51 +00:00
Zuul
d56c40e0cf Merge "docs: troubleshooting addition for sync period" 2024-03-05 02:25:25 +00:00
Julia Kreger
d892806768 docs: troubleshooting addition for sync period
Change-Id: Ibda7bdeec6de62c93fa8aa6d5874eea43b3a802d
2024-03-05 01:06:36 +00:00
Zuul
43861609a8 Merge "Don't import sushy conditionally, it's a requirement" 2024-03-04 14:33:23 +00:00
Zuul
8122861dac Merge "ci: pin CI to dnsmasq 2.85" 2024-03-01 15:03:28 +00:00
Zuul
de3fd5d88f Merge "[CI] Support for running with shards" 2024-02-29 23:54:46 +00:00
Julia Kreger
f893c740d7 ci: pin CI to dnsmasq 2.85
A temporary path forward to increase CI stability, by pinning
to what appears to be a "good working version" of upstream dnsmasq
which does not crash fon us.

Change-Id: I3295c92fd7b7871ad351b94f4c6cf0f554279db0
2024-02-29 14:54:40 -08:00
Jay Faulkner
5606c431f2 [CI] Support for running with shards
Adds support for creating nodes with shards.
Adds multinode job to test >1 n-cpus against shards.

Change-Id: I269568d83f17879fed5ac1dd5916935aea1f7fbf
2024-02-29 18:51:56 +00:00
Dmitry Tantsur
934658dab4
Support more standard way of passing lists via query strings
Currently, arguments like "fields", "shared" or the new "device_types"
only accept comma-separated strings. While there is no single standard,
the most common approach is to repeat the arguments, i.e.

 NOT /nodes?fields=uuid,name
 BUT /nodes?fields=uuid&fields=name

Unfortunately, at least GopherCloud already relies [1] on the more common
(but not currently working in Ironic) behavior. Let's make it work.

[1] 8455d01343/openstack/baremetal/v1/nodes/testing/requests_test.go (L87)

Change-Id: Ia780b10986929d79dc4f334d278bcb00a9984fd0
2024-02-29 17:08:18 +01:00
Zuul
78b6f00af8 Merge "Trivial: include vmedia API in the reference" 2024-02-29 10:30:27 +00:00
Dmitry Tantsur
44939f1ab3
Trivial: include vmedia API in the reference
Change-Id: If5049e526e07d3f472358a61aa750fe4bad750b6
2024-02-29 10:50:55 +01:00
Zuul
f6f8f0f991 Merge "Multiple CI updates/improvements" 2024-02-29 09:47:29 +00:00
Zuul
a7ce0d7ae6 Merge "Add a reserved workers pool (5% by default)" 2024-02-29 07:22:42 +00:00
Julia Kreger
f28b23f8c8 Multiple CI updates/improvements
* Adds httpboot enabled CI

Sets the interfaces to be enabled on the standalone job
in anticipation for standalone job support for these
interfaces[0] and switches the boot from volume
job over to utilize httpboot by default.

* Phases out now-redundant ironic-standalone job

The ironic-standalone job does all the same work as the
ironic-standalone-redfish job, and IPMI CI jobs are covering
IPMI cases. So we don't need this anymore.

Also makes a note on another redfish job which is likely
redundant as well, although does not yet remove it.

* Fix IPMI Partition Job name

This is more of a test of OVN than of partition specifically,
in fact, it runs both wholedisk and partition jobs already. Make
the name more sensible.

[0]: https://review.opendev.org/c/openstack/ironic-tempest-plugin/+/902171

Co-Authored-By: Julia Kreger <juliaashleykreger@gmail.com>
Change-Id: I6c41b8f124e2e1fbc314243bf821153d79e2e09b
2024-02-28 13:04:47 -08:00
Jay Faulkner
db7e74fd71 [ci] Temporarily disable standalone job voting
DNSMasq is not cooperating with us; it's respawning frequently.
Temporarily make these non-voting while we troubleshoot.

Change-Id: I0dcb09f31254d81d3a5ec9a52304bab93901e8f6
2024-02-28 12:32:48 -08:00
Zuul
471931d7c5 Merge "Force constraints when installing a package during tox test" 2024-02-28 19:18:51 +00:00
Zuul
eb5434b624 Merge "Handle jsonschema empty error message update" 2024-02-28 19:18:46 +00:00
Dmitry Tantsur
89fe0396af
Add inspection PXE filter service
The logic to handle dnsmasq hostfiles is moved from ironic-inspector
with only cosmetic changes. The logic to purge the hostsdir is not
copied since it relies on running commands with root privileges.
A documentation example is added instead.

The change is missing the RPC call to notify the filter about changes.
It will be done in a follow-up.

Change-Id: Ie32018c760c39873ead1da54cfaeae87eaaaf043
2024-02-28 18:13:56 +01:00
Dmitry Tantsur
803d08cb88
Don't import sushy conditionally, it's a requirement
Change-Id: I5fcedfc89ac18025c178e8a5f6750802005d1507
2024-02-28 16:56:17 +01:00
yatinkarel
27f53debb6 ci: Source install dnsmasq-2.87
dnsmasq-2.86 shipped in Ubuntu jammy has a
known issue[1] which is fixed in dnsmasq-2.87
but it's not yet released with Ubuntu jammy.

Until fixed version is available in Ubuntu
jammy let's use source install instead of
using a older version from Ubuntu focal.

[1] https://lists.thekelleys.org.uk/pipermail/dnsmasq-discuss/2022q3/016562.html

Update from Julia:

Pushing forward the source fix again as ubuntu removed the
prior path we were using as a focal package and replaced
it with a package which is demonstrating the same basic issue.

Related-Bug: #2026757
Change-Id: I7ffcd167fc1e3a8c1192d766743bb5620d85ef35
2024-02-27 14:48:59 -08:00
frankming
e15c4f1bf3 Modify ESP configuring script of redfish document
doc/source/admin/drivers/redfish.rst has a ESP configuring script.
However, it not works. In script, DEST is the destination esp image
path that can not mkdir or cp on it. We need fix it and using mtools
instead of sudo+mount.

Story: 2011051
Task: 49615
Change-Id: Ibdd60bea2f742e8e698d9dbcfef7059a9a71242f
Signed-off-by: frankming <chen27508959@outlook.com>
2024-02-27 11:43:27 +08:00
Dmitry Tantsur
a9397f49d5
Split conductor-specific RPCService
The current implementation in common has a lot of assumptions that the
manager is a conductor manager. To be able to reuse the same base RPC
service for the PXE filter, split the conductor part away from the
common one.

Change-Id: I4d24cf82d62cb034840435ef15b5373748b65f09
2024-02-26 18:17:52 +01:00
Julia Kreger
6822f8b22f fix errors messaging around network mappings
While looking at fixing a bug around enforcement of
the presence of specific ironic.conf parameters which
don't need to be present in all cases, I noticed we
had translated indicator message strings (which of course
are not actually translated, but really should be the actual
configuration paramter name in ironic.conf *OR* driver_info.

So ultimately, I decided to fix the text to be accurate
and appropriately verbose for the current ways it can be
configured, as opposed to the singular way it was available
when the capability was first added to Ironic.

Change-Id: If402814791554ef3143e25426fdc7e49a5b04810
2024-02-22 13:14:13 -08:00
Julia Kreger
50ced3a3fa neutron: do not error if no cleaning/provisioning on launch
In the early days of the neutron network interface, we had a hard
launch failure added to prevent ironic.conf from having a neutron
network configuration which was not valid when the neutron network
interface was in use.

But as time has moved on, these settings became node-settable,
and ironic configuration largely became mutable as well, so they
can always be added after the process has been launched.

But we kept the error being returned. Which doesn't make sense
now that it can always be back-filled into a working state
or just entirely be "user supplied" via the API by an appropriate
user.

Closes-Bug: 2054728
Change-Id: I33e76929ca9bf7869b3b4ef4d6501e692cf0a922
2024-02-22 13:14:13 -08:00
Zuul
0cfe290d15 Merge "Ensure all errors are passed during cleaning" 2024-02-21 07:04:14 +00:00
Riccardo Pittau
4b8e0f04a2 Handle jsonschema empty error message update
Starting from jsonschema v4.21.0 the message for empty objects
validation changes from "is too short" to "should be non-empty" [1].
Handle the two cases so we don't break in case of upper-constraints
change.

[1] a1d4cb3b94

Change-Id: I01336d2966bdad8f8e2aec7a522644cff1d5c341
2024-02-20 16:59:02 +01:00
Zuul
245505dc04 Merge "Improve clarity of exception message" 2024-02-18 13:56:01 +00:00
Julia Kreger
4fb1b813f4 Special case lenovo UEFI boot setup
Special cases boot/uefi record setup to focus on UEFI
nvram updates instead of attempting nvram updates *and*
setting the boot device to disk.

Closes-Bug: 2053064
Change-Id: Ic6584479a47146577052d17fa3f697eef64ac73c
2024-02-17 15:54:25 +00:00
Zuul
af64bc596c Merge "Online migration for inspect_interface inspector->agent" 2024-02-17 02:03:14 +00:00
Julia Kreger
13d38c0352 docs: add additional content for host clock skew
Change-Id: I2dba4e6c6f450fbba3c9b3d75cce272c085b606b
2024-02-16 09:42:24 -08:00
Julia Kreger
ab5d0cadb0 ci: support overriding the service project name
Extension to extend the default service project name
value, which if set can be overrridden in Ironic's policy
configuration.

Change-Id: I60cc53a34c7062261703492e720989efedca4f2b
2024-02-16 07:24:46 -08:00
Afonne-CID
4a9a7949cb Improve clarity of exception message
If user runs `ironic node-create -d <driver>` with a driver that is not
enabled or activated, or when no registered conductor service which
supports the given driver in a specified conductor group is found,
the current exception may not be clear enough or confusing for users.

This proposed change would prompt user to ensure that the input driver
is valid and enabled, and guide to run the `driver-list` subcommand to
show the current supported drivers; adding context for the reason for
the exception.

Now, if input driver is not valid or enabled, we get below message:
"No conductor service registered which supports driver <driver> for
conductor group "<group>". Ensure the driver is valid and enabled. (HTTP 400)"

Implements: clarity of exception message
Closes-Bug: #1398286
Change-Id: I592f3ce278d1b536ed91c3340b7f270985e309ac
Signed-off-by: Afonne-CID <delightinbusiness@gmail.com>
2024-02-16 15:13:23 +01:00
Julia Kreger
19bc67c196 ci: allow service role CI account usage to have elevated access
When I thought change I2b4bcc748b6e43e4215dc45137becce301349032
was going to fix everything, that was with the mental model that
it was going to be enabled by default. That didn't happen in
review as part of the service, but the reality is we still have
some adjacent CI jobs which need it to operate properly.

Given CI, it is just invoked when scope enforcement is enabled
for CI purposes

Change-Id: I60074504742d8b09017acbb42d2706215b0169af
2024-02-15 20:45:51 +00:00
Julia Kreger
82dbaa9668 Log upon completion of power sync
Previously, we updated node_periodic so we understood from the
logs when a periodic task was completed, so we could understand
where things were at in our hunt for database lock racess.

In any event, we now explicitly log in the _sync_power_state
method of the conductor, because it is not a node_periodic.

Change-Id: Iaec9926fe031e65de4732ff0bc7988c5604d4755
2024-02-13 15:28:42 -08:00
Julia Kreger
e8cb96efc5 Detect ilo6 and redirect to redfish
We got a report of ilo6 BMCs not working with the ilo hardware type,
and while information is limited, it seems reasonable to at least log
some information on this subject and start discussion of what should
we do.

Hence the creation of this patch.

See: https://meetings.opendev.org/irclogs/%23openstack-ironic/%23openstack-ironic.2023-07-05.log.html#t2023-07-05T11:06:08
Change-Id: I2d81ef736aca44f455f8233c32c0c8d12267d57f
2024-02-13 23:05:26 +00:00
Zuul
8ec5606622 Merge "follow-up: docs fix for add HTTP versions of network boot interfaces" 2024-02-13 00:57:21 +00:00
Sharpz7
563fb3886d [devstack-RBAC] - Edit docs to reflect RBAC changes.
This is the first of potentially many commits to update away from openrc auth towards RBAC auth in devstack.

This commit focusses on the documentaition changes only, with future commits dealing with shell script changes and anything else that needs to change.

Change-Id: Ibb13993a0fd251f8948c7a813ed67cae701dab01
2024-02-12 20:07:27 +00:00
Sharpz7
047b510417 [codespell] Adding CI target for Tox Codespell
Third in a series of commits to add Codespell to Ironic Repos. This commit adds the Tox Target to CI

A future commit could potentially add a git-blame-ignore-revs file if their are lots of spelling mistakes that could clutter git blame.

Change-Id: I82239bd5ca1b184e36c63d08413362c76fa8d4b4
2024-02-12 19:59:12 +00:00
Sharpz7
d9283af213 [codespell] Adding Tox Target for Codespell
Second in a series of commits to add Codespell to Ironic Repos. This one adds the command that was used to fix the spelling errors.

Future Commits will add CI support and potentially a git-blame-ignore-revs file if their are lots of spelling mistakes that could clutter git blame.

Change-Id: I206f51f277d19bbcec450ed5312cd30d6fba8432
2024-02-12 19:59:06 +00:00
Sharpz7
949387bd80 [codespell] Fixing Spelling Mistakes
This is the first in a series of commits to add support for codespell. This is continuning the process completed in ironic-python-agent.

Future Commits will add a Tox Target, CI support and potentially a git-blame-ignore-revs file if their are lots of spelling mistakes that could clutter git blame.

Change-Id: Id328ff64c352e85b58181e9d9e35973a8706ab7a
2024-02-12 19:58:56 +00:00
Zuul
b0e443f77f Merge "Add HTTP versions of network boot interfaces" 2024-02-12 18:52:24 +00:00
Riccardo Pittau
5c781a916c Force constraints when installing a package during tox test
The tox deps option grants installation of single dependencies and
requirements, optionally pinned using constraints, before installing
a package, therefore not granting installation of the correct
constraint during the package installation.
To fix that tox 4.4.0 has introduced the constrain_package_deps
option [1]

[1] https://tox.wiki/en/4.12.1/faq.html#using-constraint-files

Change-Id: I94f02c99d1301e9dcdecb8b5565ef6a24204dc69
2024-02-12 14:54:38 +01:00
Sharpz7
41ee6aa2ff Ensure all errors are passed during cleaning
Related Bug: https://bugs.launchpad.net/ironic/+bug/1628422

This change makes sure that the caught error is passed through to node_history_record()

Change-Id: I9b78ec37f37024d04928403bbf0b85ed96906441
2024-02-10 00:25:11 +00:00
Julia Kreger
479438d1f2 follow-up: docs fix for add HTTP versions of network boot interfaces
Follow-up to Ie7ace88b62b9179f640ef2a732dd228e12bd320d

Change-Id: I79886031de0d294407831b0da826b1732ac3c7b9
2024-02-09 13:16:47 -08:00
Julia Kreger
e19fd1d050 Add HTTP versions of network boot interfaces
This change adds two network boot interfaces, ``http`` and
``http-ipxe``. These interfaces are based upon the underlying PXE
boot interface code in ironic, and where this differs is it signals
to Ironic that we must do the boot loader needful in terms of telling
DHCP to send a URL instead of a filename and IP address for PXE
as a starting point.

The naming of the interfaces focuses more on the transport mechanism
and then specific style. Very similar to existing ``pxe`` and ``ipxe``
interface modeling, except in the ``ipxe`` case, it is more a specific
loader and mechanism to be utilized.

Related-Bug: #2032380
Change-Id: Ie7ace88b62b9179f640ef2a732dd228e12bd320d
2024-02-09 13:13:19 -08:00
Jay Faulkner
7ca3995267 Fix release mappings for 2023.2
We added servicing and did not update release mappings, nor did we
update release mappings for final Ironic release of 2023.2.

Change-Id: If4c43e353eb4bba7ae62def84d74877039b170b0
2024-02-09 11:00:44 -08:00
Dmitry Tantsur
8dd09d3962
Online migration for inspect_interface inspector->agent
Change-Id: If29bd3e3370c831d171c84846373c0bc374efc09
2024-02-08 13:24:24 +01:00
Zuul
bd7b562bc0 Merge "trivial: fix api-ref generation script" 2024-02-07 20:58:28 +00:00
OpenStack Release Bot
2ea060d309 reno: Update master for unmaintained/yoga
Update the yoga release notes configuration to build from
unmaintained/yoga.

Change-Id: I8144ff85e974a9f52f1dd231d665376e0e1a3150
2024-02-06 15:04:31 +00:00
Zuul
5a5c892831 Merge "tox: Drop envdir" 2024-02-05 19:16:51 +00:00
Julia Kreger
768f585603 packaging: reduce jsonschema revision
The VTEP switch support patch merged with a constraint of jsonschema
version 4.19 or above.

Except Debian only currently has 4.10, Centos 9 Stream only has 4.16,
and at present launchpad and the ubuntu mirror list is non-functional.

So in the interest of of packagers, we'll lower the version.

Note: I was able to successfully execute the unit tests with jsonschema
4.0.0 installed in the py3 virtualenv.

Change-Id: Ic3667a7663b7bd5dfad4665321d9c82cc08cc885
2024-02-05 07:27:35 -08:00
Zuul
67b198a29a Merge "Basic support for OVN VTEP switches" 2024-02-05 12:40:24 +00:00
Julia Kreger
8b79a20d7b trivial: fix api-ref generation script
A long time ago, Mario filed a BZ. But nobody fixed it.

It was an easy fix, and I've done it here.

Closes-Bug: 1662326
Change-Id: I89d4fd9dd93950ff59419c913fe292de17b112e7
2024-02-02 16:38:41 -08:00
Takashi Kajinami
b6f062a8e8 tox: Drop envdir
tox now always recreates an env although the env is shared using envdir
options.
~~~
$ tox -e genpolicy
genpolicy: recreate env because env type changed from
{'name': 'genconfig', 'type': 'VirtualEnvRunner'} to
{'name': 'genpolicy', 'type': 'VirtualEnvRunner'}
~~~

According to the maintainer of tox, this functionality is not intended
to be supported.
https://github.com/tox-dev/tox/issues/425#issuecomment-1011944293

Change-Id: I71faa02e183ab29511768bca5f84461bcd3b1fe3
2024-02-02 23:29:33 +09:00
Takashi Kajinami
055224c5e2 Use .coveragerc file
... instead of defining the omit options multiple times.

Change-Id: I14c921454dd50854da64bd1ed039d0cdcbb27f75
2024-02-02 23:17:12 +09:00
Dmitry Tantsur
307c4572a6
Add node auto-discovery support for in-band inspection
This is a MVP of auto-discovery with no extra customization and no new
auto_discovered field from the spec.

Change-Id: I1528096aa08da6af4ac3c45b71d00e86947ed556
2024-02-02 09:24:52 +01:00
Zuul
7996f10247 Merge "Fix service role support" 2024-02-01 04:23:06 +00:00
Julia Kreger
0313ce26b5 Fix service role support
Turns out the service role support doesn't quite work,
because you could not enumerate nodes regardless of node
owner or lessee in order to enable services like Nova to
enumerate nodes to be able to schedule upon them, or
networking-baremetal to enumerate ports in update mapping
in Neutron.

So this change enables permissions to be modified to allow
service project users with the service role to enumerate the
list of resources, and grants rights similar to "system scoped
members" to the service project's users with the "service" role
which aligns with update actions to provision/unprovision nodes.

Adds some additional rbac testing to ensure we appropriately
covered these access rights.

Closes-Bug: 2051592
Change-Id: I2b4bcc748b6e43e4215dc45137becce301349032
2024-01-31 15:27:57 -08:00
Zuul
9050f66a1b Merge "Remove the sphinxcontrib-seqdiag dependency" 2024-01-29 18:19:16 +00:00
Zuul
bf8953a214 Merge "More precise comment about when to disable v6" 2024-01-29 18:19:14 +00:00
Zuul
8fe3c0f35b Merge "Remove dependency on pytz" 2024-01-29 09:15:13 +00:00
Takashi Kajinami
c6e0553588 Remove dependency on pytz
pytz will be removed from RHEL/CentOS 10 because of the built-in
zoneinfo[1].

Because the current usage of pytz can be very easily replaced, this
removes the dependency on pytz.

[1] https://issues.redhat.com/browse/RHEL-219

Change-Id: Ia72c528eadeccf6075894ff58477fecade65ad71
2024-01-27 19:40:34 +09:00
Jay Faulkner
4ac42cac1b More precise comment about when to disable v6
Follow-up to Clark's comment on
https://review.opendev.org/c/openstack/ironic/+/905996

Change-Id: I259fb72f0e27a400ee35ac0e8c4fc79669c0004e
2024-01-26 15:16:55 -08:00
Mahnoor Asghar
7705b0b2d6 Remove the sphinxcontrib-seqdiag dependency
Remove the sphinxcontrib-seqdiag dependency as the Pillow upgrade to
version 10.x (from OpenStack upper constraints) breaks its usage.
In the ironic source docs, reference the svg files in the rst files,
and keep the .diag files in the doc/source/images/ directory as backup.

Closes-Bug: #2026345
Change-Id: I54cea22e963441b729d4201ad9f8a055a65b54f8
2024-01-26 15:09:32 +01:00
Zuul
54a82d2b6d Merge "RedfishFirmwareInterface - Unit Tests & More logs" 2024-01-25 22:25:01 +00:00
Zuul
4f187a9671 Merge "Fix bug in devstack-guide: readd server create" 2024-01-25 01:02:55 +00:00
Iury Gregory Melo Ferreira
32c9c74459 RedfishFirmwareInterface - Unit Tests & More logs
I totally missed Julia's comment in the review, this commit
adds unit tests for the RedfishFirmwareInterface and also more
logs when a specific component is missing.

Change-Id: Ice2c946726103d9957518c2d30ddad3310ee145d
2024-01-24 18:39:42 -03:00
Zuul
b256551b19 Merge "Disable legacy RBAC policy by default." 2024-01-23 21:58:26 +00:00
Zuul
1b7cb35030 Merge "typo: fix a typo in api configuration" 2024-01-23 21:54:25 +00:00
Zuul
cd17f5e61a Merge "Drop rootwrap support" 2024-01-23 20:14:36 +00:00
Zuul
13d6b02716 Merge "add default conductor group capability" 2024-01-23 19:17:57 +00:00
Julia Kreger
83001d62e2 typo: fix a typo in api configuration
I spotted a typo in the api configuration section for a knob which
was added a while back. Super quick fix.

Change-Id: Ie488143b8383c350de1e36aa0b5cb9b9424ebb3f
2024-01-23 10:24:43 -08:00
Zuul
805bb47f26 Merge "Account for nodes with the same BMC hostname in inspection lookup" 2024-01-23 17:59:14 +00:00
Zuul
3d5ef6a7e9 Merge "Flip require_managed_boot to True for the new agent inspection" 2024-01-23 16:26:46 +00:00
Zuul
ef6e93271d Merge "PXE configuration guide for unmanaged inspection" 2024-01-23 15:30:47 +00:00
Zuul
2751ded6a4 Merge "Clean up removed services from devstack options" 2024-01-23 14:01:49 +00:00
Takashi Kajinami
c7d490f84f Clean up removed services from devstack options
The following services were removed some time ago.
 - nova-objectstore
 - nova-consoleauth
 - glance-registry

Change-Id: I3a577c44abe46fc6cb146f3540bded1c5cb4a511
2024-01-23 12:48:30 +09:00
Zuul
1831b9947a Merge "Stop using a specific mirror in infra" 2024-01-23 01:24:13 +00:00
Julia Kreger
4359323558 Disable legacy RBAC policy by default.
Change the default RBAC policy in ironic such that the new RBAC
policy is enforced by default and the legacy policy is not usable
unless explicitly re-enabled.

Depends-On: https://review.opendev.org/c/openstack/metalsmith/+/905012
Change-Id: Id559f1d8b9a76c8a570b598585c2d58c56d08837
2024-01-22 11:10:53 -08:00
Dmitry Tantsur
2e8db13e09
Flip require_managed_boot to True for the new agent inspection
This value is a way for an operator to signal Ironic whether they have
an infrastructure for unmanaged inspection. Previously, unmanaged
inspection was considered to be always supported. With this change,
the inspector-based inspection works as previously, while the new
built-in inspection defaults to only managed inspection.

Change-Id: I4a9125881dc5822656efde1346807c3dd749973e
2024-01-22 19:54:20 +01:00
Dmitry Tantsur
bf673c2761
Account for nodes with the same BMC hostname in inspection lookup
Currently, the code expects a given hostname to be used by one one node.
This is not necessarily the case for Redfish where several Systems can
co-exist under the same BMC. Use MAC addresses to distinguish them.

Add more inline comments to explain the process.

Change-Id: Ifc5a18bffc7cbcdd8bbbd660aba61fa11403e7e8
2024-01-22 18:26:04 +01:00
Takashi Kajinami
7032a0d9ac Stop using a specific mirror in infra
The host currently hard-coded is not functioning. This replaces
the hard-coded mirror by the local CI mirror detected. In case
mirror info is not available then upstream centos mirror is used.

Change-Id: I96a8cb45154c9dbb50efecc22d34c4ff75c6722a
2024-01-22 22:11:08 +09:00
Zuul
a42f23f475 Merge "Don't create a hardlink to a symlink when handling file:// URLs" 2024-01-20 00:23:33 +00:00
Boushra Bettir
ed946c4d55 Basic support for OVN VTEP switches
Adds basic support for passing OVN VTEP switch metadata to
neutron via Ironic's port.local_link_connection field.

Adds microversion 1.90 to Ironic's API, adding support for
new schema in port.local_link_connection

Bump version of the jsonschema library to ensure consistent
behavior with new schema configurations.

Add documentation warning: This has not been tested as no
Ironic developers have access to the hardware in question.

Closes-bug: #2034953
Co-Authored-By: Austin Cormier <acormier@juniper.net>
Co-Authored-By: Jay Faulkner <jay@jvf.cc>
Change-Id: Ie98dc4552ec2ea16db1e2d382aed54ce9dfef41b
2024-01-19 13:37:12 -08:00
Dmitry Tantsur
0b3ed093ea
Don't create a hardlink to a symlink when handling file:// URLs
While os.link is supposed to follow symlinks, it's actually broken [1]
on Linux. As a result, Ironic may end up creating a hard link to
a symlink. If the symlink is relative, chances are high accessing the
resulting file will cause a FileNotFoundError.

[1] https://github.com/python/cpython/issues/81793

Change-Id: Ic52f0ddb0c94410dd854ee525e3c57b2e78ea84d
2024-01-18 16:49:39 +01:00
Zuul
a374a0c123 Merge "Validate [deploy] image_server_auth_strategy" 2024-01-18 11:18:17 +00:00
Jay Faulkner
ccfefa4772 Fix bug in devstack-guide: readd server create
Apparently when I refactored this document, I omitted the actual
section which instructed you how to create the machine. This corrects
that omission.

Whoops.

Change-Id: Ibee5afa33920647a457d3c5182c28bbd92d55ef6
2024-01-17 12:06:04 -08:00
Sharpz7
ebd8381dbf Corrected IP_ADDRESS to IP_VERSION
Validated IP_VERSION is the correct key for devstack.

Change-Id: Id73a6c1b41cb86dab37fe650bf7bdae60d697bf6
2024-01-17 19:15:29 +00:00
Zuul
e1a8e4ba6c Merge "Revert "Revert "RBAC: Fix allocation check"" to use Unauthorized" 2024-01-17 13:14:49 +00:00
Julia Kreger
4398c11a5f Revert "Revert "RBAC: Fix allocation check"" to use Unauthorized
In the backports to fix the policy of the original change, Dmitry
noted that it was actually wrong, because we should have instead
raised NotAuthorized. Dmitry was absolutely correct, because in hind
sight I made the change trying to keep exactly the same behavior,
but the reality is this is a case where we should be explicit,
and tell the user they have done something forbidden.

This revert of the revert fixes that change.
Original Change: https://review.opendev.org/c/openstack/ironic/+/905038
Dmitry's Review Feedback: https://review.opendev.org/c/openstack/ironic/+/905088

Change-Id: I5727df00b8c4ae9495ed14b5cea1c0734b5f688d
2024-01-16 11:11:00 -08:00
Zuul
30340e29cf Merge "docs: add distribution specific chain of trust warning around grub" 2024-01-16 18:52:58 +00:00
Zuul
9dc2567336 Merge "[deploy] image_server_password should be secret" 2024-01-16 18:52:55 +00:00
Zuul
3d7b088a23 Merge "Revert "RBAC: Fix allocation check"" 2024-01-16 18:40:13 +00:00
Julia Kreger
4b31633862 Revert "RBAC: Fix allocation check"
This reverts commit c901b15f6c.

Reason for revert: Should have been Unauthorized.

Change-Id: I0febafd2a603ad991b4b677a94773c891ad3465c
2024-01-16 15:10:56 +00:00
Takashi Kajinami
fba57d5954 Validate [deploy] image_server_auth_strategy
The [deploy] image_server_auth_strategy option effectively supports
only noauth or http-basic. However in case an operator set this to
an unsupported value, it results in incomplete behavior without any
explicit error. This is quite confusing and can cause difficulty in
troubleshooting.

This adds validation of the configuration to make operators aware of
any invalid value to improve operator's experience.

Change-Id: I2acf12f81bb64027eeb50924c2ac215c4270ca87
2024-01-16 09:46:20 +00:00
Takashi Kajinami
8dc1eceada [deploy] image_server_password should be secret
Apparently the option accepts a credential which should be hidden from
logs.

Change-Id: I0854c79e9d481120c1b7115c914580dca82a805b
2024-01-16 11:55:36 +09:00
Zuul
88fcf8aa14 Merge "Redfish UefiHttp boot support" 2024-01-15 09:52:12 +00:00
Zuul
336f799641 Merge "CI: Remove ironic-inspector-tempest-managed-non-standalone" 2024-01-12 02:16:39 +00:00
Zuul
ae80ee5a59 Merge "Add df logs to metal3 integration job" 2024-01-11 23:42:49 +00:00
Zuul
8eceb9bbc0 Merge "Fix versions in release notes" 2024-01-10 15:10:38 +00:00
Zuul
653d83a793 Merge "Make bandit voting on check and gate" 2024-01-10 13:31:53 +00:00
Zuul
05a82bb295 Merge "RBAC: Fix allocation check" 2024-01-10 04:43:25 +00:00
Zuul
d8613e54ae Merge "Fix system scoped manageable node network failure" 2024-01-10 04:43:23 +00:00
Riccardo Pittau
d738df5aa0 Add df logs to metal3 integration job
Change-Id: Ic785cbc8d21e346ce4ddac13cd8d525d588c4682
2024-01-09 17:29:00 +01:00
Julia Kreger
84397f3501 CI: Remove ironic-inspector-tempest-managed-non-standalone
The standalone job has not passed on the master branch in a
very long time. I stopped looking at the history as of August 2023,
but it was only passing on Xena and Wallaby stable branches.

A few things to note:

* It appears to be intended to exercise inspector as a WSGI app,
  and loads quite a bit of different configuration.
* Overall, it is failing due to the image it is trying to use
  (cirros) which doesn't support setting a bootloader up, but
  that is sort of required.
* Job is configured to netboot a node for an OS on the disk,
  but that is not something ironic does really anymore. Quite
  possibly, that is why the job is failing.
* Inspector, as a non-integrated thing, is on the path of
  deprecation at this point, so we don't really need to focus
  on this specific case anymore.

Overall, it seems like a job we should have just removed some
time ago. So... doing so.

Change-Id: I3aca63c183af863d9db1f27a4cfe0d6495bb03c2
2024-01-08 21:00:23 -08:00
Julia Kreger
c901b15f6c RBAC: Fix allocation check
The tl;dr, is when the allocation owner support was added,
it was done so to try and use the same exception
being raised for two distinct cases. An invalid request,
and a mismatch. The reality is, we should be raising them
separately because there are two different cases we need
to guard against.

This was discovered when changing Ironic's default RBAC
policy enforcement so that the legacy policy is no longer
enabled, which meant the default path on the owner logic was
thus triggered, resulting in the failure and need to fix it.

Closes-Bug: #2048698
Change-Id: I0feefc273a2d18e7812139f59df3f43aba7d7936
2024-01-08 16:46:53 -08:00
Julia Kreger
c3074524da Fix system scoped manageable node network failure
Before this change, if a user requested a node to be cleaned
or "managed" with cleaning enabled when the user is in the
system scope, Ironic would attempt to user's token to
make the request to Neutron.

This, unfortunately, does not work, as the neutron client explicitly
requires a project ID to make the request to Neutron. As a result,
Ironic now falls back to it's internal credential configuration to make
the forward request, which matches the behavior if a node has been
unprovisioned and the cleaning has been started automatically.

Closes-Bug: 2048416
Change-Id: Id91ec6afcf89642fb3069918e768016b8b657a31
2024-01-08 10:22:04 -08:00
Dmitry Tantsur
be09717be2
Drop rootwrap support
After removing the iSCSI deploy and changing ISO parsing code to use
a corresponding library, Ironic no longer executes any commands as root
and it should stay this way.

Change-Id: I47d2bab9b94345fbcf89a2a80028853050a041ea
2024-01-08 18:02:27 +01:00
Zuul
47bb3da3eb Merge "Handle LLDP parse Unicode error" 2024-01-06 00:30:49 +00:00
Zuul
a65ee2d443 Merge "Remove unnecessary egg_info options" 2024-01-05 02:08:15 +00:00
Zuul
6edb815864 Merge "[Docs] Adds changes to 'iLO' docs regarding Gen11 support" 2024-01-05 02:08:08 +00:00
Zuul
e3bc2bdf34 Merge "Do not log lack of metrics support at WARNING lvl" 2024-01-05 02:08:04 +00:00
Zuul
52284d08f0 Merge "Fix typo in xclarity docs" 2024-01-05 01:12:52 +00:00
Dmitry Tantsur
92eb542511
PXE configuration guide for unmanaged inspection
To a large extent, copy-paste from the Inspector docs. Adjusted some
wording to be more generic. Migrated the (un)managed docs since they
apply to both implementations and are important for understanding.

Change-Id: I7d6cdb34f1ffce53b3cac48c8e2df09f8a861422
2024-01-04 16:42:45 +01:00
Julia Kreger
041a7d7064 Redfish UefiHttp boot support
Adds a redfish-https boot interface, based upon the
redfish-virtual-media boot interface, however substantially copies
some base methods because of simplification offered to use by
putting "attach/detach" logic into how the sushy library handles
the application and reset of a URL as a boot setting.

This feature also increases the requirement for the Sushy library
to version 4.7.0 which includes support to set the HttpBootUri
field in the BMC and automatically unset it as well.

Closes-Bug: #2032380
Change-Id: I991611cd67cb91aea21fc30bbae7cd24409dbbfa
2024-01-04 07:12:20 -08:00
Julia Kreger
310603f3ba Make bandit voting on check and gate
Bandit 1.7.5 introduced some changes which broke the bandit job,
which caused the job to fail ages ago. We've since fixed those.

But, moving forward we need to fix these relatively quickly when
they occur, as such changing the test to voting improves our overall
security posture by forcing us to address these as they occur.

Change-Id: I4a7954bfd20eafdb578896e1f61204edc7f9ec7e
2024-01-03 15:29:53 -08:00
Julia Kreger
a40e3fd5ae docs: add distribution specific chain of trust warning around grub
Change-Id: Ibf30ae4f47d13785dfb03e7d7074ac4e1078938a
2024-01-03 15:23:42 -08:00
Riccardo Pittau
4d3101940a Handle LLDP parse Unicode error
Closes-Bug: #2044793
Change-Id: I48c18d1648d446d426515456a4006947b79a9ef3
2024-01-03 14:36:23 +01:00
Zuul
76f68582d6 Merge "Update to latest pep8/code style versions" 2024-01-02 04:08:05 +00:00
Zuul
2403cd6041 Merge "CI: use Swift for configdrive when available" 2023-12-29 23:31:04 +00:00
Jay Faulkner
b0b7ee4254 Do not log lack of metrics support at WARNING lvl
We have some drivers, such as SNMP, which do not support metrics.
Environments with these nodes should not get "N" messages for "N" nodes
that can't generate sensor data.

Closes-bug: 2047709
Change-Id: Ibc1f3feb055521214512c8b350d67933491c2550
2023-12-29 10:59:42 -08:00
Jay Faulkner
fe48440326 Update to latest pep8/code style versions
Update to latest versions for pep8 tox environment, correct any failures
created by change.

Change-Id: I605193dacc5e6be5c664b8daab44be16065b154d
2023-12-28 14:23:05 -08:00
Pierre Riteau
c3296bba38 Fix typo in xclarity docs
Change-Id: Ic5ba6071b788db85bc1962cb23e09f9abdbdf46b
2023-12-22 16:58:32 +01:00
Zuul
cf7b182ac3 Merge "Test redfish with reduced sushy-tools feature set" 2023-12-20 18:12:59 +00:00
Paresh Sao
ce4d8a6bcf [Docs] Adds changes to 'iLO' docs regarding Gen11 support
Documentation patch for declaring support for new Gen11 HPE servers
based on 'iLO6' firmware.

Change-Id: I4fc292156a0abb84f38bec131efe2b1305548b9a
2023-12-20 12:12:19 +00:00
Riccardo Pittau
3489a0204c Fix versions in release notes
Change-Id: Ic29f0923f183a8ee3b9b3ca21c33b527573e606b
2023-12-20 10:21:59 +01:00
Takashi Kajinami
12cb5bc8b1 Remove unnecessary egg_info options
The tag_svn_revision option was already removed[1]. The values set to
the other two options are effectively same as their defaults.

[1] https://github.com/pypa/setuptools/issues/619

Change-Id: I6e0cbebac7cd33ad970d921ae761444db7f89a81
2023-12-20 11:34:50 +09:00
Zuul
1d0cc6467d Merge "Documentation: tuning worker threads" 2023-12-19 13:52:21 +00:00
Zuul
776e9444f0 Merge "Fixes Raid creation in iLO6 and other BMC with latest schema" 2023-12-19 10:33:55 +00:00
Dmitry Tantsur
4cc167cc6e
Test redfish with reduced sushy-tools feature set
Two jobs are changed to test a reduced Redfish implementation:
one PXE job uses the minimum version (only boot/power management)
one vmedia job uses the reduced version (+ NICs, virtual media)

Change-Id: Ib3afdb26b9cd36c0e4f3d736b9c69a5bf508fc0e
2023-12-15 11:38:00 +01:00
Dmitry Tantsur
607b8734e4
Cache firwmare components on the transition to "manageable"
Automated cleaning is not guaranteed to be enabled, and in any case it's
too late to cache the components at that point: firwmare upgrades may
happen before the transition to "available".

Change-Id: I6b74970fffcc150c167830bef195f284a8c6f197
2023-12-14 09:51:47 +01:00
Dmitry Tantsur
af8508f51d
CI: use Swift for configdrive when available
We have fixed the issue with TLS settings not being respected in
8a66978666

Change-Id: Ieb79432e897686e03e54d32ea390cca29b506569
2023-12-14 09:02:22 +01:00
Julia Kreger
9806258ede Revise ramdisk boot interface for clarity
Change-Id: I55351989793b858aab1dadb55f35f96a758ea5bb
2023-12-13 12:51:54 -08:00
Zuul
bb0fa3db80 Merge "First pass at the new in-band inspection docs" 2023-12-13 20:11:39 +00:00
Zuul
ba837103a4 Merge "Fix GET for conductors with a port or IPv6 address" 2023-12-13 20:11:36 +00:00
Zuul
1bc08f600b Merge "Revert "Move BFV job to non-voting"" 2023-12-13 04:46:04 +00:00
Zuul
e2f9b9d541 Merge "Fix two severe errors in the firmware caching code" 2023-12-13 00:55:35 +00:00
Iury Gregory Melo Ferreira
2cdb09ba93 Revert "Move BFV job to non-voting"
This reverts commit 6ffef5b165.

Reason for revert: We have the fix in nova, when it merges we can revert the BFV job to voting
Depends-On: https://review.opendev.org/c/openstack/nova/+/903324

Change-Id: Iadee0d696b13ecfe6f93c241b3f9e59be66f6f43
2023-12-12 16:02:54 +00:00
Paresh Sao
6956b0619e Fixes Raid creation in iLO6 and other BMC with latest schema
This commit removes 'VolumeType' which param has long been
deprecated in DMTF Redfish schema, also removes 'Encrypted'
param as per discussion, and places 'Drives' inside 'Links'
as per the new DMTF schema.

Closes-Bug: 2045645

Change-Id: I91d2decab19e352ca3560227d17acfaa1a1dca94
2023-12-12 08:40:44 +00:00
Iury Gregory Melo Ferreira
6ffef5b165 Move BFV job to non-voting
The BFV started failling after Thursday (2023-12-07)

https://zuul.opendev.org/t/openstack/build/f624cbf5d0164a9e8c2a90f9508940b3

This can be a problem in changes that landed in nova for the ironic
driver, since the job has Nova running.

Change-Id: I68ff71b56c582ed7975f7db53c2f2cf5d44891e2
2023-12-10 21:58:24 -03:00
Dmitry Tantsur
23745d97fe
Fix two severe errors in the firmware caching code
First, it tries to create components even if the current version is not
known and fails with a database constraint error (because the initial
version cannot be NULL). Can be reproduced with sushy-tools before
37f118237a

Second, unexpected exceptions are not handled in the caching code, so
any of them will cause the node to get stuck in cleaning forever.

On top of that, the caching code is missing a metrics decorator.

This change does not update any unit tests because none currently exist.

Change-Id: Iaa242ca6aa6138fcdaaf63b763708e2f1e559cb0
2023-12-08 18:11:03 +01:00
Dmitry Tantsur
adec0f6f01
Add a reserved workers pool (5% by default)
I've seen a situation where heartbeats managed to completely saturate
the conductor workers, so that no API requests could come through that
required interaction with the conductor (i.e. everything other than
reads). Add periodic tasks for a large (thousands) number of nodes, and
you get a completely locked up Ironic.

This change reserves 5% (configurable) of the threads for API requests.
This is done by splitting one executor into two, of which the latter is
only used by normal _spawn_worker calls and only when the former is
exhausted. This allows an operator to apply a remediation, e.g. abort
some deployments or outright power off some nodes.

Partial-Bug: #2038438
Change-Id: Iacc62d33ffccfc11694167ee2a7bc6aad82c1f2f
2023-12-07 13:47:39 +01:00
Dmitry Tantsur
e67f716063
Fix GET for conductors with a port or IPv6 address
Our validation does not expect a host-port pair, not having colons in
the hostname. We don't need to verify all possible cases: we will return
404 for a conductor that does not exist.

Change-Id: Iea65575f540a89a0de280fb730e430647c5733dc
2023-12-06 17:12:16 +01:00
Dmitry Tantsur
2373127c7d
Documentation: tuning worker threads
Change-Id: I22a9c8d6d3fe5a025de869e7bc0f96ab4fce8791
2023-12-06 16:33:24 +01:00
Zuul
dcea5f5a1d Merge "Fix log message var reference" 2023-12-06 13:00:24 +00:00
Zuul
32f110d7ef Merge "[trivial] remove note on non-voting snmp job" 2023-12-06 00:09:16 +00:00
Zuul
209714010b Merge "Fix volume_name issue in Redfish RAID" 2023-12-05 22:11:15 +00:00
Zuul
5ca5df8217 Merge "Handle internal server errors while configuring secure boot" 2023-12-05 20:39:43 +00:00
Mahnoor Asghar
a98681f1d3 Fix volume_name issue in Redfish RAID
Use the 'volume_name' field from the logical_disk in the
target_raid_config field of a node, instead of just 'name' (which is
incorrect as per the Ironic API expectation), to create the RAID volume

Change-Id: Ib8b2589d91be67a848411ab6be852bcb4de58bc7
2023-12-05 16:41:53 +01:00
Dmitry Tantsur
9c0996d1a3
First pass at the new in-band inspection docs
Reorganize the existing docs to give space to more information.
Cover the most critical topics, except for installation.

Change-Id: If0f185e0303d6f8071306edbc64b9c5704f58d16
2023-12-04 18:40:34 +01:00
Zuul
0853a08d1e Merge "Add volume name to Redfish RAID volumes" 2023-12-04 16:31:06 +00:00
Mahnoor Asghar
bfaf64b46f Add volume name to Redfish RAID volumes
Change-Id: I12fccda8fee73430fee03a91134fd559ebf40cc9
2023-12-04 11:10:59 +01:00
James Denton
578c02813d Fix log message var reference
Fixes an issue with debug logging referencing node vs node_uuid.

Change-Id: Ic7de9826fbec32038947be89b14f6dfdc2248de4
2023-12-03 06:11:43 -06:00
Zuul
58956b8e6b Merge "Improve logging in the dnsmasq DHCP provider" 2023-12-01 23:20:33 +00:00
Zuul
68863aa452 Merge "fix nits related to image server bauth" 2023-12-01 21:13:12 +00:00
Dmitry Tantsur
a6e3a7f50c
Handle internal server errors while configuring secure boot
At least on some Dell machines, the Redfish SecureBoot resource is
unavailable during configuration, GET requests return HTTP 503.
Sushy does retry these, but not for long enough (the error message
suggests at least 30 seconds, which would be too much to just integrate
in Sushy). This change treats internal errors the same way as
mismatching "enabled" value, i.e. just waits.

Change-Id: I676f48de6b6195a69ea76b4e8b45a034220db2fa
2023-12-01 17:36:31 +01:00
Adam Rozman
31f0e17a13 fix nits related to image server bauth
This commit:
  - fixes a few nits that were pointed out after the feature
    was merged
  - doesn't affect the functionality of the feature

Closes-Bug: #2021947
Change-Id: I1dd024b9994df2b367f61cea75eb71fabe57abfd
2023-12-01 11:09:15 +02:00
Riccardo Pittau
d6491b0c82 [trivial] remove note on non-voting snmp job
Also fix a couple of yaml lint errors

Change-Id: I47f1734fe9c7af75d8eda61a36b97df0ce360ed0
2023-12-01 09:15:59 +01:00
Zuul
6c9de5324b Merge "Change snmp job to not use a focal node" 2023-12-01 00:49:06 +00:00
Zuul
22f0a206bb Merge "Fix *_by_arch documentation and un-deprecate the options without it" 2023-11-30 20:23:15 +00:00
Zuul
b560273c31 Merge "CI: Remove deprecated devstack method" 2023-11-30 19:25:18 +00:00
Julia Kreger
1ffdabed9d Change snmp job to not use a focal node
tl;dr, devstack no longer supports focal, and now errors which
results in the job failing.

Also changes the snmp job to utilize the test_ramdisk_iso
feature, as *opposed* to a full deployment because iPXE
shipped with Ubuntu no longer likes to chain boot in UEFI
mode to a block device. The easiest path, is just to run
a ramdisk in that case, which also sort of mirrors what
users of the SNMP power interface *tend* to do.

Related-Bug: #2034588

Change-Id: I276885b8f0492ead8cea38fe13826123131984ea
2023-11-30 09:02:57 -08:00
Zuul
be242dc13b Merge "Generic API for attaching/detaching virtual media" 2023-11-30 14:02:38 +00:00
Zuul
81396cea53 Merge "Document wsgi_service fix from 16a806f" 2023-11-29 11:40:29 +00:00
Steve Baker
2db444bce1 Replace swiftclient usage with openstacksdk
Object create/delete operations translate clearly from swiftclient to
the SDK. Switching the temp URL handling is a little more disruptive but
the result is slightly more centralized and enables key rotation.

Change-Id: I8df2f032224bd5e540139a798a7ab76a1aeebb06
Closes-Bug: #2042493
2023-11-29 12:44:30 +13:00
Jay Faulkner
25bb15aeee Document wsgi_service fix from 16a806f
We fixed a bug in wsgi_service around cleaningo up unix sockets; we
should document the fix in a release note.

Change-Id: I6ecb489ea1a9e6490c5ddca5c7467b0c4324dfd1
2023-11-28 14:17:28 -08:00
Zuul
16a806f941 Merge "Trivial: fix a typo in wsgi_service" 2023-11-28 21:53:03 +00:00
Zuul
ce05c68302 Merge "Add missing compatibility between idrac and redfish firmware" 2023-11-28 21:30:49 +00:00
Zuul
8354c28a2d Merge "[trivial] add Python 3.11 mention in setup.cfg" 2023-11-28 19:55:27 +00:00
Zuul
922b904da8 Merge "Deprecate configuration molds" 2023-11-28 19:55:23 +00:00
Dmitry Tantsur
6e10ad9ad7
Add missing compatibility between idrac and redfish firmware
Change-Id: I3026a5c69930825ea2b88587e62b36e8824fa91e
2023-11-28 18:56:56 +01:00
Zuul
28b3f56b2c Merge "implement basic-auth support for user image download process" 2023-11-28 16:05:52 +00:00
Dmitry Tantsur
40edeed615
Improve logging in the dnsmasq DHCP provider
Currently, it logs a lot of entries without context, which won't be
readable when several nodes are deployed at the same time, nor when
someone greps for a node UUID.

Make fewer log entries and add node UUID for context.

While here, modernize the code a bit.

Change-Id: I3a840e47a09e77a9f8d35a7cf400c4bdd4111f91
2023-11-28 16:45:25 +01:00
Zuul
7f4bec112f Merge "Fix Redfish request collecting storage drives" 2023-11-28 15:21:13 +00:00
Mahnoor Asghar
facd862a31 Fix Redfish request collecting storage drives
Fix the Redfish request payload collecting physical storage drives

Change-Id: I3b735709aa2f65b606a0747a2edf98f50af39f87
2023-11-28 13:16:45 +01:00
OpenStack Proposal Bot
b44d16a155 Imported Translations from Zanata
For more information about this automatic import see:
https://docs.openstack.org/i18n/latest/reviewing-translation-import.html

Change-Id: Ic8640c58a80c49dbfe16b44b637a1fc28b5419e3
2023-11-28 02:52:10 +00:00
Zuul
6431626de8 Merge "Ensure enable_netboot_fallback writes out pxe config on adopt." 2023-11-28 00:51:43 +00:00
Zuul
7f318bc68f Merge "Multiple driver related deprecations" 2023-11-27 19:01:18 +00:00
Julia Kreger
5db871ead6 Deprecate configuration molds
Per the consensus during the 2024.1 PTG, configuration molds
are being deprecated in favor of a to be developed in the future
step templating mechanism.

Change-Id: Ieab94972e89ca9cded7fae225191bd63d9311581
2023-11-27 09:21:38 -08:00
Dmitry Tantsur
203660a0be
Fix *_by_arch documentation and un-deprecate the options without it
First, the *_by_arch options are not a replacement for plain options:
the cpu_arch property is neither required not standardized. This is why
older options with *_by_arch equivalents are not deprecated.

Second, the example in the documentation is wrong: oslo.config does not
use Python dictionaries. Which makes me suspect that the feature has
never been properly tested (indeed, it's not used in the devstack CI,
and Bifrost uses the older options).

Change-Id: If1e633930909ce9d80e14f3ec3daa0bf8d48b7f0
2023-11-27 18:12:58 +01:00
Dmitry Tantsur
01507db18c
Trivial: fix a typo in wsgi_service
Change-Id: Ia7d8ed8b40db7e3d6752e768113ccf52318ee374
2023-11-24 18:51:09 +01:00
Zuul
281cebedd6 Merge "Document new bug deputy role for Ironic" 2023-11-24 08:50:08 +00:00
Zuul
405a1076db Merge "[api-ref] Add firmware fields to driver API" 2023-11-23 16:16:15 +00:00
Zane Bitter
0d59e25cf8 Use per-node external_http_url for boot ISO
When the per-node external_http_url feature was introduced by
c197a2d8b2, it only applied to a config
floppy. This fix ensures that it is also used for the boot ISO, both
when it is generated locally (by _prepare_iso_image()) or just cached
locally (by prepare_remote_image()).

Change-Id: Ic241da6845b4d97fd29888e28cc1d9ee34e182c1
Closes-Bug: #2044314
2023-11-23 23:27:00 +13:00
Dmitry Tantsur
0902912217 Generic API for attaching/detaching virtual media
This patch allows to attach or detach a generic image as
virtual media device after a node has been provisioned.

Closes-Bug: #2033288
Change-Id: I97b68047d769f6fb686c53e89084b5874e02b8c7
2023-11-23 09:55:09 +01:00
Zuul
a367151914 Merge "[api-ref] Complete port name and shard documentation" 2023-11-23 01:38:16 +00:00
Julia Kreger
6ac1308050 Multiple driver related deprecations
An outcome of the Ironic 2024.1 PTG was that we would go ahead and
deprecate the ibmc, xclarity, and the wsman interfaces of the idrac
hardware type.

The forward path is Redfish, as evidenced by the idrac hardware
type having both wsman and redfish based interfaces available
for users to choose from.

These changes are being made by the Ironic team due to a lack of
recent upstream contact with any of the related driver maintainers.

Change-Id: Ia4aa99f4987570426bb155af8f437c9ba6013837
2023-11-20 10:46:56 -08:00
Julia Kreger
ce300b3de1 CI: Remove deprecated devstack method
Removes get_uefi_ipxe_boot_file from the devstack plugin
as it is no longer used.

Change-Id: I5eed744a4746767b216399b132e98298471b4ab7
2023-11-16 15:16:49 -08:00
Adam Rozman
3ea4bb234c implement basic-auth support for user image download process
This feature was proposed in https://bugs.launchpad.net/ironic-python-agent/+bug/2021947

Change-Id: I70733fbf6b06c4e99888c6c38212e578c65ef92f
Signed-off-by: Adam Rozman <adam.rozman@est.tech>
2023-11-13 15:37:27 +02:00
Steve Baker
81acd5df24 Implement drain shutdown support
Sending signal ``SIGUSR2`` to a conductor process will now trigger a
drain shutdown. This is similar to a ``SIGTERM`` graceful shutdown but
the timeout is determined by ``[DEFAULT]drain_shutdown_timeout`` which
defaults to ``1800`` seconds. This is enough time for running tasks on
existing reserved nodes to either complete or reach their own failure
timeout.

During the drain period the conductor needs to be removed from the hash
ring to prevent new tasks from starting. Other conductors also need to
not fail reserved nodes on the draining conductor which would appear to
be orphaned.  This is achieved by running the conductor keepalive
heartbeat for this period, but setting the ``online`` state to
``False``.

When this feature was proposed, SIGINT was suggested as the signal to
use to trigger a drain shutdown. However this is already used by
oslo_service fast exit[1] so using this for drain would be a change in
existing behaviour.

[1] https://opendev.org/openstack/oslo.service/src/branch/master/oslo_service/service.py#L340

Change-Id: I777898f5a14844c9ac9967168f33d55c4f97dfb9
2023-11-13 10:38:18 +13:00
Zuul
ff4e836c55 Merge "Add the setting of memcached servers to keystone_authtoken" 2023-11-12 20:14:50 +00:00
Zuul
266f991a13 Merge "Make sqlalchemy-2x job voting again" 2023-11-12 08:31:12 +00:00
Zuul
dbd8cf7d1b Merge "Fix unit tests broken by olso.utils" 2023-11-09 22:04:04 +00:00
Takashi Kajinami
f42b359bd9 Make sqlalchemy-2x job voting again
... because the new oslo.utils version is now used in CI.

Depends-on: https://review.opendev.org/c/openstack/requirements/+/900517
Related-Bug: #2042886
Change-Id: I855103c5ee17db3c690397e3db78139f3264735c
2023-11-10 00:45:02 +09:00
Takashi Kajinami
fa8df69194 Fix unit tests broken by olso.utils
Some of the object unit tests grub Mock object unintentionally, and
that results in failure during initializing an versioned object,
because the Mock object does not present its version correctly.

This fixes that problem.

The sqlalchemy-2x job is made non-voting because this job requires
oslo.utils 6.3.0 which is blocked by this problem.

Closes-Bug: #2043116
Related-Bug: #2042886
Change-Id: I1a622ab9c766d46b7eb4442848e91f25b26f6c61
2023-11-10 00:41:20 +09:00
Derek Higgins
eb65c0de92 Ensure enable_netboot_fallback writes out pxe config on adopt.
without the ipxe config adopted nodes that would have needed
the fallback ipxe config to boot from disk will fail (as they
continuously attempt to network boot) and instead boot into
the discovery image.

Story: #2009259
Task: #43471

Change-Id: I42e555a1a01eb4124e3152669578f3403db83801
2023-11-09 10:14:55 +00:00
Jay Faulkner
1b55e4b4d8 Document new bug deputy role for Ironic
Attempt to create new bug deputy role; because triaging bugs is
important!

Change-Id: Ie11ec93a0f3a3a22d7ffb08c90107522ca1a0a7e
2023-11-08 13:46:50 -08:00
Riccardo Pittau
2e48118878 [trivial] add Python 3.11 mention in setup.cfg
Change-Id: Ib3e7f2f8e57453b32defba27483ae2b043393fcf
2023-11-07 14:16:53 +01:00
Jay Faulkner
b9baf7dbc8 eventlet monkey patch in unit tests earlier
It's important for consistent behavior to monkey_patch eventlet
before importing anything. While it makes an attempt to green any
existing created objects or locks, that code is buggy and fails
in some cases -- especially around rlocks.

It's not my belief that this resolves any specific bugs, but this
does reflect a better overall practice.

Change-Id: I57b2c91f9853287a08ee79ac87ae6e1767ddfb6f
2023-11-02 10:40:42 -07:00
Zuul
a2085aa1a6 Merge "Update devstack guide for image id; network always needed" 2023-11-01 15:11:04 +00:00
Steve Baker
43ccb17e15 [api-ref] Add firmware fields to driver API
Change-Id: Ic97833fc836afd643d296fd98cf204317f55dd51
2023-11-01 09:49:05 +13:00
Steve Baker
7639268e79 [api-ref] Complete port name and shard documentation
Change-Id: I92da15361f203d2f973959a06e5d92394b29c016
2023-11-01 09:44:26 +13:00
Zuul
570aa3c86b Merge "Remove outdated pysnmp reference" 2023-10-31 09:50:31 +00:00
Zuul
10ef80b5b7 Merge "Make sure we eject media from DVD when CD is requested" 2023-10-30 23:34:02 +00:00
Jay Faulkner
f6b4ad833e Remove outdated pysnmp reference
We don't use pysnmp anymore, and we likely won't update this doc
in the future if libraries change again.

Change-Id: If3a3bf02167f187a0e4f8f0d20a77621b5def3eb
2023-10-30 17:05:00 +00:00
Jay Faulkner
8154c0a9f7 Update devstack guide for image id; network always needed
DEFAULT_IMAGE_NAME no longer exists in devstack; also our config
now always leads to multiple networks being created, so remove
the fork in the instructions.

Change-Id: I1b3e134c4d5a9633028af367e89ecc44699561cb
2023-10-27 14:03:50 -07:00
Zuul
341f80e24d Merge "Add inspection hooks" 2023-10-20 17:51:08 +00:00
Zuul
f9a93c503d Merge "Reset parent_node values to uuids instead of names" 2023-10-18 22:29:41 +00:00
Zuul
5b1e347eb1 Merge "CI: Fix our internal MTU settings" 2023-10-18 06:43:05 +00:00
Mahnoor Asghar
c3ee90ddac Add inspection hooks
Adds the 'local-link-connection' and 'parse-lldp' inspection hooks in
the agent inspect interface for processing data received from the
ramdisk at the /v1/continue_inspection endpoint.

Change-Id: I540f03b961b858e8fc00cd4abbc905faa8f0c6c5
Story: #2010275
2023-10-17 09:31:33 -02:00
Taketani Ryo
679176ab56 Add the setting of memcached servers to keystone_authtoken
In-process token cache is deprecated since 4.2.0 release
and may be removed. Add the setting of memcache for
the auth_token token cache.

Change-Id: I23ad1d9fb1b33160452ab353972fa1274cde363d
2023-10-16 09:25:17 +09:00
Iury Gregory Melo Ferreira
766d2804a1 Make sure we eject media from DVD when CD is requested
It's possible to use virtual media based provisioning on
servers that only support DVD MediaTypes and do not support CD
MediaTypes. The problem in this scenario is that Ironic will keep
the media attached since it will only eject the ones matching the
CD device, now we check if there is any DVD device with media inserted
when looking for CD devices.

Closes-Bug: 2039042
Change-Id: I7a5e871133300fea8a77ad5bfd9a0b045c24c201
2023-10-13 09:37:53 -03:00
Zuul
665f061755 Merge "Introduce conductor touch while offline" 2023-10-12 02:27:32 +00:00
Zuul
df5306ea7b Merge "Extract generic image publishing code from image_utils" 2023-10-11 09:56:32 +00:00
Zuul
51aaa37b72 Merge "Refactor publishing images into a new module" 2023-10-11 09:53:49 +00:00
Zuul
ce5cf57ae8 Merge "Add inspection hooks" 2023-10-11 09:47:07 +00:00
Zuul
b58f6d394e Merge "Enable OVN CI" 2023-10-10 16:01:15 +00:00
Dmitry Tantsur
2124d101de Extract generic image publishing code from image_utils
The new call prepare_remote_image contains the logic around
image_download_source, fetching images using a cache and publishing them
for further consumption. The code was extracted from _prepare_boot_iso,
which is now more straightforward.

Change-Id: I8567a10b77cdc3785686b79defcdafd75af53df0
2023-10-10 16:00:26 +02:00
Julia Kreger
d1ca14289e Reset parent_node values to uuids instead of names
So, I got myself nice and confused with testing parent_node logic
when I used a name, but the ironic internals are modeled around
queries involving UUID matching.

We now identify names, and reset the values to be a UUID.

Change-Id: I46ece586c254c58b80723bc905cad3144691fc5d
2023-10-10 13:06:42 +00:00
Zuul
33a471e7ac Merge "Add inspection hooks" 2023-10-10 08:12:32 +00:00
Dmitry Tantsur
124f6425ea Refactor publishing images into a new module
This change takes the first step in decomposing image_utils into more
manageable and reusable parts. The publishing bits there are coupled
with nodes and drivers. The new code is node-agnostic and features
a clean separation between Swift and local webserver code.

Change-Id: If95b46272abaeea314fd61bb50d2c40200386f98
2023-10-09 17:38:42 +02:00
Julia Kreger
40e825ba93 CI: Fix our internal MTU settings
Long story short, we auto-clamp down everything to 1400 bytes
due to VXLAN tunneling for multinode testing. But there are other
reasons to clamp it smaller, and we will need to clamp that further
for multinode should we mix it with OVN.

Anyway, this should make things cleaner and we should rely upon the
gate calcualted MTU as a starting place, not the guess based upon
interface list. i.e. test VM could be wrong but gate could know better.

Change-Id: I385679fe30d1447f1ed94cdf5a419e6acefbc595
2023-10-09 13:13:29 +00:00
Zuul
6261b73483 Merge "DB: Load only one instance for RPC interactions" 2023-10-09 00:44:44 +00:00
Zuul
7ea4de815c Merge "Add inspection hooks" 2023-10-08 22:21:32 +00:00
Zuul
99095ba2a3 Merge "Cleanup if images.fetch fails" 2023-10-08 22:14:19 +00:00
Zuul
c86208c1c7 Merge "Transiton to Storage resource from SimpleStorage" 2023-10-06 22:39:52 +00:00
Zuul
92ec97ca1b Merge "Remove traces of Docker from devstack dependencies" 2023-10-06 22:15:08 +00:00
Zuul
d0953ce0f4 Merge "grenade: convert neutron cli commands to openstack" 2023-10-06 19:05:42 +00:00
Zuul
a2917c7c90 Merge "[DOC] Add a little more clarity regarding parent/child nodes" 2023-10-06 15:46:55 +00:00
Steve Baker
9bd1e033fa grenade: convert neutron cli commands to openstack
Grenade is currently failing not finding the neutron command, we should
likely not be using it anyway since the deprecation message says it may
disappear after Z.

Change-Id: Ic24d59379bafcc5a630fe5c074fcc13303902965
2023-10-06 08:41:52 -07:00
Steve Baker
3f9151163e Introduce conductor touch while offline
This adds an `online` argument to the conductor touch methods so that
touch can be called with `online=False`. When called periodically this
allows the conductor `updated_at` to be within the threshold to avoid
locked nodes being failed as orphans by another conductor.

This will be used by drain shutdown (and graceful shutdown) so that
tasks can complete on existing locked nodes within the shutdown timeout,
while the conductor is also removed from the hash ring so new tasks are
not started on that conductor.

This change introduces the api but the existing behaviour won't change
until BaseConductorManager.del_host() no longer calls keepalive_halt().

Change-Id: Iedd62193fac1009137b9ee47a6ef5a9a8576f261
2023-10-06 10:42:53 +13:00
Zuul
9118440577 Merge "Bump workers_pool_size to 300 and remove queueing of tasks" 2023-10-05 15:02:15 +00:00
Dmitry Tantsur
224cdd726c Bump workers_pool_size to 300 and remove queueing of tasks
Especially in a single-conductor environment, the number of threads
should be larger than max_concurrent_deploy, otherwise the latter cannot
be reached in practice or will cause issues with heartbeats.

On the other hand, this change fixes an issue with how we use futurist.
Due to a misunderstanding, we ended up setting the workers pool size to
100 and then also allowing 100 more requests to be queued.

To be it shortly, this change moves from 100 threads + 100 queued to
300 threads and no queue.

Partial-Bug: #2038438
Change-Id: I1aeeda89a8925fbbc2dae752742f0be4bc23bee0
2023-10-05 08:51:51 +02:00
Zuul
9d4707e255 Merge "api-ref for nodes/{node_ident}/firmware" 2023-10-03 14:58:02 +00:00
Julia Kreger
3f77091c63 Enable OVN CI
Adds basic testing for PXE/iPXE boot secenarios where the OVN
DHCP service is used instead of dnsmasq.

Also adds a release note and documentation to cover the details
and caveats of using ovn as we have discovered through this process.

Change-Id: I28cd20a7f271220d8ca335895ca9e302452fd069
2023-10-03 14:24:34 +00:00
Zuul
e70981cf37 Merge "Do not store ramdisk logs as part of the inventory" 2023-10-03 10:11:27 +00:00
Zuul
62f27a4cf2 Merge "Fix the HTTP code for reaching max_concurrent_deploy: 503 instead of 500" 2023-10-03 10:00:40 +00:00
Zuul
7520fe8093 Merge "Support port name: API" 2023-10-03 05:10:14 +00:00
Dmitry Tantsur
cba10669f5 Fix the HTTP code for reaching max_concurrent_deploy: 503 instead of 500
Change-Id: I3d8c7724c1d44baa67a6364dde2f52abdb906526
2023-10-02 16:13:15 +02:00
Zuul
ab6fd39925 Merge "Kickstart: Don't error unit tests ksvalidate is present" 2023-10-01 22:30:25 +00:00
Iury Gregory Melo Ferreira
6c8a04e8f0 api-ref for nodes/{node_ident}/firmware
Change-Id: Ica87a7f4bc3a2cce679155200452d7b915d3f0f5
2023-09-29 14:51:10 -03:00
Dmitry Tantsur
56cbe2569d Do not store ramdisk logs as part of the inventory
They are huge, may expose sensitive data and are normally stored in
local files instead. Match the inspector behavior and drop logs.

Change-Id: I569ef8c7f9d78a7a65c48b6b46c12493c5c571c3
2023-09-29 15:41:14 +02:00
OpenStack Proposal Bot
db549850e0 Imported Translations from Zanata
For more information about this automatic import see:
https://docs.openstack.org/i18n/latest/reviewing-translation-import.html

Change-Id: Ic59ac600efb738d26a2f38186dcc9272e349e5c7
2023-09-28 04:05:55 +00:00
Julia Kreger
bbc82fa148 Kickstart: Don't error unit tests ksvalidate is present
The kickstart unit tests were written in such a way that if
the tests are run on a system with kickstart validator present,
then the test behavior is different (and fails) than if it runs
without. Specifically, when it is present, an error is generated:

TypeError: write() argument must be str, not MagicMock

This is because we pass in a mock value for unit testing.

Removes the alternative path of if the validator is present
for unit testing, and locks the test into the false which
simplifies the validation path for the kickstart interface.

Change-Id: Idfb6b4f3b49901aa1a222c6fedc4367ef3bfd2a2
2023-09-26 14:11:30 +00:00
Mahnoor Asghar
a31bf57cb9 Add inspection hooks
Adds the 'raid-device' and 'root-device' inspection hooks in the agent
inspect interface for processing data received from the ramdisk at
the /v1/continue_inspection endpoint.

Story: #2010275
Change-Id: I075ccd93a312b8bb17a36527e6c5d56386bb5c23
2023-09-25 06:36:18 -02:00
Mahnoor Asghar
7f053dc70d Add inspection hooks
Adds the 'memory', 'pci-devices', and 'physical-network' inspection
hooks in the agent inspect interface for processing data received from
the ramdisk at the /v1/continue_inspection endpoint.

Change-Id: I67631ec5b94d1b29afcdc9a971b1052cf35bda1f
Story: #2010275
2023-09-25 06:14:15 -02:00
Mahnoor Asghar
609ccc9037 Add inspection hooks
Adds these inspection hooks in the agent inspect interface for
processing data received from the ramdisk at the
/v1/continue_inspection endpoint: 'accelerators', 'boot-mode',
'cpu-capabilities', and 'extra-hardware'.

Change-Id: I63a528eba15391292c841693d6a0cc2f3b683720
Story: #2010275
2023-09-22 19:50:21 -02:00
OpenStack Release Bot
7b91f67df0 Update master for stable/2023.2
Add file to the reno documentation build to show release notes for
stable/2023.2.

Use pbr instruction to increment the minor version number
automatically so that master versions are higher than the versions on
stable/2023.2.

Sem-Ver: feature
Change-Id: Ia3d5f975e26f33b9f43610dd46246b5da03bc10e
2023-09-22 13:48:26 +00:00
Zuul
f78f872271 Merge "Trivial: attach versions to release series" 2023-09-21 13:29:50 +00:00
Zuul
6d9779bf6b Merge "Redfish: wait for secure boot state change if it's not immediate" 2023-09-21 13:29:47 +00:00
Iury Gregory Melo Ferreira
4eb0dbf7b5 RedfishFirmware Interface
Change-Id: I75b2433fade0c36522024c16608d61cd663b38d5
2023-09-20 13:09:38 -03:00
Zuul
bc1c89d993 Merge "inspect_utils, handle bracketed IPv6 redfish addr" 2023-09-19 17:41:21 +00:00
Harald Jensås
21e3e71ea3
inspect_utils, handle bracketed IPv6 redfish addr
If redfish_address is in brackets, unwrap it and check
that it is a valid IPv6 address. If that is the case use
the unwrapped address to avoid "Name or service not known".

Also add a unit test for normal_ipv6_as_url.

Closes-Bug: #2036455
Change-Id: I8df20e85e40d8321bd5f88c09fae33b6015bcf51
2023-09-19 14:54:12 +02:00
Dmitry Tantsur
2bb653a52e Trivial: attach versions to release series
Also fix an incorrect version in the release notes.

Change-Id: If57f34357c03e64188c493f3a1bdc072954c2541
2023-09-19 11:47:24 +02:00
Harald Jensås
72037b596a
redfish_address - wrap_ipv6 address
When parsing redfish driver info wrap IPv6 address in brackets
before appending default scheme/authority.

Updated common.utils.wrap_ipv6() to ignore ValueError, e.g
simply return the string if ip is not an ipv6 address string.

Related: RHBZ#2239356
Closes-Bug: #2036454
Change-Id: Icefd96d6873474b4cfb7fbf3d8337cd42fd63ca6
2023-09-18 21:07:06 +02:00
Dmitry Tantsur
88fd22de79 Remove most prints for unit tests
Generally, print should not be used for unit tests, it may pollute
the output stream. Right now, our internal build system is facing

    BlockingIOError: [Errno 11] write could not complete without blocking

on prints. Especially ACL tests seem to be a big offender because they
are vary numerous and each may print several times. Many prints in other
tests are cryptic and probably just leftover from debugging.

I only leave the API unit tests where the output is arguably useful.
But I reduce it to one print per call since the input is already known.

Change-Id: Ic5aaf9624f86b39609e2db6157c98cf8e35712fc
2023-09-15 14:58:57 +02:00
Zuul
22918bde84 Merge "[releasenotes] Prelude for 2023.2/bobcat" 2023-09-15 08:58:03 +00:00
Jay Faulkner
d115a52b20 [releasenotes] Prelude for 2023.2/bobcat
Prelude entry for 2023.2 release.

Change-Id: Ib78dca723d3aa9a3458ce452124657ad0be55a63
2023-09-14 09:54:35 -07:00
Zuul
3d4cd28f89 Merge "devstack - configurable ipv6 address mode" 2023-09-14 10:43:23 +00:00
Zuul
f0fde6c22d Merge "CI: Remove ubuntu focal job" 2023-09-13 05:18:29 +00:00
Harald Jensås
a8ede77e3e devstack - configurable ipv6 address mode
Add variable to define ipv6-address-mode and ipv6-ra-mode
in the devstack plugin.

Change-Id: I0a145bafc2ea37065b0e0fa7445837ded7bd8e46
2023-09-12 18:56:06 +00:00
Dmitry Tantsur
6487b95813 Redfish: wait for secure boot state change if it's not immediate
We have discovered hardware that only applies boot mode / secure boot
changes during a reboot. Furthermore, the same hardware cannot update
both at the same time. To err on the safe side, reboot and wait for
the value to change if it's not changed immediately.

Co-Authored-By: Jacob Anders <janders@redhat.com>
Change-Id: I318940a76be531f453f0f5cf31a59cba16febf57
2023-09-12 18:30:36 +02:00
Zuul
eae2b1260a Merge "Fix minor grammar issues in the help for new inspector options" 2023-09-12 14:45:24 +00:00
Kaifeng Wang
8db7220bae Support port name: API
This patch implements API changes for port name support.

Change-Id: I192ae52847087f7b43a7204ec6ee9e299c305eb5
Story: 2003091
Task: 23180
2023-09-12 14:34:23 +00:00
likui
065b4bfc12 CI: Remove ubuntu focal job
Ubuntu focal was in testing runtime as best effort
testing in 2023.1 cycle. In 2023.2, we do not need to
test the focal as such. Removing its testing to more
focus on making Jammy testing more stable.

[0] https://review.opendev.org/c/openstack/tempest/+/884952

Change-Id: Ia3a9bfb6287fd283c3eeb49b43d2c0d12420596d
2023-09-11 10:52:15 +08:00
Zuul
ac28e54071 Merge "DB: Only re-query for a lock holder if we cannot lock" 2023-09-08 19:58:52 +00:00
Zuul
bc80399b3f Merge "Fix two places that can cause issues under SQLite" 2023-09-08 19:58:47 +00:00
Zuul
c00a262d26 Merge "Update proliantutils driver requirements for bobcat" 2023-09-08 09:13:13 +00:00
Julia Kreger
ca5be6338d [DOC] Add a little more clarity regarding parent/child nodes
Change-Id: I42205af77484bc4679fc0f8c579b3b980c00ec89
2023-09-07 12:52:23 -07:00
Zuul
40728f39f7 Merge "PXE: Remove DHCP option 210 from being set" 2023-09-07 18:33:02 +00:00
Dmitry Tantsur
7b9007375e Fix two places that can cause issues under SQLite
In both places, we may potentially iterate over a result set after
closing the read transaction.

Change-Id: I0afce854287a4375c525c19c49ed0ec01bac76b1
2023-09-07 17:03:39 +02:00
Julia Kreger
985c7fdf21 [CI] Unblock CI by fixing job regex and non-voting snmp
Two issues have occcured:

1) Zuul has decided some syntax is deprecated and generates an error.
   The exlcusionary nature of the syntax is just not supported by RE2
   which is the new requirement, so explicitly matching "^master$"
   as opposed to "not stable branches".

2) Marking the snmp job as non-voting, the root issue appears to be ipxe
or the VMs, unknown as of yet.

Change-Id: I68aa95eb1ed80a0fde1c29d708ebd606393481aa
2023-09-07 03:58:34 +00:00
Harald Jensås
dcf155d9c2
devstack - enable v6 addr list if q-dhcp enabled
For neutron to write the correct dnsmasq configuration
for IPv6 network boot, the `dnsmasq_enable_addr6_list`
option for neutron dhcp agent must be enabled.

Change-Id: I8ef978ad689f0d1c822bb724f1af58f6fd4c2d8b
2023-09-06 16:12:50 +02:00
Nisha Agarwal
ec2a5cc7c6 Update proliantutils driver requirements for bobcat
Change-Id: I3230a8fd446126d294cbf837a65b07e497d4031c
2023-09-06 14:07:50 +00:00
Julia Kreger
bb02c49def DB: Only re-query for a lock holder if we cannot lock
Dbapi method _reserve_node_place_lock is a bit of a special
method. It has both a decorator to retry sqlite "database is locked"
issues, and an outer synchronized process fair lock
(from oslo.concurrency.lockutils), which ensures only *one* thread
is working on locks at a time.

Thing is, we can build contention when a stack of heartbeats
come in, because they are forced to execute in serialized fashion.

And whil investigating some metal3 logs, we could see some lock
interactions are basically instant, and when things begin to
get backed up, we start seeing 10+ second gaps where we are
trying to get ahold of the database, and can't lock the node.

And looking at the code for the method, I realized we were *always*
re-querying the node, but never returning it after updating the node.
Apparently, so we can just log *if* there was an issue.

Instead, just consult the result set and then re-query if we must
to determine *who* holds the lock, we now only do so *if* we are
operating without SQLite, because if we are then we can safely
assume the lock came from another thread.

Change-Id: Ie606439670be21cf267eb541ce864711d2097207
2023-09-05 10:47:54 -07:00
Zuul
0eb3f40f10 Merge "Add service steps and initial docs" 2023-09-01 23:15:27 +00:00
Zuul
907465eceb Merge "Log an exception from heartbeat" 2023-09-01 21:57:16 +00:00
Julia Kreger
646d452d66 Add service steps and initial docs
Adds service steps on a variety of internal interfaces,
and begins to tie documentation together to provide clarity
on the use and purpose of service steps.

Change-Id: Ifd7241f06648c8d73c1b97fcf08673496f049f45
2023-09-01 20:30:48 +00:00
Zuul
bcfddda517 Merge "log the version of the conductor starting" 2023-09-01 05:36:57 +00:00
Zuul
dffcc69e89 Merge "Fully monkey patch eventlet for consistent behavior" 2023-08-31 18:28:54 +00:00
Julia Kreger
3cd492d775 Log an exception from heartbeat
So it seems we can have weirdness here which
can get lost in the mix because heartbeat operations
get called with spawn_after on the task, and without
an error handler. The net effect seems to be we can
eat errors, which maybe we should log.

Logs a warning now and returns to the caller which will
exit the task.

Change-Id: I8d052e5d26396737bc7d807cbafdc317cfd2f21f
2023-08-31 10:13:10 -07:00
Zuul
e7ec8e46dc Merge "Correct bindep.txt entries for bookworm" 2023-08-31 16:12:03 +00:00
Julia Kreger
6d2243b916 log the version of the conductor starting
Julia, who has been looking at Metal3 container logs a lot, is tired of
not being able to easily figure out when on the timeline of the git repo
that the container's source code was running from. So instead of guessing
and having to figure out based upon behavior/logs, just log the version
the software believes itself to be using the existing version info,
similar to how we do it with IPA.

Change-Id: I3c76ddfb89b92d3d4bc29b7ccab4362604775568
2023-08-31 14:22:23 +00:00
Zuul
a335e42b32 Merge "Add missing release mappings for 22.0 and 22.1" 2023-08-31 12:06:20 +00:00
Zuul
ab76ff12e1 Merge "Utilize the JSON-RPC port" 2023-08-31 04:45:05 +00:00
Julia Kreger
980611186e PXE: Remove DHCP option 210 from being set
Ages ago we supported pxelinux. Now, not really since it is long EOL.

And while troubleshooting bug # 2033430, we discovered we had option
210 in the DHCP payload from the server, which ended up being the
folder base path for a tftp client to self reference the structure,
but only with OVN.

Further troubleshooting with the neutron-dhcp-agent and dnsmasq
revealed we never actaully really sent that option to clients.

In other words, meaning it was always redundant. Since excess
information could be part of the problem with grub, we're removing
it.

Change-Id: Iaa2f174b6082fadcab6635ca874fc5fae2fb4842
2023-08-30 13:27:54 -07:00
Jay Faulkner
69bdbfb6e9 Fully monkey patch eventlet for consistent behavior
Eventlet expects to have green versions of every module loaded, including OS. The reasons we originally did not patch os are lost
to time, but there have been many releases of eventlet since, and we should return to a reasonable baseline.

Change-Id: Ia4113124b415bd647e3c984e587828eb5b612eee
2023-08-30 20:08:54 +00:00
Julia Kreger
30e4881c9e Add missing release mappings for 22.0 and 22.1
Just adds the entries in case anyone needs to pin and upgrade
with those releases.

Change-Id: I55cb0c9735b1b9c0d365bdd6262fdc48b0ac03c9
2023-08-30 11:04:38 -07:00
Vanou Ishii
ffde150aa7 Transiton to Storage resource from SimpleStorage
Current Redfish driver uses SimpleStorage resource
to collect disk information.
Storage resource is defined to provide more sophisticated
functionality over SimpsleStorage resource. Some Redfish
implementations may take transition from SimpleStorage to
Storage.
So Redfish driver's logic around disk should be provided
through Storage resource with SimpleStorage compatibility.

This commit does 2 things
* Use Storage resource instead of SimpleStorage, if possible
* Fix wrong disk indicator LED logic (SimpleStorage doesn't
  support indicator LED operation)

Related-bug: 2032590
Change-Id: I28abd75a41059c23028717db6a9766a5164313c7
2023-08-30 16:36:08 +00:00
Jay Faulkner
a2919f7a75 Correct bindep.txt entries for bookworm
Debian bookworm is where our unit tests run for py3.11. This change
permits them to configure and run.

Change-Id: Ic51ca8df82552b9a8b6765cc0237f84e468e2fd8
2023-08-30 09:30:50 -07:00
Julia Kreger
c84fe147a3 Utilize the JSON-RPC port
Adds storage of the json-rpc port number to the conductor hostname
to enable rpc clients to understand which rpc servies they need to
connect to.

Depends-On: https://review.opendev.org/c/openstack/ironic-lib/+/879211
Change-Id: I6021152c83ab5025a9a9e6d8d24c64278c4c1053
2023-08-30 08:56:17 -07:00
Harald Jensås
aa2dad9f75
devstack - fix IPv6 ping
Remove the $ in the condition so that we don't attept to
execute the output from ping (i.e PING - unknown command)

Change-Id: Ic90f7c93d9a7b86fbf3f2cdef46bc1b2bbea489d
2023-08-30 12:45:44 +02:00
Zuul
c56440cc2f Merge "Revert "Move metal3 integration job to non-voting temporarily"" 2023-08-29 21:16:50 +00:00
Zuul
1bbc67c1b6 Merge "Add inspection (processing) hooks" 2023-08-29 16:45:16 +00:00
Zuul
9f7218243b Merge "Permit Ironic to notify IPA it can support MD5" 2023-08-29 12:32:54 +00:00
Zuul
3d2601cd01 Merge "Remove instance image after deployment" 2023-08-29 11:54:59 +00:00
Riccardo Pittau
570fad96d8 Revert "Move metal3 integration job to non-voting temporarily"
This reverts commit b5cdd18815.

Change-Id: Ib0b0bc8668ec3151c11cf5be1949523f95511d26
2023-08-29 10:39:57 +02:00
Zuul
9c6ad7478d Merge "Revamp Ironic dev-quickstart documentation" 2023-08-29 04:11:38 +00:00
Zuul
120ccf50cc Merge "Add service steps call to agent logic" 2023-08-29 04:11:35 +00:00
Zuul
8be7efdeab Merge "Introduce default kernel/ramdisks by arch" 2023-08-29 04:11:32 +00:00
Zuul
f4c44dd1b3 Merge "Update iRMC driver vendor library version" 2023-08-29 02:56:25 +00:00
Zuul
f7dfc13c94 Merge "Adds service steps" 2023-08-29 02:56:22 +00:00
Zuul
201cdb7226 Merge "Fail on node lookup if it is locked" 2023-08-28 23:04:34 +00:00
Julia Kreger
e1a0864635 Add service steps call to agent logic
While the prior sevice steps patch had a huge portion of the
needed code already due to copy-pasta, this change finishes
wiring in the ability for the agent to be launched for service
steps and heartbeat to occur, combined with support to retrieve
service steps from the running agent, ultimately to enable
operators to take a deployed node, and ask Ironic to make changes,
or my more favorite use case, go benchmark it for a while.

Also edits the service steps release note to remove the outstanding
issue, and makes some minor corrections in the code which was copied
but didn't quite have testing wired up yet.

Change-Id: Ibfe42037b520a76539234cf1a5e19afd335ce8a8
2023-08-28 20:57:43 +00:00
Bifrost
3c5e05a8a4 Introduce default kernel/ramdisks by arch
Introduce config to allow setting default ramdisks per-architecture.
The hierarchy of the parameters is:
Node config > config by architecture > general config

Change-Id: I95dfece3e8f7bcd3121ac808985cb61997877a51
2023-08-28 17:25:37 +01:00
Riccardo Pittau
fc29073b1d Use sparkingly new metalsmith cs9 job
Instead of the old dusty cs8 one.

Change-Id: Ieb515ddcc1c919e2e5c79784b13dd1a7ec815aab
2023-08-28 12:22:44 +02:00
Riccardo Pittau
b5cdd18815 Move metal3 integration job to non-voting temporarily
It's currently broken

Change-Id: I326b0e4bf43b104144b6cc1cff6261bbbd4b8070
2023-08-25 16:46:37 +02:00
Vanou Ishii
04707edfe4 Update iRMC driver vendor library version
Update version requirement of python-scciclient
to greater than or equal to 0.15.0.
Since this version 0.15.0, python-scciclient uses
pysnmp lextudio.

Change-Id: I736707027002578ab87577c94b5e6c45ba1c5f72
2023-08-25 09:51:21 -04:00
Mahnoor Asghar
e6360bc84b Add inspection (processing) hooks
Adds inspection hooks in the agent inspect interface for processing
data received from the ramdisk at the /v1/continue_inspection
endpoint. The four default configuration hooks 'ramdisk-error',
'validate-interfaces', 'ports' and 'architecture' are added.
(The remaining inspection hooks will be added in further patches.)

Change-Id: I2cf1be465ba7a93fd66881b14972e960acd4dd4e
Story: #2010275
2023-08-25 09:38:39 -02:00
Jay Faulkner
03b8f4dd11 Revamp Ironic dev-quickstart documentation
This is a significant improvement and update to Ironic contributor
documentation, as an attempt to make it easier for new Ironic
contributors to onboard.

It is not perfect, but it's significantly better than the existing
documentation.

What this change does:
- Improve dev-quickstart guide, make it easier to find
  devstack configurations.
- Removes information that can bit-rot over time and replaces with
  more generic information.
- Provides an actual working, tested, Ironic+Nova devstack conf

What hasn't been done:
- Testing of Ironic BFV or Multitenant networking devstack confs
- Validation that the local development method still works
- There is a ton more information about how to use these testing
  envs (both bifrost and devstack) which could be added.
- System prerequsities and Python prerequisites under the unit
  tests section has bitrotted considerably; they have not been
  significantly modified and will be fixed in a future commit.

Change-Id: I0cdfe50042fabb6b65633961fc418aff5d6ebfe3
2023-08-23 15:14:47 -07:00
Julia Kreger
2fd3d8f01e Fail on node lookup if it is locked
In the agent token mechanism, restrictions exist when a an agent
token can be generated, and unfortunately this has to be done on
the conductor side involving a lock and a task because we need to
save the state of the node.

As such, we were in a situation where we were waiting on DB node
locking, which would prevent the agent from getting a node, and
potentially causing the lookup operation to fail, eventually.

We now quickly return NodeLocked which shouldn't cause the agent
any issues, although we need to improve error handling there as
well.

Change-Id: Ice335eed82b936753be99eedb16ceccf8a9a86a8
2023-08-23 13:18:43 -07:00
Julia Kreger
84f1a1c321 Permit Ironic to notify IPA it can support MD5
Adds a new configuration option which can be set by an
operator to tell Ironic's agent that it is able to process
an MD5 checksum.

Depends-On: https://review.opendev.org/c/openstack/ironic-python-agent/+/882367
Change-Id: I79228e773db9e60fcc2d16ec028ba233c4ba756f
2023-08-22 16:06:35 -07:00
Julia Kreger
9516c67b61 DB: Load only one instance for RPC interactions
Load the database instance only once for all RPC
interactions, as opposed to upon each time we try
to find a random conductor.

Change-Id: I917537f041e794fd3c94e0f2c48d25eb4351d4c8
2023-08-22 15:58:57 -07:00
Julia Kreger
2366a4b86e Adds service steps
A huge list of initial work for service steps

* Adds service_step verb
* Adds service_step db/object/API field on the node object for the
  status.
* Increments the API version to 1.87 for both changes.
* Increments the RPC API version to 1.57.
* Adds initial testing to facilitate ensurance that supplied steps
  are passed through and executed upon.

Does not:

* Have tests for starting the agent ramdisk, although this is
  relatively boiler plate.
* Have a collection of pre-decorated steps available for immediate
  consumption.

Change-Id: I5b9dd928f24dff7877a4ab8dc7b743058cace994
2023-08-16 06:34:08 -07:00
Dmitry Tantsur
02f39c2460 Fix minor grammar issues in the help for new inspector options
Change-Id: Ic1add0ebbabc26f290236a3d711ce7ecdb8faa09
2023-07-31 16:15:25 +02:00
David Hill
8c93d7df83 Cleanup if images.fetch fails
Cleanup if images.fetch fails as in some cases, we might get a stale
.part file that is incomplete and corrupted (ie: full disk due to image
conversion) and this prevents future deployment from working.

Co-Authored-By: Julia Kreger <juliaashleykreger@gmail.com>
Change-Id: I53bfd0dcc6289e51316795fbe352c70d608e4f31
2023-07-07 13:24:22 -07:00
Dmitry Tantsur
ad651b328e Remove traces of Docker from devstack dependencies
Change-Id: Ie26fb7c644c6feb547bcdc6d847838d2fed0d31f
2023-06-05 11:30:38 +02:00
Kaifeng Wang
ae7760af0f Remove instance image after deployment
Direct deploy interface with http source never removes instance
image after deployment, which makes the image in the image cache
referenced and unable to be cleaned up exceeds TTL.

Change-Id: I3d8ee090007dc90b8868026ba24509719f81e4d7
2023-04-30 15:17:16 +08:00
Julia Kreger
9953b5a2e8 add default conductor group capability
When creating nodes, previously there was no way to set a
default conductor group to create nodes with, thus forcing
a two step process, a dedicated conductor without a conductor
group to serve reqeusts for it.

With this change, an operator can set specific conductor_group
settings by API, allowing increased delineation with reduced
risk of misconfiguration or mis-step.

Story: 2010267
Task: 46183
Change-Id: I21d58750504b2eecf3368d2e03eaca050065c3d7
2023-03-13 12:00:40 -07:00
1232 changed files with 96378 additions and 28220 deletions

7
.coveragerc Normal file
View file

@ -0,0 +1,7 @@
[run]
branch = True
source = ironic
omit = ironic/tests/*
[report]
ignore_errors = True

7
.gitignore vendored
View file

@ -8,10 +8,16 @@
_build
doc/source/contributor/api/
_static
doc/source/admin/drivers/redfish/OpenStackIronicProfile.*.rst
# release notes build
releasenotes/build
# sample config files
etc/ironic/ironic.conf.sample
etc/ironic/ironic.networking.conf.sample
etc/ironic/policy.yaml.sample
# Packages/installer info
*.egg
*.egg-info
@ -28,6 +34,7 @@ develop-eggs
# Other
*.DS_Store
.idea
.vscode
.testrepository
.stestr
.tox

View file

@ -2,4 +2,3 @@
host=review.opendev.org
port=29418
project=openstack/ironic.git
defaultbranch=bugfix/22.1

104
.pre-commit-config.yaml Normal file
View file

@ -0,0 +1,104 @@
---
default_language_version:
# force all unspecified python hooks to run python3
python: python3
exclude: |
(?x)^(
venv/|
.venv/|
env/|
.tox/|
build/|
dist/
)
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v6.0.0
hooks:
- id: trailing-whitespace
# NOTE(JayF): We shouldn't modify release notes after their
# associated release. Instead, ignore these minor lint issues.
exclude: |
(?x)(
^releasenotes/notes/redfish-raid-get-drives-fix-18d46f3e7275b0ef.yaml$|
^releasenotes/notes/provide_mountpoint-58cfd25b6dd4cfde.yaml$|
^releasenotes/notes/ipmi-retries-min-command-interval-070cd7eff5eb74dd.yaml$|
^releasenotes/notes/deprecate-ibmc-9106cc3a81171738.yaml$|
^releasenotes/notes/fix-cve-2016-4985-b62abae577025365.yaml$
)
- id: mixed-line-ending
args: ['--fix', 'lf']
exclude: |
(?x)(
.*.svg$|
^releasenotes/notes/ibmc-driver-45fcf9f50ebf0193.yaml$|
)
- id: fix-byte-order-marker
- id: check-merge-conflict
- id: debug-statements
- id: check-json
files: .*\.json$
- id: check-yaml
files: .*\.(yaml|yml)$
exclude: releasenotes/.*$
- repo: https://github.com/Lucas-C/pre-commit-hooks
rev: v1.5.5
hooks:
- id: remove-tabs
exclude: '.*\.(svg)$'
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.14.6
hooks:
- id: ruff-check
args: ['--fix', '--unsafe-fixes']
- repo: https://opendev.org/openstack/hacking
rev: 8.0.0
hooks:
- id: hacking
additional_dependencies: []
exclude: '^(doc|releasenotes|tools)/.*$'
- repo: https://github.com/codespell-project/codespell
rev: v2.2.6
hooks:
- id: codespell
args: [--write-changes]
- repo: https://github.com/sphinx-contrib/sphinx-lint
rev: v1.0.2
hooks:
- id: sphinx-lint
args: [--enable=default-role]
files: ^doc/|releasenotes|api-ref
- repo: https://opendev.org/openstack/bashate
rev: 2.1.1
hooks:
- id: bashate
args: ["-iE006,E044", "-eE005,E042"]
name: bashate
description: This hook runs bashate for linting shell scripts
entry: bashate
language: python
types: [shell]
- repo: https://github.com/PyCQA/bandit
rev: 1.9.1
hooks:
- id: bandit
args: ["-x", "tests/", "-n5", "-ll", "-c", "tools/bandit.yml"]
name: bandit
description: 'Bandit is a tool for finding common security issues in Python code'
entry: bandit
language: python
language_version: python3
types: [ python ]
require_serial: true
- repo: https://github.com/PyCQA/doc8
rev: v2.0.0
hooks:
- id: doc8
- repo: local
hooks:
- id: check-releasenotes
name: check-releasenotes
language: python
entry: python tools/check-releasenotes.py

View file

@ -2,21 +2,27 @@
Ironic
======
Team and repository tags
------------------------
.. image:: https://governance.openstack.org/tc/badges/ironic.svg
:target: https://governance.openstack.org/tc/reference/tags/index.html
Overview
--------
Ironic consists of an API and plug-ins for managing and provisioning
physical machines in a security-aware and fault-tolerant manner. It can be
used with nova as a hypervisor driver, or standalone service using bifrost.
By default, it will use PXE and IPMI to interact with bare metal machines.
Ironic also supports vendor-specific plug-ins which may implement additional
functionality.
used with nova as a hypervisor driver, or standalone service.
By default, it will use PXE and IPMI/Redfish to interact with bare metal
machines. Some drivers, like the Redfish drivers, also support advanced
features like leveraging HTTPBoot or Virtual Media based boot operations
depending on the configuration by the user. Ironic also supports
vendor-specific plug-ins which may implement additional functionality,
however many vendors have chosen to focus on their Redfish implementations
instead of customized drivers.
Numerous ways exist to leverage Ironic to deploy a bare metal node, above
and beyond asking Nova for a "bare metal" instance, or for asking Ironic
to manually deploy a specific machine. Bifrost and Metal3 are related
projects which seek to simplify the use and interaction of Ironic.
Ironic is distributed under the terms of the Apache License, Version 2.0. The
full terms and conditions of this license are detailed in the LICENSE file.
@ -33,8 +39,8 @@ Project resources
* Design Specifications: https://specs.openstack.org/openstack/ironic-specs/
Project status, bugs, and requests for feature enhancements (RFEs) are tracked
in StoryBoard:
https://storyboard.openstack.org/#!/project/943
in Launchpad:
https://launchpad.net/ironic
For information on how to contribute to ironic, see
https://docs.openstack.org/ironic/latest/contributor

View file

@ -273,7 +273,7 @@ GET v1/lookup?node_uuid=$NID > lookup-node-response.json
# and the node's driver is "fake", to avoid potential races
# with internal processes that lock the Node
# this corrects an intentional ommission in some of the samples
# this corrects an intentional omission in some of the samples
PATCH v1/nodes/$NID node-update-driver-info-request.json > node-update-driver-info-response.json
GET v1/nodes/$NID/management/boot_device/supported > node-get-supported-boot-devices-response.json
@ -359,3 +359,9 @@ sed -i "s/$(hostname)/$DOC_IRONIC_CONDUCTOR_HOSTNAME/" *.json
sed -i "s/created_at\": \".*\"/created_at\": \"$DOC_CREATED_AT\"/" *.json
sed -i "s/updated_at\": \".*\"/updated_at\": \"$DOC_UPDATED_AT\"/" *.json
sed -i "s/provision_updated_at\": \".*\"/provision_updated_at\": \"$DOC_PROVISION_UPDATED_AT\"/" *.json
##########
# Clean up
openstack baremetal node maintenance set $NID
openstack baremetal node delete $NID

View file

@ -52,7 +52,7 @@ parameters must be missing or match the provided node.
.. versionadded:: 1.79
A node with the same name as the allocation ``name`` is moved to the
start of the derived candidiate list.
start of the derived candidate list.
Normal response codes: 201

View file

@ -0,0 +1,54 @@
.. -*- rst -*-
=====================================
Attach / Detach Virtual Media (nodes)
=====================================
.. versionadded:: 1.89
Attach a generic image as virtual media device to a node or remove
it from a node using the ``v1/nodes/{node_ident}/vmedia`` endpoint.
Attach a virtual media to a node
================================
.. rest_method:: POST /v1/nodes/{node_ident}/vmedia
Attach virtual media device to a node.
Normal response code: 204
Error codes: 400,401,403,404,409
Request
-------
.. rest_parameters:: parameters.yaml
- node_ident: node_ident
- device_type: vmedia_device_type
- image_url: vmedia_image_url
- image_download_source: vmedia_image_download_source
**Example request to attach virtual media to a Node:**
.. literalinclude:: samples/node-vmedia-attach-request.json
Detach virtual media from a node
================================
.. rest_method:: DELETE /v1/nodes/{node_ident}/vmedia
Detach virtual media device from a Node.
Normal response code: 204
Error codes: 400,401,403,404
Request
-------
.. rest_parameters:: parameters.yaml
- node_ident: node_ident

View file

@ -68,7 +68,7 @@ and method.
This endpoint passes the request directly to the hardware driver. The
HTTP BODY must be parseable JSON, which will be converted to parameters passed
to that function. Unparseable JSON, missing parameters, or excess parameters
to that function. Unparsable JSON, missing parameters, or excess parameters
will cause the request to be rejected with an HTTP 400 error.
Normal response code: 200 202

View file

@ -82,12 +82,17 @@ drivers supported by this Ironic service.
If the request has the "detail" URL parameter set to true, each
driver will also include the following fields.
.. versionadded:: 1.86
Introduced the ``default_firmware_interface`` and
``enabled_firmware_interfaces`` fields.
.. rest_parameters:: parameters.yaml
- default_bios_interface: default_bios_interface
- default_boot_interface: default_boot_interface
- default_console_interface: default_console_interface
- default_deploy_interface: default_deploy_interface
- default_firmware_interface: default_firmware_interface
- default_inspect_interface: default_inspect_interface
- default_management_interface: default_management_interface
- default_network_interface: default_network_interface
@ -100,6 +105,7 @@ drivers supported by this Ironic service.
- enabled_boot_interfaces: enabled_boot_interfaces
- enabled_console_interfaces: enabled_console_interfaces
- enabled_deploy_interfaces: enabled_deploy_interfaces
- enabled_firmware_interfaces: enabled_firmware_interfaces
- enabled_inspect_interfaces: enabled_inspect_interfaces
- enabled_management_interfaces: enabled_management_interfaces
- enabled_network_interfaces: enabled_network_interfaces
@ -132,6 +138,10 @@ Shows details for a driver.
.. versionadded:: 1.77
Added ``fields`` selector to query for particular fields.
.. versionadded:: 1.86
Introduced the ``default_firmware_interface`` and
``enabled_firmware_interfaces`` fields.
Normal response codes: 200
Request
@ -154,6 +164,7 @@ Response Parameters
- default_boot_interface: default_boot_interface
- default_console_interface: default_console_interface
- default_deploy_interface: default_deploy_interface
- default_firmware_interface: default_firmware_interface
- default_inspect_interface: default_inspect_interface
- default_management_interface: default_management_interface
- default_network_interface: default_network_interface
@ -166,6 +177,7 @@ Response Parameters
- enabled_boot_interfaces: enabled_boot_interfaces
- enabled_console_interfaces: enabled_console_interfaces
- enabled_deploy_interfaces: enabled_deploy_interfaces
- enabled_firmware_interfaces: enabled_firmware_interfaces
- enabled_inspect_interfaces: enabled_inspect_interfaces
- enabled_management_interfaces: enabled_management_interfaces
- enabled_network_interfaces: enabled_network_interfaces

View file

@ -0,0 +1,21 @@
.. -*- rst -*-
=========================
Get Virtual Media (nodes)
=========================
.. versionadded:: 1.93
Get a list of virtual media devices attached to a node using
the ``v1/nodes/{node_ident}/vmedia`` endpoint.
Get virtual media devices attached to a node
============================================
.. rest_method:: GET /v1/nodes/{node_ident}/vmedia
Get virtual media devices attached to a node.
Normal response code: 200
Error codes: 400,401,403,404,409

View file

@ -0,0 +1,260 @@
.. -*- rst -*-
===================================
Inspection rules (inspection_rules)
===================================
Inspection Rules consist of conditions that evaluate against inspection data
and actions that run on a node when conditions are met during inspection.
.. versionadded:: 1.96
Inspection Rules API was introduced.
Create Inspection Rule
======================
.. rest_method:: POST /v1/inspection_rules
Creates an inspection rule.
.. versionadded:: 1.96
Inspection Rules API was introduced.
Normal response codes: 201
Error response codes: 400, 401, 403, 409
Request
-------
.. rest_parameters:: parameters.yaml
- uuid: req_uuid
- description: inspection_rule_description
- conditions: inspection_rule_conditions
- actions: inspection_rule_actions
- phase: inspection_rule_phase
- priority: inspection_rule_priority
- sensitive: inspection_rule_sensitive
Request Inspection Rule Condition
---------------------------------
.. rest_parameters:: parameters.yaml
- op: inspection_rule_condition_op
- args: inspection_rule_condition_args
- loop: inspection_rule_condition_loop
- multiple: inspection_rule_condition_multiple
Request Inspection Rule Action
------------------------------
.. rest_parameters:: parameters.yaml
- op: inspection_rule_action_op
- args: inspection_rule_action_args
- loop: inspection_rule_action_loop
Request Example
---------------
.. literalinclude:: samples/inspection-rule-create-request.json
:language: javascript
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- description: inspection_rule_description
- conditions: inspection_rule_conditions
- actions: inspection_rule_actions
- phase: inspection_rule_phase
- priority: inspection_rule_priority
- sensitive: inspection_rule_sensitive
- created_at: created_at
- updated_at: updated_at
- links: links
Response Example
----------------
.. literalinclude:: samples/inspection-rule-create-response.json
:language: javascript
List Inspection Rules
=====================
.. rest_method:: GET /v1/inspection_rules
Lists all inspection rules.
.. versionadded:: 1.96
Inspection Rules API was introduced.
Normal response codes: 200
Error response codes: 400, 401, 403, 404
Request
-------
.. rest_parameters:: parameters.yaml
- detail: detail
- phase: req_inspection_rule_phase
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- description: inspection_rule_description
- phase: inspection_rule_phase
- priority: inspection_rule_priority
- sensitive: inspection_rule_sensitive
- created_at: created_at
- updated_at: updated_at
- links: links
- conditions: inspection_rule_conditions
- actions: inspection_rule_actions
Response Example
----------------
**Example inspection rule list response:**
.. literalinclude:: samples/inspection-rule-list-response.json
:language: javascript
**Example detailed inspection rule list response:**
.. literalinclude:: samples/inspection-rule-detail-response.json
:language: javascript
Show Inspection Rule Details
============================
.. rest_method:: GET /v1/inspection_rules/{rule_id}
Shows details for an inspection rule.
.. versionadded:: 1.96
Inspection Rules API was introduced.
Normal response codes: 200
Error response codes: 400, 401, 403, 404
Request
-------
.. rest_parameters:: parameters.yaml
- rule_id: inspection_rule_ident
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- description: inspection_rule_description
- conditions: inspection_rule_conditions
- actions: inspection_rule_actions
- phase: inspection_rule_phase
- priority: inspection_rule_priority
- sensitive: inspection_rule_sensitive
- created_at: created_at
- updated_at: updated_at
- links: links
Response Example
----------------
.. literalinclude:: samples/inspection-rule-show-response.json
:language: javascript
Update an Inspection Rule
=========================
.. rest_method:: PATCH /v1/inspection_rules/{rule_id}
Update an inspection rule.
.. versionadded:: 1.96
Inspection Rules API was introduced.
Normal response code: 200
Error response codes: 400, 401, 403, 404, 409
Request
-------
The BODY of the PATCH request must be a JSON PATCH document, adhering to
`RFC 6902 <https://tools.ietf.org/html/rfc6902>`_.
.. rest_parameters:: parameters.yaml
- rule_id: inspection_rule_ident
.. literalinclude:: samples/inspection-rule-update-request.json
:language: javascript
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- description: inspection_rule_description
- conditions: inspection_rule_conditions
- actions: inspection_rule_actions
- phase: inspection_rule_phase
- priority: inspection_rule_priority
- sensitive: inspection_rule_sensitive
- created_at: created_at
- updated_at: updated_at
- links: links
.. literalinclude:: samples/inspection-rule-update-response.json
:language: javascript
Delete Inspection Rule
======================
.. rest_method:: DELETE /v1/inspection_rules/{rule_id}
Deletes an inspection rule.
.. versionadded:: 1.96
Inspection Rules API was introduced.
Normal response codes: 204
Error response codes: 400, 401, 403, 404
Request
-------
.. rest_parameters:: parameters.yaml
- rule_id: inspection_rule_ident
Delete All Inspection Rules
===========================
.. rest_method:: DELETE /v1/inspection_rules
Deletes all non-built-in inspection rules.
.. versionadded:: 1.96
Inspection Rules API was introduced.
Normal response codes: 204
Error response codes: 400, 401, 403

View file

@ -35,7 +35,7 @@ depending on the service configuration.
Validate Node
===============
=============
.. rest_method:: GET /v1/nodes/{node_ident}/validate
@ -85,7 +85,7 @@ the Node's driver does not support that interface.
Set Maintenance Flag
=============================
====================
.. rest_method:: PUT /v1/nodes/{node_ident}/maintenance
@ -110,7 +110,7 @@ Request
.. literalinclude:: samples/node-maintenance-request.json
Clear Maintenance Flag
==============================
======================
.. rest_method:: DELETE /v1/nodes/{node_ident}/maintenance
@ -198,7 +198,7 @@ Response
Get Supported Boot Devices
===========================
==========================
.. rest_method:: GET /v1/nodes/{node_ident}/management/boot_device/supported
@ -306,6 +306,10 @@ Change Node Boot Mode
Request a change to the Node's boot mode.
.. note::
Depending on the driver and the underlying hardware, changing boot mode may
result in an automatic reboot.
.. versionadded:: 1.76
A change in node's boot mode can be requested.
@ -341,6 +345,10 @@ Change Node Secure Boot
Request a change to the Node's secure boot state.
.. note::
Depending on the driver and the underlying hardware, changing the secure
boot state may result in an automatic reboot.
.. versionadded:: 1.76
A change in node's secure boot state can be requested.
@ -442,6 +450,19 @@ detailed documentation of the Ironic State Machine is available
``disable_ramdisk`` can be provided to avoid booting the ramdisk during
manual cleaning.
.. versionadded:: 1.87
A node can be serviced by setting the provision target state to ``service``
with a list of ``service_steps``.
.. versionadded:: 1.92
Added the ability to allow for predefined sets of steps to be executed
during provisioning by passing in a ``runbook_ident`` that's already
approved for the given node, as an alternative to providing ``clean_steps``
or ``service_steps`` dictionary.
.. versionadded:: 1.95
Added the ability to set/unset ``disable_power_off`` on a node.
Normal response code: 202
Error codes:
@ -460,8 +481,10 @@ Request
- configdrive: configdrive
- clean_steps: clean_steps
- deploy_steps: deploy_steps
- service_steps: service_steps
- rescue_password: rescue_password
- disable_ramdisk: disable_ramdisk
- runbook: runbook_ident
**Example request to deploy a Node, using a configdrive served via local webserver:**
@ -475,6 +498,17 @@ Request
.. literalinclude:: samples/node-set-clean-state.json
**Example request to service a Node, with custom service step:**
.. literalinclude:: samples/node-set-service-state.json
**Example request to set provision state for a Node with a runbook:**
.. literalinclude:: samples/node-set-provision-state.json
.. note:: Use ``runbook`` as an alternative to ``clean_steps`` or
``service_steps``. If ``runbook`` is provided, ``clean_steps`` or
``service_steps`` must not be included in the request.
Set RAID Config
===============

View file

@ -61,7 +61,7 @@ and method.
This endpoint passes the request directly to the Node's hardware driver. The
HTTP BODY must be parseable JSON, which will be converted to parameters passed
to that function. Unparseable JSON, missing parameters, or excess parameters
to that function. Unparsable JSON, missing parameters, or excess parameters
will cause the request to be rejected with an HTTP 400 error.
Normal response code: 200 202

View file

@ -4,7 +4,7 @@
Node Firmware (nodes)
=====================
.. versionadded:: 1.84
.. versionadded:: 1.86
Given a Node identifier (``uuid`` or ``name``), the API exposes the list of
all Firmware Components associated with that Node.

View file

@ -12,7 +12,7 @@ by accessing the Port resources under the ``/v1/ports`` endpoint.
List Ports by Node
===================
==================
.. rest_method:: GET /v1/nodes/{node_ident}/ports
@ -35,6 +35,18 @@ Return a list of bare metal Ports associated with ``node_ident``.
.. versionadded:: 1.53
Added the ``is_smartnic`` response fields.
.. versionadded:: 1.88
Added the ``name`` field.
.. versionadded:: 1.97
Added the ``description`` field.
.. versionadded:: 1.100
Added the ``vendor`` field.
.. versionadded:: 1.101
Added the ``category`` field.
Normal response code: 200
Error codes: TBD
@ -85,6 +97,18 @@ Return a detailed list of bare metal Ports associated with ``node_ident``.
.. versionadded:: 1.53
Added the ``is_smartnic`` response fields.
.. versionadded:: 1.88
Added the ``name`` field.
.. versionadded:: 1.97
Added the ``description`` field.
.. versionadded:: 1.100
Added the ``vendor`` field.
.. versionadded:: 1.101
Added the ``category`` field.
Normal response code: 200
Error codes: TBD
@ -110,6 +134,7 @@ Response
- uuid: uuid
- address: port_address
- node_uuid: node_uuid
- name: port_name
- local_link_connection: local_link_connection
- pxe_enabled: pxe_enabled
- physical_network: physical_network
@ -119,6 +144,9 @@ Response
- updated_at: updated_at
- links: links
- is_smartnic: is_smartnic
- description: port_description
- vendor: port_vendor
- category: port_category
**Example details of a Node's Ports:**

View file

@ -18,6 +18,15 @@ capable of running an Operating System. Each Node must be associated with a
the ``node_ident``. Responses clearly indicate whether a given field is a
``uuid`` or a ``name``.
.. versionchanged:: 1.91
In older API versions, we have a pecan feature enabled that strips .json
extensions from the end of a resource reference query and treat it as if it
was referenced by just its UUID or ``node_ident``. E.g.
``0178-0c2c-9c26-ca69-3011-a9dd.json``, is treated as
``0178-0c2c-9c26-ca69-3011-a9dd``. This feature is now disabled in newer API
versions.
Depending on the Roles assigned to the authenticated OpenStack User, and upon
the configuration of the Bare Metal service, API responses may change. For
example, the default value of the "show_password" settings cause all API
@ -107,9 +116,15 @@ supplied when the Node is created, or the resource may be updated later.
.. versionadded:: 1.82
Introduced the ``shard`` field.
.. versionadded: 1.83
.. versionadded:: 1.83
Introduced the ``parent_node`` field.
.. versionadded:: 1.95
Introduced the ``disable_power_off`` field.
.. versionadded:: 1.104
Introduced the ``instance_name`` field.
Normal response codes: 201
Error codes: 400,403,406
@ -123,6 +138,7 @@ Request
- conductor_group: req_conductor_group
- console_interface: req_console_interface
- deploy_interface: req_deploy_interface
- disable_power_off: req_disable_power_off
- driver_info: req_driver_info
- driver: req_driver_name
- extra: req_extra
@ -147,6 +163,7 @@ Request
- chassis_uuid: req_chassis_uuid
- instance_info: req_instance_info
- instance_uuid: req_instance_uuid
- instance_name: req_instance_name
- maintenance: req_maintenance
- maintenance_reason: maintenance_reason
- network_data: network_data
@ -169,7 +186,7 @@ and any defaults added for non-specified fields. Most fields default to "null"
or "".
The list and example below are representative of the response as of API
microversion 1.81.
microversion 1.95.
.. rest_parameters:: parameters.yaml
@ -190,6 +207,7 @@ microversion 1.81.
- properties: n_properties
- instance_info: instance_info
- instance_uuid: instance_uuid
- instance_name: instance_name
- chassis_uuid: chassis_uuid
- extra: extra
- console_enabled: console_enabled
@ -230,6 +248,7 @@ microversion 1.81.
- network_data: network_data
- retired: retired
- retired_reason: retired_reason
- disable_power_off: disable_power_off
**Example JSON representation of a Node:**
@ -300,6 +319,9 @@ provision state, and maintenance setting for each Node.
nodes to be enumerated, which are normally hidden as child nodes are not
normally intended for direct consumption by end users.
.. versionadded:: 1.104
Introduced the ``instance_name`` query parameter and response field.
Normal response codes: 200
Error codes: 400,403,406
@ -310,6 +332,7 @@ Request
.. rest_parameters:: parameters.yaml
- instance_uuid: r_instance_uuid
- instance_name: r_instance_name
- maintenance: r_maintenance
- associated: r_associated
- provision_state: r_provision_state
@ -398,6 +421,10 @@ Nova instance, eg. with a request to ``v1/nodes/detail?instance_uuid={NOVA INSTA
.. versionadded:: 1.82
Introduced the ``shard`` field. Introduced the ``sharded`` request parameter.
.. versionadded:: 1.104
Introduced the ``instance_name`` field.
Normal response codes: 200
Error codes: 400,403,406
@ -408,6 +435,7 @@ Request
.. rest_parameters:: parameters.yaml
- instance_uuid: r_instance_uuid
- instance_name: r_instance_name
- maintenance: r_maintenance
- fault: r_fault
- associated: r_associated
@ -448,6 +476,7 @@ Response
- properties: n_properties
- instance_info: instance_info
- instance_uuid: instance_uuid
- instance_name: instance_name
- chassis_uuid: chassis_uuid
- extra: extra
- console_enabled: console_enabled
@ -487,6 +516,15 @@ Response
- retired: retired
- retired_reason: retired_reason
- network_data: network_data
- automated_clean: automated_clean
- service_step: service_step
- firmware_interface: firmware_interface
- provision_updated_at: provision_updated_at
- inspection_started_at: inspection_started_at
- inspection_finished_at: inspection_finished_at
- created_at: created_at
- updated_at: updated_at
- disable_power_off: disable_power_off
**Example detailed list of Nodes:**
@ -545,6 +583,12 @@ only the specified set.
.. versionadded:: 1.83
Introduced the ``parent_node`` field.
.. versionadded:: 1.95
Introduced the ``disable_power_off`` field.
.. versionadded:: 1.104
Introduced the ``instance_name`` field.
Normal response codes: 200
Error codes: 400,403,404,406
@ -579,6 +623,7 @@ Response
- properties: n_properties
- instance_info: instance_info
- instance_uuid: instance_uuid
- instance_name: instance_name
- chassis_uuid: chassis_uuid
- extra: extra
- console_enabled: console_enabled
@ -615,6 +660,7 @@ Response
- conductor: conductor
- allocation_uuid: allocation_uuid
- network_data: network_data
- disable_power_off: disable_power_off
**Example JSON representation of a Node:**
@ -641,6 +687,9 @@ managed through sub-resources.
.. versionadded:: 1.82
Introduced the ability to set/unset a node's shard.
.. versionadded:: 1.104
Introduced the ability to set/unset node's instance_name.
Normal response codes: 200
Error codes: 400,403,404,406,409
@ -651,6 +700,13 @@ Request
The BODY of the PATCH request must be a JSON PATCH document, adhering to
`RFC 6902 <https://tools.ietf.org/html/rfc6902>`_.
.. note::
The ``instance_uuid`` field is an exception to the RFC 6902 behavior.
The "add" operator cannot replace an existing ``instance_uuid`` value.
Attempting to do so will result in a 409 Conflict error (NodeAssociated
exception). This protection prevents race conditions when multiple
Nova compute agents try to associate the same node.
.. rest_parameters:: parameters.yaml
- node_ident: node_ident
@ -681,6 +737,7 @@ Response
- properties: n_properties
- instance_info: instance_info
- instance_uuid: instance_uuid
- instance_name: instance_name
- chassis_uuid: chassis_uuid
- extra: extra
- console_enabled: console_enabled
@ -716,6 +773,7 @@ Response
- conductor: conductor
- allocation_uuid: allocation_uuid
- network_data: network_data
- disable_power_off: disable_power_off
**Example JSON representation of a Node:**

View file

@ -28,6 +28,18 @@ Response to include only the specified fields, rather than the default set.
.. versionadded:: 1.53
Added the ``is_smartnic`` response fields.
.. versionadded:: 1.88
Added the ``name`` field.
.. versionadded:: 1.97
Added the ``description`` field.
.. versionadded:: 1.100
Added the ``vendor`` field.
.. versionadded:: 1.101
Added the ``category`` field.
Normal response code: 200
Error codes: 400,401,403,404
@ -72,6 +84,18 @@ Return a detailed list of bare metal Ports associated with ``portgroup_ident``.
.. versionadded:: 1.53
Added the ``is_smartnic`` response fields.
.. versionadded:: 1.88
Added the ``name`` field.
.. versionadded:: 1.97
Added the ``description`` field.
.. versionadded:: 1.100
Added the ``vendor`` field.
.. versionadded:: 1.101
Added the ``category`` field.
Normal response code: 200
Error codes: 400,401,403,404
@ -106,6 +130,10 @@ Response
- updated_at: updated_at
- links: links
- is_smartnic: is_smartnic
- name: port_name
- description: port_description
- vendor: port_vendor
- category: port_category
**Example details of a Portgroup's Ports:**

View file

@ -32,6 +32,10 @@ By default, this query will return the UUID, name and address for each Portgroup
Added the ``detail`` boolean request parameter. When specified ``True`` this
causes the response to include complete details about each portgroup.
.. versionadded:: 1.99
Added the ability to filter portgroups based on the ``conductor_group`` of the
node they are associated with.
Normal response code: 200
Error codes: 400,401,403,404
@ -49,6 +53,7 @@ Request
- sort_dir: sort_dir
- sort_key: sort_key
- detail: detail
- conductor_group: r_conductor_group_port
Response
--------
@ -77,6 +82,12 @@ Creates a new Portgroup resource.
This method requires a Node UUID and the physical hardware address for the
Portgroup (MAC address in most cases).
.. versionadded:: 1.102
Added the ``physical_network`` field.
.. versionadded:: 1.103
Added the ``category`` field.
Normal response code: 201
Error codes: 400,401,403,404
@ -94,6 +105,8 @@ Request
- properties: req_portgroup_properties
- extra: req_extra
- uuid: req_uuid
- physical_network: req_physical_network
- category : req_portgroup_category
**Example Portgroup creation request:**
@ -118,6 +131,8 @@ Response
- updated_at: updated_at
- links: links
- ports: pg_ports
- physical_network: physical_network
- category : portgroup_category
**Example Portgroup creation response:**
@ -132,6 +147,12 @@ List Detailed Portgroups
Return a list of bare metal Portgroups, with detailed information.
.. versionadded:: 1.102
Added the ``physical_network`` field.
.. versionadded:: 1.103
Added the ``category`` field.
Normal response code: 200
Error codes: 400,401,403,404
@ -167,6 +188,8 @@ Response
- updated_at: updated_at
- links: links
- ports: pg_ports
- physical_network: physical_network
- category: portgroup_category
**Example detailed Portgroup list response:**
@ -181,6 +204,12 @@ Show Portgroup Details
Show details for the given Portgroup.
.. versionadded:: 1.102
Added the ``physical_network`` field.
.. versionadded:: 1.103
Added the ``category`` field.
Normal response code: 200
Error codes: 400,401,403,404
@ -211,6 +240,8 @@ Response
- updated_at: updated_at
- links: links
- ports: pg_ports
- physical_network: physical_network
- category: portgroup_category
**Example Portgroup details:**
@ -225,6 +256,12 @@ Update a Portgroup
Update a Portgroup.
.. versionadded:: 1.102
Added the ``physical_network`` field.
.. versionadded:: 1.103
Added the ``category`` field.
Normal response code: 200
Error codes: 400,401,403,404
@ -262,6 +299,8 @@ Response
- updated_at: updated_at
- links: links
- ports: pg_ports
- physical_network: physical_network
- category: portgroup_category
**Example Portgroup update response:**

View file

@ -50,8 +50,21 @@ By default, this query will return the uuid and address for each Port.
Added the ``is_smartnic`` field.
.. versionadded:: 1.82
Added the ability to filter ports based on the shard of the node they are
associated with.
Added the ability to filter ports based on the ``shard`` of the node they
are associated with.
.. versionadded:: 1.97
Added the ``description`` field.
.. versionadded:: 1.99
Added the ability to filter ports based on the ``conductor_group`` of the
node they are associated with.
.. versionadded:: 1.100
Added the ``vendor`` field.
.. versionadded:: 1.101
Added the ``category`` field.
Normal response code: 200
@ -65,6 +78,7 @@ Request
- portgroup: r_port_portgroup_ident
- address: r_port_address
- shard: r_port_shard
- conductor_group: r_conductor_group_port
- fields: fields
- limit: limit
- marker: marker
@ -111,6 +125,26 @@ This method requires a Node UUID and the physical hardware address for the Port
.. versionadded:: 1.53
Added the ``is_smartnic`` request and response fields.
.. versionadded:: 1.88
Added the ``name`` field.
.. versionadded:: 1.90
``local_link_connection`` fields now accepts a dictionary
of ``vtep-logical-switch``, ``vtep-physical-switch`` and ``port_id``
to identify ovn vtep switches.
.. versionadded:: 1.94
Added support to create ports passing in either the node name or UUID.
.. versionadded:: 1.97
Added the ``description`` field.
.. versionadded:: 1.100
Added the ``vendor`` field.
.. versionadded:: 1.101
Added the ``category`` field.
Normal response code: 201
Request
@ -118,15 +152,22 @@ Request
.. rest_parameters:: parameters.yaml
- node_uuid: req_node_uuid
- node_ident: node_ident
- address: req_port_address
- portgroup_uuid: req_portgroup_uuid
- name: req_port_name
- local_link_connection: req_local_link_connection
- pxe_enabled: req_pxe_enabled
- physical_network: req_physical_network
- extra: req_extra
- is_smartnic: req_is_smartnic
- uuid: req_uuid
- description: req_port_description
- vendor: req_port_vendor
- category: req_port_category
.. note::
Either `node_ident` or `node_uuid` is a valid parameter.
**Example Port creation request:**
@ -142,6 +183,7 @@ Response
- address: port_address
- node_uuid: node_uuid
- portgroup_uuid: portgroup_uuid
- name: port_name
- local_link_connection: local_link_connection
- pxe_enabled: pxe_enabled
- physical_network: physical_network
@ -151,6 +193,9 @@ Response
- updated_at: updated_at
- links: links
- is_smartnic: is_smartnic
- description: port_description
- vendor: port_vendor
- category: port_category
**Example Port creation response:**
@ -182,6 +227,22 @@ Return a list of bare metal Ports, with detailed information.
.. versionadded:: 1.53
Added the ``is_smartnic`` response fields.
.. versionadded:: 1.82
Added the ability to filter ports based on the shard of the node they are
associated with.
.. versionadded:: 1.88
Added the ``name`` field.
.. versionadded:: 1.97
Added the ``description`` field.
.. versionadded:: 1.100
Added the ``vendor`` field.
.. versionadded:: 1.101
Added the ``category`` field.
Normal response code: 200
Request
@ -193,6 +254,7 @@ Request
- node_uuid: r_port_node_uuid
- portgroup: r_port_portgroup_ident
- address: r_port_address
- shard: r_port_shard
- limit: limit
- marker: marker
- sort_dir: sort_dir
@ -208,6 +270,7 @@ Response
- address: port_address
- node_uuid: node_uuid
- portgroup_uuid: portgroup_uuid
- name: port_name
- local_link_connection: local_link_connection
- pxe_enabled: pxe_enabled
- physical_network: physical_network
@ -217,6 +280,9 @@ Response
- updated_at: updated_at
- links: links
- is_smartnic: is_smartnic
- description: port_description
- vendor: port_vendor
- category: port_category
**Example detailed Port list response:**
@ -248,6 +314,18 @@ Show details for the given Port.
.. versionadded:: 1.53
Added the ``is_smartnic`` response fields.
.. versionadded:: 1.88
Added the ``name`` field.
.. versionadded:: 1.97
Added the ``description`` field.
.. versionadded:: 1.100
Added the ``vendor`` field.
.. versionadded:: 1.101
Added the ``category`` field.
Normal response code: 200
Request
@ -267,6 +345,7 @@ Response
- address: port_address
- node_uuid: node_uuid
- portgroup_uuid: portgroup_uuid
- name: port_name
- local_link_connection: local_link_connection
- pxe_enabled: pxe_enabled
- physical_network: physical_network
@ -276,6 +355,9 @@ Response
- updated_at: updated_at
- links: links
- is_smartnic: is_smartnic
- description: port_description
- vendor: port_vendor
- category: port_category
**Example Port details:**
@ -302,6 +384,24 @@ Update a Port.
.. versionadded:: 1.53
Added the ``is_smartnic`` fields.
.. versionadded:: 1.88
Added the ``name`` field.
.. versionadded:: 1.90
``local_link_connection`` fields now accepts a dictionary
of ``vtep-logical-switch``, ``vtep-physical-switch`` and ``port_id``
to identify ovn vtep switches.
.. versionadded:: 1.97
Added the ``description`` field.
.. versionadded:: 1.100
Added the ``vendor`` field.
.. versionadded:: 1.101
Added the ``category`` field.
Normal response code: 200
Request
@ -328,6 +428,7 @@ Response
- address: port_address
- node_uuid: node_uuid
- portgroup_uuid: portgroup_uuid
- name: port_name
- local_link_connection: local_link_connection
- pxe_enabled: pxe_enabled
- physical_network: physical_network
@ -337,6 +438,9 @@ Response
- updated_at: updated_at
- links: links
- is_smartnic: is_smartnic
- description: port_description
- vendor: port_vendor
- category: port_category
**Example Port update response:**

View file

@ -0,0 +1,245 @@
.. -*- rst -*-
===================
Runbooks (runbooks)
===================
The Runbook resource represents a collection of steps that define a
series of actions to be executed on a node. Runbooks enable users to perform
complex operations in a predefined, automated manner. A runbook is
matched for a node if the runbook's name matches a trait in the node.
.. versionadded:: 1.92
Runbook API was introduced.
Create Runbook
==============
.. rest_method:: POST /v1/runbooks
Creates a runbook.
.. versionadded:: 1.92
Runbook API was introduced.
Normal response codes: 201
Error response codes: 400, 401, 403, 409
Request
-------
.. rest_parameters:: parameters.yaml
- name: runbook_name
- steps: runbook_steps
- disable_ramdisk: req_disable_ramdisk
- uuid: req_uuid
- extra: req_extra
Request Runbook Step
--------------------
.. rest_parameters:: parameters.yaml
- interface: runbook_step_interface
- step: runbook_step_step
- args: runbook_step_args
- order: runbook_step_order
Request Example
---------------
.. literalinclude:: samples/runbook-create-request.json
:language: javascript
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- name: runbook_name
- steps: runbook_steps
- disable_ramdisk: disable_ramdisk
- extra: extra
- public: runbook_public
- owner: runbook_owner
- created_at: created_at
- updated_at: updated_at
- links: links
Response Example
----------------
.. literalinclude:: samples/runbook-create-response.json
:language: javascript
List Runbooks
=============
.. rest_method:: GET /v1/runbooks
Lists all runbooks.
.. versionadded:: 1.92
Runbook API was introduced.
Normal response codes: 200
Error response codes: 400, 401, 403, 404
Request
-------
.. rest_parameters:: parameters.yaml
- fields: fields
- limit: limit
- marker: marker
- sort_dir: sort_dir
- sort_key: sort_key
- detail: detail
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- name: runbook_name
- disable_ramdisk: disable_ramdisk
- steps: runbook_steps
- extra: extra
- public: runbook_public
- owner: runbook_owner
- created_at: created_at
- updated_at: updated_at
- links: links
Response Example
----------------
**Example runbook list response:**
.. literalinclude:: samples/runbook-list-response.json
:language: javascript
**Example detailed runbook list response:**
.. literalinclude:: samples/runbook-detail-response.json
:language: javascript
Show Runbook Details
====================
.. rest_method:: GET /v1/runbooks/{runbook_id}
Shows details for a runbook.
.. versionadded:: 1.92
Runbook API was introduced.
Normal response codes: 200
Error response codes: 400, 401, 403, 404
Request
-------
.. rest_parameters:: parameters.yaml
- fields: fields
- runbook_id: runbook_ident
Response Parameters
-------------------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- name: runbook_name
- steps: runbook_steps
- disable_ramdisk: disable_ramdisk
- extra: extra
- public: runbook_public
- owner: runbook_owner
- created_at: created_at
- updated_at: updated_at
- links: links
Response Example
----------------
.. literalinclude:: samples/runbook-show-response.json
:language: javascript
Update a Runbook
================
.. rest_method:: PATCH /v1/runbooks/{runbook_id}
Update a runbook.
.. versionadded:: 1.92
Runbook API was introduced.
Normal response code: 200
Error response codes: 400, 401, 403, 404, 409
Request
-------
The BODY of the PATCH request must be a JSON PATCH document, adhering to
`RFC 6902 <https://tools.ietf.org/html/rfc6902>`_.
Request
-------
.. rest_parameters:: parameters.yaml
- runbook_id: runbook_ident
.. literalinclude:: samples/runbook-update-request.json
:language: javascript
Response
--------
.. rest_parameters:: parameters.yaml
- uuid: uuid
- name: runbook_name
- steps: runbook_steps
- disable_ramdisk: disable_ramdisk
- extra: extra
- public: runbook_public
- owner: runbook_owner
- created_at: created_at
- updated_at: updated_at
- links: links
.. literalinclude:: samples/runbook-update-response.json
:language: javascript
Delete Runbook
==============
.. rest_method:: DELETE /v1/runbooks/{runbook_id}
Deletes a runbook.
.. versionadded:: 1.92
Runbook API was introduced.
Normal response codes: 204
Error response codes: 400, 401, 403, 404
Request
-------
.. rest_parameters:: parameters.yaml
- runbook_id: runbook_ident

View file

@ -12,10 +12,15 @@ supports versioning. There are two kinds of versions in Ironic.
- ''major versions'', which have dedicated urls.
- ''microversions'', which can be requested through the use of the
``X-OpenStack-Ironic-API-Version`` header.
``X-OpenStack-Ironic-API-Version`` header or the new standard singular header
``OpenStack-API-Version: baremetal <version>``.
The Version APIs work differently from other APIs as they *do not* require authentication.
Upon the Dalmatian release, all API requests support the
new standard singular header ``OpenStack-API-Version: baremetal <version>``.
If that's not present, we fall back to the legacy headers.
Beginning with the Kilo release, all API requests support the
``X-OpenStack-Ironic-API-Version`` header. This header SHOULD be supplied
with every request; in the absence of this header, each request is treated
@ -79,9 +84,13 @@ Response Example
- id: id
- links: links
- openstack-request-id: openstack-request-id
- x-openstack-request-id: x-openstack-request-id
- x-openstack-ironic-api-version: header_version
- x-openstack-ironic-api-min-version: x-openstack-ironic-api-min-version
- x-openstack-ironic-api-max-version: x-openstack-ironic-api-max-version
.. literalinclude:: samples/api-v1-root-response.json
:language: javascript
.. versionadded:: 1.107
Added the ``X-OpenStack-Request-Id`` header.

View file

@ -9,6 +9,7 @@
.. include:: baremetal-api-versions.inc
.. include:: baremetal-api-v1-nodes.inc
.. include:: baremetal-api-v1-node-management.inc
.. include:: baremetal-api-v1-attach-detach-vmedia.inc
.. include:: baremetal-api-v1-node-passthru.inc
.. include:: baremetal-api-v1-nodes-traits.inc
.. include:: baremetal-api-v1-nodes-vifs.inc
@ -23,13 +24,16 @@
.. include:: baremetal-api-v1-drivers.inc
.. include:: baremetal-api-v1-driver-passthru.inc
.. include:: baremetal-api-v1-nodes-bios.inc
.. include:: baremetal-api-v1-nodes-firmware.inc
.. include:: baremetal-api-v1-conductors.inc
.. include:: baremetal-api-v1-allocation.inc
.. include:: baremetal-api-v1-node-allocation.inc
.. include:: baremetal-api-v1-deploy-templates.inc
.. include:: baremetal-api-v1-runbooks.inc
.. include:: baremetal-api-v1-nodes-history.inc
.. include:: baremetal-api-v1-nodes-inventory.inc
.. include:: baremetal-api-v1-shards.inc
.. include:: baremetal-api-v1-inspection-rules.inc
.. NOTE(dtantsur): keep chassis close to the end since it's semi-deprecated
.. include:: baremetal-api-v1-chassis.inc
.. NOTE(dtantsur): keep misc last, since it covers internal API

View file

@ -36,6 +36,12 @@ x-openstack-ironic-api-version:
in: header
required: true
type: string
x-openstack-request-id:
description: >
This mirrors the ``openstack-request-id`` header.
in: header
required: false
type: string
# variables in path
allocation_ident:
@ -106,7 +112,7 @@ node_ident:
type: string
port_ident:
description: |
The UUID of the port.
The UUID or Name of the port.
in: path
required: true
type: string
@ -116,6 +122,12 @@ portgroup_ident:
in: path
required: true
type: string
runbook_ident:
description: |
The UUID or name of the runbook.
in: path
required: true
type: string
trait:
description: |
A single trait for this node.
@ -287,12 +299,29 @@ r_conductor_group:
in: query
required: false
type: string
r_conductor_group_port:
description: |
Filter the list of returned ports or portgroups, and only return those with
the specified ``conductor_group`` or an empty set if none found. List of
case-insensitive strings up to 255 characters, containing ``a-z``, ``0-9``,
``_``, ``-``, and ``.``. This cannot be used if ``node``, ``node_uuid``,
``portgroup`` or ``address`` is specified.
For example, the following request returns only the ports for nodes
in conductor groups ``bear`` and ``metal``:
::
GET /v1/ports?conductor_groups=bear,metal
in: query
required: false
type: array
r_description_contains:
description: |
Filter the list of returned nodes, and only return those containing
substring specified by ``description_contains``.
in: query
requred: false
required: false
type: string
r_driver:
description: |
@ -309,6 +338,13 @@ r_fault:
in: query
required: false
type: string
r_instance_name:
description: |
Filter the list of returned nodes, and only return the node with this
specific instance name, or an empty set if not found.
in: query
required: false
type: string
r_instance_uuid:
description: |
Filter the list of returned nodes, and only return the node with this
@ -545,7 +581,7 @@ bios_interface:
type: string
bios_setting_allowable_values:
description: |
A list of allowable values, otherwise ``null``.
A list of allowable values. May be ``null``.
in: body
required: true
type: array
@ -575,21 +611,19 @@ bios_setting_min_length:
type: integer
bios_setting_name:
description: |
The name of a Bios setting for a Node, eg. "virtualization".
The name of a Bios setting for a Node, eg. ``virtualization``.
in: body
required: true
type: string
bios_setting_read_only:
description: |
This Bios seting is read only and can't be changed.
May be None.
This Bios setting is read only and can't be changed. May be ``null``.
in: body
required: true
type: boolean
bios_setting_reset_required:
description: |
After setting this Bios setting a node reboot is required.
May be None.
After setting this Bios setting a node reboot is required. May be ``null``.
in: body
required: true
type: boolean
@ -607,7 +641,7 @@ bios_setting_upper_bound:
type: integer
bios_setting_value:
description: |
The value of a Bios setting for a Node, eg. "on".
The value of a Bios setting for a Node, eg. "on". May be ``null``.
in: body
required: true
type: string
@ -760,6 +794,13 @@ default_deploy_interface:
in: body
required: true
type: string
default_firmware_interface:
description: |
The default firmware interface used for a node with a dynamic driver, if no
firmware interface is specified for the node.
in: body
required: true
type: string
default_inspect_interface:
description: |
The default inspection interface used for a node with a dynamic driver, if
@ -881,6 +922,15 @@ description:
in: body
required: true
type: string
disable_power_off:
description: |
If set to true, power off for the node is explicitly disabled, instead, a
reboot will be used in place of power on/off. Additionally, when possible,
the node will be disabled (i.e., its API agent will be rendered unusable
and network configuration will be removed) instead of being powered off.
in: body
required: false
type: boolean
disable_ramdisk:
description: |
If set to ``true``, the ironic-python-agent ramdisk will not be booted for
@ -944,6 +994,12 @@ enabled_deploy_interfaces:
in: body
required: true
type: list
enabled_firmware_interfaces:
description: |
The enabled firmware interfaces for this driver.
in: body
required: true
type: list
enabled_inspect_interfaces:
description: |
The enabled inspection interfaces for this driver.
@ -1009,6 +1065,44 @@ fault:
in: body
required: false
type: string
firmware_component:
description: |
The Firmware Component of a Node, eg. "bios".
in: body
required: true
type: string
firmware_component_current_version:
description: |
The current version of a Firmware Component.
in: body
required: true
type: string
firmware_component_initial_version:
description: |
The initial version of a Firmware Component.
in: body
required: true
type: string
firmware_component_last_version_flashed:
description: |
The last version flashed of a Firmware Component.
in: body
required: true
type: string
firmware_components:
description: |
List of Firmware Components of the node. It includes following fields
"created_at", "updated_at", "component", "initial_version",
"current_version", "last_version_flashed"
in: body
required: true
type: array
firmware_interface:
description: |
Firmware interface for a node, e.g. “redfish”.
in: body
required: true
type: string
history_event:
description: |
The event message body which has been logged related to the node for
@ -1090,6 +1184,106 @@ inspection_finished_at:
in: body
required: true
type: string
inspection_rule_action_args:
description: |
A list (in the sense of Python ``*args``)
or a dict (in the sense of Python ``**kwargs``) with arguments for
the action operator.
in: body
required: true
type: array
inspection_rule_action_loop:
description: |
This is an Ansible-style loop field. It contains a list or dictionary
of items to iterate over for the same action.
in: body
required: false
type: array
inspection_rule_action_op:
description: |
The operator to execute with specified arguments when conditions are met.
in: body
required: true
type: string
inspection_rule_actions:
description: |
A list of actions to run during inspection. An action is a dictionary
or list, with required keys 'op' and 'args', and optional key 'loop'.
in: body
required: true
type: array
inspection_rule_condition_args:
description: |
A list (in the sense of Python ``*args``)
or a dict (in the sense of Python ``**kwargs``) with arguments for
the condition operator.
in: body
required: true
type: array
inspection_rule_condition_loop:
description: |
This is an Ansible-style loop field. It contains a list or dictionary
of items to iterate over for the same condition.
in: body
required: false
type: array
inspection_rule_condition_multiple:
description: |
Determines how the results of all loop iterations are combined, whether
a condition is returned as true if 'any' check passes,
or only when 'all'; the 'first', or the 'last' check is true.
in: body
required: false
type: string
inspection_rule_condition_op:
description: |
The operator to run conditions by, with specified arguments.
in: body
required: true
type: string
inspection_rule_conditions:
description: |
A list of conditions to check before applying the rule. A
condition is a dictionary or list, with required keys 'op' and 'args', and
optional keys 'loop' and 'multiple'.
in: body
required: false
type: array
inspection_rule_description:
description: |
Informational text about this rule.
in: body
required: false
type: string
inspection_rule_ident:
description: |
The UUID of the inspection rule.
in: body
required: false
type: string
inspection_rule_phase:
description: |
Specifies the phase when the rule should run, defaults to 'main'.
in: body
required: false
type: string
inspection_rule_priority:
description: |
A non-negative integer priority for the rule. Specifies the rule's
precedence level during execution. Priorities between 0 and 9999 can be
used by all rules, negative value and values above 10000 are reserved for
built-in rules. The default priority is 0.
in: body
required: false
type: int
inspection_rule_sensitive:
description: |
Indicates whether the rule contains sensitive information. A sensitive
rule will also have the ability to see sensitive fields on inspection
data.
in: body
required: false
type: string
inspection_started_at:
description: |
The UTC date and time when the hardware inspection was started,
@ -1107,9 +1301,24 @@ instance_info:
in: body
required: true
type: JSON
instance_name:
description: |
A human-readable name for the instance deployed on this node. This is
automatically synchronized with the ``display_name`` from the node's
``instance_info`` for backward compatibility with Nova.
in: body
required: false
type: string
instance_uuid:
description: |
UUID of the Nova instance associated with this Node.
.. note::
This field does not follow standard JSON PATCH RFC 6902 behavior.
The "add" operator cannot replace an existing instance_uuid value.
Attempting to do so will result in a 409 Conflict error (NodeAssociated
exception). This protection prevents race conditions when multiple
Nova compute agents try to associate the same node.
in: body
required: true
type: string
@ -1236,8 +1445,8 @@ n_ports:
type: array
n_properties:
description: |
Physical characteristics of this Node. Populated by ironic-inspector during
inspection. May be edited via the REST API at any time.
Physical characteristics of this Node. Populated during inspection. May be
edited via the REST API at any time.
in: body
required: true
type: JSON
@ -1375,8 +1584,8 @@ pg_ports:
type: array
physical_network:
description: |
The name of the physical network to which a port is connected. May be
empty.
The name of the physical network to which a port or portgroup is
connected. May be empty.
in: body
required: true
type: string
@ -1387,6 +1596,30 @@ port_address:
in: body
required: true
type: string
port_category:
description: |
Category of the network Port. Helps to further differentiate the Port.
in: body
required: false
type: string
port_description:
description: |
Descriptive text about the network Port.
in: body
required: false
type: string
port_name:
description: |
The name assigned to the network Port.
in: body
required: false
type: string
port_vendor:
description: |
Name of the hardware vendor of the network Port.
in: body
required: false
type: string
portgroup_address:
description: |
Physical hardware address of this Portgroup, typically the hardware
@ -1394,6 +1627,13 @@ portgroup_address:
in: body
required: false
type: string
portgroup_category:
description: |
Category of the network Portgroup. Helps to further differentiate the
Portgroup.
in: body
required: false
type: string
portgroup_internal_info:
description: |
Internal metadata set and stored by the Portgroup. This field is read-only.
@ -1620,6 +1860,22 @@ req_description:
in: body
required: false
type: string
req_disable_power_off:
description: |
If set to ``true``, power off for the node is explicitly disabled, instead, a
reboot will be used in place of power on/off. Additionally, when possible,
the node will be disabled (i.e., its API agent will be rendered unusable
and network configuration will be removed) instead of being powered off.
in: body
required: false
type: boolean
req_disable_ramdisk:
description: |
Whether to boot ramdisk while using a runbook for cleaning or servicing
operation.
in: body
required: false
type: boolean
req_driver_info:
description: |
All the metadata required by the driver to manage this Node. List of fields
@ -1647,6 +1903,12 @@ req_inspect_interface:
in: body
required: false
type: string
req_inspection_rule_phase:
description: |
Specifies the phase when the rule should run, defaults to 'main'.
in: body
required: false
type: string
req_instance_info:
description: |
Information used to customize the deployed image. May include root partition
@ -1656,9 +1918,24 @@ req_instance_info:
in: body
required: false
type: JSON
req_instance_name:
description: |
A human-readable name for the instance deployed on this node. This is
automatically synchronized with the ``display_name`` from the node's
``instance_info`` for backward compatibility with Nova.
in: body
required: false
type: string
req_instance_uuid:
description: |
UUID of the Nova instance associated with this Node.
.. note::
This field does not follow standard JSON PATCH RFC 6902 behavior.
The "add" operator cannot replace an existing instance_uuid value.
Attempting to do so will result in a 409 Conflict error (NodeAssociated
exception). This protection prevents race conditions when multiple
Nova compute agents try to associate the same node.
in: body
required: false
type: string
@ -1742,8 +2019,8 @@ req_persistent:
type: boolean
req_physical_network:
description: |
The name of the physical network to which a port is connected. May be
empty.
The name of the physical network to which a port or portgroup is connected.
May be empty.
in: body
required: false
type: string
@ -1754,6 +2031,30 @@ req_port_address:
in: body
required: true
type: string
req_port_category:
description: |
Category of the network Port. Helps to further differentiate the Port.
in: body
required: false
type: string
req_port_description:
description: |
Descriptive text about the network Port.
in: body
required: false
type: string
req_port_name:
description: |
The name assigned to the network Port.
in: body
required: false
type: string
req_port_vendor:
description: |
Name of the hardware vendor of the network Port.
in: body
required: false
type: string
req_portgroup_address:
description: |
Physical hardware address of this Portgroup, typically the hardware
@ -1761,6 +2062,13 @@ req_portgroup_address:
in: body
required: false
type: string
req_portgroup_category:
description: |
Category of the network Portgroup. Helps to further differentiate the
Portgroup.
in: body
required: false
type: string
req_portgroup_mode:
description: |
Mode of the port group. For possible values, refer to
@ -1967,11 +2275,83 @@ retired_reason:
in: body
required: false
type: string
runbook_name:
description: |
The unique name of the runbook. It must be prefixed with ``CUSTOM_``,
which makes it conform to the TRAITS_SCHEMA format. The runbook name must
match a node trait indicating it can run on a node.
in: body
required: true
type: string
runbook_owner:
description: |
The unique identifier of the runbook owner.
This must be ``null`` if ``runbook_public`` is ``true``.
in: body
required: false
type: string
runbook_public:
description: |
Indicates whether a runbook is available for public use or not.
This must be ``false`` if ``runbook_owner`` is not ``null``.
in: body
required: false
type: boolean
runbook_step_args:
description: |
A dictionary of arguments that are passed to the runbook step method.
in: body
required: true
type: object
runbook_step_interface:
description: |
The name of the driver interface.
in: body
required: true
type: string
runbook_step_order:
description: |
A non-negative integer order for the step.
in: body
required: true
type: integer
runbook_step_step:
description: |
The name of the runbook step method on the driver interface.
in: body
required: true
type: string
runbook_steps:
description: |
The runbook steps of the runbook template. Must be a list of dictionaries
containing at least one runbook step. See `Request Runbook Step`_ for step
parameters.
in: body
required: true
type: array
secure_boot:
description: |
Indicates whether node is currently booted with secure_boot turned on.
in: body
type: boolean
service_step:
description: |
A dictionary containing the interface and step to be executed on the node.
The dictionary must contain the keys 'interface' and 'step'. If specified,
the value for 'args' is a keyword variable argument dictionary that is
passed to the cleaning step method.
in: body
required: true
type: JSON
service_steps:
description: |
An ordered list of service steps that will be performed on the node. A
cleaning step is a dictionary with required keys 'interface' and 'step', and
optional key 'args'. If specified, the value for 'args' is a keyword variable
argument dictionary that is passed to the cleaning step method.
in: body
required: false
type: array
shard:
description: |
A string indicating the shard this node belongs to.
@ -2133,7 +2513,25 @@ versions:
in: body
required: true
type: array
vmedia_device_type:
description: |
The type of the virtual media device used, e.g. CDROM
in: body
required: true
type: string
vmedia_image_download_source:
description: |
How the image is served to the BMC, "http" for a remote location or
"local" to use the local web server.
in: body
required: false
type: string
vmedia_image_url:
description: |
The url of the image to attach to a virtual media device.
in: body
required: true
type: string
# variables returned from volume-connector
volume_connector_connector_id:
description: |

View file

@ -3,6 +3,7 @@
"default_boot_interface": "pxe",
"default_console_interface": "no-console",
"default_deploy_interface": "direct",
"default_firmware_interface": "no-firmware",
"default_inspect_interface": "no-inspect",
"default_management_interface": "ipmitool",
"default_network_interface": "flat",
@ -24,6 +25,9 @@
"ansible",
"direct"
],
"enabled_firmware_interface": [
"no-firmware"
],
"enabled_inspect_interfaces": [
"no-inspect"
],

View file

@ -5,6 +5,7 @@
"default_boot_interface": null,
"default_console_interface": null,
"default_deploy_interface": null,
"default_firmware_interface": null,
"default_inspect_interface": null,
"default_management_interface": null,
"default_network_interface": null,
@ -17,6 +18,7 @@
"enabled_boot_interfaces": null,
"enabled_console_interfaces": null,
"enabled_deploy_interfaces": null,
"enabled_firmware_interfaces": null,
"enabled_inspect_interfaces": null,
"enabled_management_interfaces": null,
"enabled_network_interfaces": null,
@ -56,6 +58,7 @@
"default_boot_interface": null,
"default_console_interface": null,
"default_deploy_interface": null,
"default_firmware_interface": null,
"default_inspect_interface": null,
"default_management_interface": null,
"default_network_interface": null,
@ -68,6 +71,7 @@
"enabled_boot_interfaces": null,
"enabled_console_interfaces": null,
"enabled_deploy_interfaces": null,
"enabled_firmware_interfaces": null,
"enabled_inspect_interfaces": null,
"enabled_management_interfaces": null,
"enabled_network_interfaces": null,
@ -107,6 +111,7 @@
"default_boot_interface": "pxe",
"default_console_interface": "no-console",
"default_deploy_interface": "direct",
"default_firmware_interface": "no-firmware",
"default_inspect_interface": "no-inspect",
"default_management_interface": "ipmitool",
"default_network_interface": "flat",
@ -128,6 +133,9 @@
"ansible",
"direct"
],
"enabled_firmware_interface": [
"no-firmware"
],
"enabled_inspect_interfaces": [
"no-inspect"
],

View file

@ -0,0 +1,34 @@
{
"description": "BMC credentials",
"phase": "main",
"priority": 100,
"sensitive": true,
"conditions": [
{
"op": "contains",
"args": {"value": "{inventory[system_vendor][manufacturer]}", "regex": "(?i)dell"}
},
{
"op": "is-true",
"args": {"value": "{node.auto_discovered}"}
}
],
"actions": [
{
"op": "set-attribute",
"args": {"path": "/driver", "value": "idrac"}
},
{
"op": "set-attribute",
"args": {"path": "driver_info.redfish_address", "value": "https://{inventory[bmc_address]}"}
},
{
"op": "set-attribute",
"args": {"path": "/driver_info/redfish_username", "value": "admin"}
},
{
"op": "set-attribute",
"args": {"path": "/driver_info/redfish_password", "value": "password"}
}
]
}

View file

@ -0,0 +1,21 @@
{
"created_at": "2025-03-18T22:28:48.643434+11:11",
"description": "BMC credentials",
"phase": "main",
"priority": 100,
"sensitive": true,
"actions": null,
"conditions": null,
"links": [
{
"href": "http://10.60.253.180:6385/v1/inspection_rules/783bf33a-a8e3-1e23-a645-1e95a1f95186",
"rel": "self"
},
{
"href": "http://10.60.253.180:6385/inspection_rules/783bf33a-a8e3-1e23-a645-1e95a1f95186",
"rel": "bookmark"
}
],
"updated_at": null,
"uuid": "783bf33a-a8e3-1e23-a645-1e95a1f95186"
}

View file

@ -0,0 +1,43 @@
{
"inspection_rules": [
{
"created_at": "2025-03-14T15:37:29.542187+00:00",
"description": "Set properties on discovered data",
"phase": "main",
"priority": 50,
"sensitive": false,
"conditions": [
{
"op": "is-true",
"args": {"value": "{inventory[cpu][count]}"}
}
],
"actions": [
{
"op": "set-attribute",
"args": {"path": "/properties/cpus", "value": "{inventory[cpu][count]}"}
},
{
"op": "set-attribute",
"args": {"path": "/properties/memory_mb", "value": "{inventory[memory][physical_mb]}"}
},
{
"op": "set-attribute",
"args": {"path": "/properties/cpu_arch", "value": "{inventory[cpu][architecture]}"}
}
],
"links": [
{
"href": "http://10.60.253.180:6385/v1/inspection_rules/75a6c1f7-2de0-47b3-9c54-8e6ef3a27bcd",
"rel": "self"
},
{
"href": "http://10.60.253.180:6385/inspection_rules/75a6c1f7-2de0-47b3-9c54-8e6ef3a27bcd",
"rel": "bookmark"
}
],
"updated_at": null,
"uuid": "783bf33a-a8e3-1e23-a645-1e95a1f95186"
}
]
}

View file

@ -0,0 +1,55 @@
{
"inspection_rules": [
{
"description": "BMC credentials",
"phase": "main",
"priority": 100,
"sensitive": true,
"links": [
{
"href": "http://10.60.253.180:6385/v1/inspection_rules/783bf33a-a8e3-1e23-a645-1e95a1f95186",
"rel": "self"
},
{
"href": "http://10.60.253.180:6385/inspection_rules/783bf33a-a8e3-1e23-a645-1e95a1f95186",
"rel": "bookmark"
}
],
"uuid": "783bf33a-a8e3-1e23-a645-1e95a1f95186"
},
{
"description": "Set properties on discovered data",
"phase": "main",
"priority": 50,
"sensitive": false,
"links": [
{
"href": "http://10.60.253.180:6385/v1/inspection_rules/1f3ee449-08cd-9e3f-e1e5-9cfda674081a",
"rel": "self"
},
{
"href": "http://10.60.253.180:6385/inspection_rules/1f3ee449-08cd-9e3f-e1e5-9cfda674081a",
"rel": "bookmark"
}
],
"uuid": "1f3ee449-08cd-9e3f-e1e5-9cfda674081a"
},
{
"description": "Memory systems",
"phase": "main",
"priority": 0,
"sensitive": false,
"links": [
{
"href": "http://10.60.253.180:6385/v1/inspection_rules/210055f4-7367-ff8d-ae42-f4f9e8e85e8a",
"rel": "self"
},
{
"href": "http://10.60.253.180:6385/inspection_rules/210055f4-7367-ff8d-ae42-f4f9e8e85e8a",
"rel": "bookmark"
}
],
"uuid": "210055f4-7367-ff8d-ae42-f4f9e8e85e8a"
}
]
}

View file

@ -0,0 +1,39 @@
{
"created_at": "2025-03-18T22:28:48.643434+11:11",
"description": "Set properties on discovered data",
"phase": "main",
"priority": 50,
"sensitive": false,
"conditions": [
{
"op": "is-true",
"args": {"value": "{inventory[cpu][count]}"}
}
],
"actions": [
{
"op": "set-attribute",
"args": {"path": "/properties/cpus", "value": "{inventory[cpu][count]}"}
},
{
"op": "set-attribute",
"args": {"path": "/properties/memory_mb", "value": "{inventory[memory][physical_mb]}"}
},
{
"op": "set-attribute",
"args": {"path": "/properties/cpu_arch", "value": "{inventory[cpu][architecture]}"}
}
],
"links": [
{
"href": "http://10.60.253.180:6385/v1/inspection_rules/1f3ee449-08cd-9e3f-e1e5-9cfda674081a",
"rel": "self"
},
{
"href": "http://10.60.253.180:6385/inspection_rules/1f3ee449-08cd-9e3f-e1e5-9cfda674081a",
"rel": "bookmark"
}
],
"updated_at": null,
"uuid": "1f3ee449-08cd-9e3f-e1e5-9cfda674081a"
}

View file

@ -0,0 +1,28 @@
[
{
"path": "/description",
"value": "Updated rule for setting hardware properties",
"op": "replace"
},
{
"path": "/priority",
"value": 75,
"op": "replace"
},
{
"path": "/conditions/0",
"value": {
"op": "is-true",
"args": {"value": "{inventory[cpu][count]}"}
},
"op": "replace"
},
{
"path": "/actions/-",
"value": {
"op": "set-attribute",
"args": {"path": "/properties/local_gb", "value": "{inventory[disks][0][size]}"}
},
"op": "add"
}
]

View file

@ -0,0 +1,43 @@
{
"created_at": "2025-03-23T22:28:48.643434+11:11",
"description": "Updated rule for setting hardware properties",
"phase": "main",
"priority": 75,
"sensitive": false,
"conditions": [
{
"op": "is-true",
"args": {"value": "{inventory[cpu][count]}"}
}
],
"actions": [
{
"op": "set-attribute",
"args": {"path": "/properties/cpus", "value": "{inventory[cpu][count]}"}
},
{
"op": "set-attribute",
"args": {"path": "/properties/memory_mb", "value": "{inventory[memory][physical_mb]}"}
},
{
"op": "set-attribute",
"args": {"path": "/properties/cpu_arch", "value": "{inventory[cpu][architecture]}"}
},
{
"op": "set-attribute",
"args": {"path": "/properties/local_gb", "value": "{inventory[disks][0][size]}"}
}
],
"links": [
{
"href": "http://10.60.253.180:6385/v1/inspection_rules/1f3ee449-08cd-9e3f-e1e5-9cfda674081a",
"rel": "self"
},
{
"href": "http://10.60.253.180:6385/inspection_rules/1f3ee449-08cd-9e3f-e1e5-9cfda674081a",
"rel": "bookmark"
}
],
"uuid": "1f3ee449-08cd-9e3f-e1e5-9cfda674081a",
"updated_at": "2025-03-24T11:42:18.763029+00:00"
}

View file

@ -16,12 +16,12 @@
"value": "Enabled",
"attribute_type": "Enumeration",
"allowable_values": ["Enabled", "Disabled"],
"lower_bound": None,
"max_length": None,
"min_length": None,
"lower_bound": null,
"max_length": null,
"min_length": null,
"read_only": false,
"reset_required": None,
"unique": None,
"upper_bound": None
"reset_required": null,
"unique": null,
"upper_bound": null
}
}

View file

@ -17,13 +17,13 @@
"value": "Enabled",
"attribute_type": "Enumeration",
"allowable_values": ["Enabled", "Disabled"],
"lower_bound": None,
"max_length": None,
"min_length": None,
"lower_bound": null,
"max_length": null,
"min_length": null,
"read_only": false,
"reset_required": None,
"unique": None,
"upper_bound": None
"reset_required": null,
"unique": null,
"upper_bound": null
}
]
}

View file

@ -22,6 +22,7 @@
"inspection_started_at": null,
"instance_info": {},
"instance_uuid": null,
"instance_name": null,
"last_error": null,
"lessee": null,
"links": [

View file

@ -4,13 +4,11 @@
"name": "system",
"links": [
{
"href": "http://127.0.0.1:6385/v1/nodes/Compute0/
management/indicators/system",
"href": "http://127.0.0.1:6385/v1/nodes/Compute0/management/indicators/system",
"rel": "self"
},
{
"href": "http://127.0.0.1:6385/nodes/Compute0/
management/indicators/system",
"href": "http://127.0.0.1:6385/nodes/Compute0/management/indicators/system",
"rel": "bookmark"
}
]
@ -19,13 +17,11 @@
"name": "chassis",
"links": [
{
"href": "http://127.0.0.1:6385/v1/nodes/Compute0/
management/indicators/chassis",
"href": "http://127.0.0.1:6385/v1/nodes/Compute0/management/indicators/chassis",
"rel": "self"
},
{
"href": "http://127.0.0.1:6385/nodes/Compute0/
management/indicators/chassis",
"href": "http://127.0.0.1:6385/nodes/Compute0/management/indicators/chassis",
"rel": "bookmark"
}
]

View file

@ -23,6 +23,8 @@
},
"node_uuid": "6d85703a-565d-469a-96ce-30b6de53079d",
"physical_network": "physnet1",
"vendor": "splitrock",
"category": "hupernet",
"portgroup_uuid": "e43c722c-248e-4c6e-8ce8-0d8ff129387a",
"pxe_enabled": true,
"updated_at": "2016-08-18T22:28:49.653974+00:00",

View file

@ -0,0 +1,4 @@
{
"target": "clean",
"runbook": "runbook_ident"
}

View file

@ -0,0 +1,12 @@
{
"target":"service",
"sevice_steps": [
{
"interface": "raid",
"step": "apply_configuration",
"args": {
"create_nonroot_volumes": "True"
}
}
]
}

View file

@ -25,6 +25,7 @@
"inspection_started_at": null,
"instance_info": {},
"instance_uuid": null,
"instance_name": null,
"last_error": null,
"lessee": null,
"links": [

View file

@ -26,6 +26,7 @@
"inspection_started_at": null,
"instance_info": {},
"instance_uuid": null,
"instance_name": null,
"last_error": null,
"lessee": null,
"links": [

View file

@ -0,0 +1,4 @@
{
"device_type": "CDROM",
"image_url": "http://image"
}

View file

@ -27,6 +27,7 @@
"inspection_started_at": null,
"instance_info": {},
"instance_uuid": "5344a3e2-978a-444e-990a-cbf47c62ef88",
"instance_name": "my-test-instance",
"last_error": null,
"lessee": null,
"links": [
@ -133,6 +134,7 @@
"inspection_started_at": null,
"instance_info": {},
"instance_uuid": null,
"instance_name": null,
"last_error": null,
"lessee": null,
"links": [

View file

@ -1,6 +1,10 @@
{
"node_uuid": "6d85703a-565d-469a-96ce-30b6de53079d",
"node_ident": "6d85703a-565d-469a-96ce-30b6de53079d",
"portgroup_uuid": "e43c722c-248e-4c6e-8ce8-0d8ff129387a",
"name": "port1",
"description": "Physical Network",
"vendor": "splitrock",
"category": "hypernet",
"address": "11:11:11:11:11:11",
"is_smartnic": true,
"local_link_connection": {

View file

@ -19,6 +19,10 @@
"switch_id": "0a:1b:2c:3d:4e:5f",
"switch_info": "switch1"
},
"name": "port1",
"description": "Physical Network",
"vendor": "splitrock",
"category": "hypernet",
"node_uuid": "6d85703a-565d-469a-96ce-30b6de53079d",
"physical_network": "physnet1",
"portgroup_uuid": "e43c722c-248e-4c6e-8ce8-0d8ff129387a",

View file

@ -21,6 +21,10 @@
"switch_id": "0a:1b:2c:3d:4e:5f",
"switch_info": "switch1"
},
"name": "port1",
"description": "Physical Network",
"vendor": "splitrock",
"category": "hypernet",
"node_uuid": "6d85703a-565d-469a-96ce-30b6de53079d",
"physical_network": "physnet1",
"portgroup_uuid": "e43c722c-248e-4c6e-8ce8-0d8ff129387a",

View file

@ -19,6 +19,10 @@
"switch_id": "0a:1b:2c:3d:4e:5f",
"switch_info": "switch1"
},
"name": "port1",
"description": "Physical Network",
"vendor": "splitrock",
"category": "hypernet",
"node_uuid": "6d85703a-565d-469a-96ce-30b6de53079d",
"physical_network": "physnet1",
"portgroup_uuid": "e43c722c-248e-4c6e-8ce8-0d8ff129387a",

View file

@ -1,5 +1,6 @@
{
"address": "11:11:11:11:11:11",
"category": "hypernet",
"created_at": "2016-08-18T22:28:48.643434+11:11",
"extra": {},
"internal_info": {},
@ -26,6 +27,7 @@
"rel": "bookmark"
}
],
"physical_network": "physnet1",
"properties": {},
"standalone_ports_supported": true,
"updated_at": null,

View file

@ -2,6 +2,7 @@
"portgroups": [
{
"address": "11:11:11:11:11:11",
"category": "hypernet",
"created_at": "2016-08-18T22:28:48.643434+11:11",
"extra": {},
"internal_info": {},
@ -28,6 +29,7 @@
"rel": "bookmark"
}
],
"physical_network": "physnet1",
"properties": {},
"standalone_ports_supported": true,
"updated_at": null,

View file

@ -1,5 +1,6 @@
{
"address": "22:22:22:22:22:22",
"category": "hypernet",
"created_at": "2016-08-18T22:28:48.643434+11:11",
"extra": {},
"internal_info": {},
@ -26,6 +27,7 @@
"rel": "bookmark"
}
],
"physical_network": "physnet1",
"properties": {},
"standalone_ports_supported": true,
"updated_at": "2016-08-18T22:28:49.653974+00:00",

View file

@ -0,0 +1,19 @@
{
"extra": {},
"name": "CUSTOM_AWESOME",
"steps": [
{
"interface": "bios",
"step": "apply_configuration",
"args": {
"settings": [
{
"name": "LogicalProc",
"value": "Enabled"
}
]
},
"order": 1
}
]
}

View file

@ -0,0 +1,34 @@
{
"created_at": "2024-08-18T22:28:48.643434+11:11",
"extra": {},
"links": [
{
"href": "http://10.60.253.180:6385/v1/runbooks/fc6b1709-8dd5-86b0-2d34-5203d1c29127",
"rel": "self"
},
{
"href": "http://10.60.253.180:6385/runbooks/fc6b1709-8dd5-86b0-2d34-5203d1c29127",
"rel": "bookmark"
}
],
"name": "CUSTOM_AWESOME",
"public": false,
"owner": null,
"steps": [
{
"args": {
"settings": [
{
"name": "LogicalProc",
"value": "Enabled"
}
]
},
"interface": "bios",
"order": 1,
"step": "apply_configuration"
}
],
"updated_at": null,
"uuid": "fc6b1709-8dd5-86b0-2d34-5203d1c29127"
}

View file

@ -0,0 +1,39 @@
{
"runbooks": [
{
"created_at": "2024-08-18T22:28:48.643434+11:11",
"disable_ramdisk": false,
"extra": {},
"links": [
{
"href": "http://10.60.253.180:6385/v1/runbooks/fc6b1709-8dd5-86b0-2d34-5203d1c29127",
"rel": "self"
},
{
"href": "http://10.60.253.180:6385/runbooks/fc6b1709-8dd5-86b0-2d34-5203d1c29127",
"rel": "bookmark"
}
],
"name": "CUSTOM_AWESOME",
"public": false,
"owner": null,
"steps": [
{
"args": {
"settings": [
{
"name": "LogicalProc",
"value": "Enabled"
}
]
},
"interface": "bios",
"order": 1,
"step": "apply_configuration"
}
],
"updated_at": null,
"uuid": "fc6b1709-8dd5-86b0-2d34-5203d1c29127"
}
]
}

View file

@ -0,0 +1,18 @@
{
"runbooks": [
{
"links": [
{
"href": "http://10.60.253.180:6385/v1/runbooks/fc6b1709-8dd5-86b0-2d34-5203d1c29127",
"rel": "self"
},
{
"href": "http://10.60.253.180:6385/runbooks/fc6b1709-8dd5-86b0-2d34-5203d1c29127",
"rel": "bookmark"
}
],
"name": "CUSTOM_AWESOME",
"uuid": "fc6b1709-8dd5-86b0-2d34-5203d1c29127"
}
]
}

View file

@ -0,0 +1,35 @@
{
"created_at": "2024-08-18T22:28:48.643434+11:11",
"disable_ramdisk": false,
"extra": {},
"links": [
{
"href": "http://10.60.253.180:6385/v1/runbooks/fc6b1709-8dd5-86b0-2d34-5203d1c29127",
"rel": "self"
},
{
"href": "http://10.60.253.180:6385/runbooks/fc6b1709-8dd5-86b0-2d34-5203d1c29127",
"rel": "bookmark"
}
],
"name": "CUSTOM_AWESOME",
"public": false,
"owner": null,
"steps": [
{
"args": {
"settings": [
{
"name": "LogicalProc",
"value": "Enabled"
}
]
},
"interface": "bios",
"order": 1,
"step": "apply_configuration"
}
],
"updated_at": null,
"uuid": "fc6b1709-8dd5-86b0-2d34-5203d1c29127"
}

View file

@ -0,0 +1,7 @@
[
{
"path" : "/name",
"value" : "CUSTOM_AWESOME2",
"op" : "replace"
}
]

View file

@ -0,0 +1,34 @@
{
"created_at": "2024-08-18T22:28:48.643434+11:11",
"extra": {},
"links": [
{
"href": "http://10.60.253.180:6385/v1/runbooks/fc6b1709-8dd5-86b0-2d34-5203d1c29127",
"rel": "self"
},
{
"href": "http://10.60.253.180:6385/runbooks/fc6b1709-8dd5-86b0-2d34-5203d1c29127",
"rel": "bookmark"
}
],
"name": "CUSTOM_AWESOME2",
"public": false,
"owner": null,
"steps": [
{
"args": {
"settings": [
{
"name": "LogicalProc",
"value": "Enabled"
}
]
},
"interface": "bios",
"order": 1,
"step": "apply_configuration"
}
],
"updated_at": "2024-08-18T22:28:49.653974+00:00",
"uuid": "fc6b1709-8dd5-86b0-2d34-5203d1c29127"
}

View file

@ -2,7 +2,7 @@
"shards": [
{
"count": 47,
"name": "example_shard1",
"name": "example_shard1"
},
{
"count": 46,

View file

@ -3,7 +3,7 @@ ipmitool [default]
ipxe [platform:dpkg default]
ipxe-bootimgs [platform:rpm default]
socat [default]
xinetd [default]
xinetd [default !platform:centos-9 !platform:rhel-9]
tftpd-hpa [platform:dpkg default]
tftp-server [platform:rpm default]
# Starting with Debian Jessie (and thus in Ubuntu Xenial too),
@ -32,7 +32,7 @@ libvirt-bin [platform:dpkg devstack]
libvirt [platform:rpm devstack]
libvirt-dev [platform:dpkg devstack]
libvirt-devel [platform:rpm devstack]
qemu [platform:dpkg devstack build-image-dib]
qemu-system [platform:dpkg devstack build-image-dib]
qemu-kvm [platform:dpkg devstack]
qemu-utils [platform:dpkg devstack build-image-dib]
qemu-system-data [platform:dpkg devstack]
@ -53,18 +53,14 @@ libssl-dev [platform:dpkg test]
libffi-dev [platform:dpkg test]
libffi-devel [platform:rpm test]
# these are needed by infra for python-* jobs
libpq-dev [platform:dpkg test]
libpq-devel [platform:rpm test]
postgresql
postgresql-client [platform:dpkg]
# postgresql-devel [platform:rpm]
postgresql-server [platform:rpm]
mariadb [platform:rpm]
mariadb-server [platform:rpm]
mariadb-server [platform:rpm platform:debian-bookworm]
# mariadb-devel [platform:rpm]
dev-db/mariadb [platform:gentoo]
mysql-client [platform:dpkg]
mysql-server [platform:dpkg]
mysql-client [platform:dpkg !platform:debian-bookworm]
mysql-server [platform:dpkg !platform:debian-bookworm]
mariadb-client [platform:debian-bookworm]
# libmysqlclient-dev [platform:dpkg]
# gettext and graphviz are needed by doc builds only. For transition,
# have them in both doc and test.
@ -76,12 +72,17 @@ graphviz [!platform:gentoo test doc]
# libsrvg2 is needed for sphinxcontrib-svg2pdfconverter in docs builds.
librsvg2-tools [doc platform:rpm]
librsvg2-bin [doc platform:dpkg]
latexmk [doc]
texlive-collection-fontsrecommended [doc platform:rpm]
tex-gyre [doc platform:dpkg]
texlive-latex-extra [doc platform:dpkg]
texlive-collection-latexextra [doc platform:rpm]
texlive-fonts-extra-links [doc platform:dpkg]
texlive-collection-fontsextra [doc platform:rpm]
# these are needed to build images
# NOTE apparmor is an undeclared dependency for docker on ubuntu,
# see https://github.com/docker/docker/issues/9745
apparmor [platform:dpkg imagebuild]
gnupg [imagebuild]
squashfs-tools [platform:dpkg platform:redhat imagebuild]
squashfs [platform:suse imagebuild]
@ -91,7 +92,9 @@ libguestfs0 [platform:dpkg imagebuild]
libguestfs [platform:rpm imagebuild devstack]
libguestfs-tools [platform:dpkg devstack]
python3-guestfs [platform:dpkg imagebuild]
qemu-img [platform:rpm devstack]
qemu-img [platform:redhat devstack]
qemu-tools [platform:suse devstack]
qemu-utils [platform:dpkg devstack]
# for TinyIPA build
wget [imagebuild]
python3-pip [imagebuild]
@ -99,3 +102,10 @@ unzip [imagebuild]
sudo [imagebuild]
gawk [imagebuild]
mtools [imagebuild]
# For automatic artifact decompression
zstd [devstack]
# For graphical console support
podman [devstack]
systemd-container [devstack]
buildah [devstack]

View file

@ -8,13 +8,15 @@ fi
# values are: "bios" or "uefi", defaults to "uefi".
IRONIC_BOOT_MODE=${IRONIC_BOOT_MODE:-uefi}
IRONIC_HW_ARCH=${IRONIC_HW_ARCH:-x86_64}
CIRROS_VERSION_DEVSTACK=$(set +o xtrace &&
source $TOP_DIR/stackrc &&
echo $CIRROS_VERSION)
CIRROS_VERSION=${CIRROS_VERSION:-$CIRROS_VERSION_DEVSTACK}
IRONIC_DEFAULT_IMAGE_NAME=cirros-${CIRROS_VERSION}-x86_64-uec
IRONIC_DEFAULT_IMAGE_NAME=cirros-${CIRROS_VERSION}-${IRONIC_HW_ARCH}-uec
IRONIC_IMAGE_NAME=${DEFAULT_IMAGE_NAME:-$IRONIC_DEFAULT_IMAGE_NAME}
@ -35,8 +37,8 @@ function add_image_link {
# Do not restrict downloading image only for specific case. Download both disk and uec images.
# NOTE (vdrok): Here the images are actually pre-cached by devstack, in
# the files folder, so they won't be downloaded again.
add_image_link http://download.cirros-cloud.net/${CIRROS_VERSION}/cirros-${CIRROS_VERSION}-x86_64-uec.tar.gz
add_image_link http://download.cirros-cloud.net/${CIRROS_VERSION}/cirros-${CIRROS_VERSION}-x86_64-disk.img
add_image_link http://download.cirros-cloud.net/${CIRROS_VERSION}/cirros-${CIRROS_VERSION}-${IRONIC_HW_ARCH}-uec.tar.gz
add_image_link http://download.cirros-cloud.net/${CIRROS_VERSION}/cirros-${CIRROS_VERSION}-${IRONIC_HW_ARCH}-disk.img
export IRONIC_WHOLEDISK_IMAGE_NAME=${IRONIC_WHOLEDISK_IMAGE_NAME:-${IRONIC_IMAGE_NAME/-uec/-disk}}
export IRONIC_PARTITIONED_IMAGE_NAME=${IRONIC_PARTITIONED_IMAGE_NAME:-${IRONIC_IMAGE_NAME/-disk/-uec}}

View file

@ -1,7 +1,7 @@
# NOTE(TheJulia): This is a special bindep file which is independent of the
# project bindep file which is for general usage. This binde pfile is
# intended for execution from Devstack.
# The *primary* purpose being, devstack manages sql dependency mangement
# intended for execution from Devstack.
# The *primary* purpose being, devstack manages sql dependency management
# and credential setup, so they can't be included here or it is installed
# prematurely.
@ -10,7 +10,7 @@ ipmitool [default]
ipxe [platform:dpkg default]
ipxe-bootimgs [platform:rpm default]
socat [default]
xinetd [default]
xinetd [default !platform:centos-9 !platform:rhel-9]
tftpd-hpa [platform:dpkg]
tftp-server [platform:rpm]
# Starting with Debian Jessie (and thus in Ubuntu Xenial too),
@ -21,6 +21,9 @@ tftp-server [platform:rpm]
pxelinux [platform:dpkg]
syslinux
syslinux-common [platform:dpkg]
# On CentOS Stream pxelinux.0 boot loader is in the syslinux-nonlinux
# package.
syslinux-nonlinux [platform:rpm]
isolinux [platform:dpkg]
socat [default]
# Grub2 files for boot loadingusing PXE/GRUB2
@ -31,7 +34,7 @@ libvirt-clients [platform:dpkg]
libvirt [platform:rpm]
libvirt-dev [platform:dpkg]
libvirt-devel [platform:rpm]
qemu [platform:dpkg]
qemu-system [platform:dpkg]
qemu-kvm [platform:dpkg platform:rpm]
qemu-utils [platform:dpkg]
qemu-system-data [platform:dpkg]
@ -43,6 +46,8 @@ ipxe-roms-qemu [platform:rpm]
openvswitch [platform:rpm]
iptables [default]
net-tools [platform:rpm]
# web assets for ironic-novncproxy
novnc [default]
# these are needed to compile Python dependencies from sources
python-dev [platform:dpkg test]
@ -53,12 +58,6 @@ libssl-dev [platform:dpkg test]
libffi-dev [platform:dpkg test]
libffi-devel [platform:rpm test]
# these are needed by infra for python-* jobs
libpq-dev [platform:dpkg test]
libpq-devel [platform:rpm test]
postgresql
postgresql-client [platform:dpkg]
# postgresql-devel [platform:rpm]
postgresql-server [platform:rpm]
mariadb [platform:rpm]
mariadb-server [platform:rpm]
# mariadb-devel [platform:rpm]
@ -81,9 +80,6 @@ gdisk [platform:dpkg]
# these are needed to build a deploy ramdisk
# NOTE apparmor is an undeclared dependency for docker on ubuntu,
# see https://github.com/docker/docker/issues/9745
apparmor [platform:dpkg imagebuild]
gnupg [imagebuild]
squashfs-tools [platform:dpkg platform:redhat imagebuild]
squashfs [platform:suse imagebuild]
@ -92,6 +88,7 @@ kpartx
libguestfs0 [platform:dpkg imagebuild]
libguestfs [platform:rpm imagebuild]
libguestfs-tools [platform:dpkg]
guestfs-tools [platform:rpm imagebuild]
python-guestfs [platform:dpkg imagebuild]
qemu-img [platform:rpm]
# for TinyIPA build

View file

@ -0,0 +1,73 @@
- local_loop:
name: image0
- partitioning:
base: image0
label: gpt
partitions:
- name: ESP
type: 'EF00'
size: 350MiB
mkfs:
type: vfat
mount:
mount_point: /boot/efi
fstab:
options: "defaults"
fsck-passno: 2
- name: BSP
type: 'EF02'
size: 8MiB
- name: root
flags: [ boot ]
size: 6G
- lvm:
name: lvm
base: [ root ]
pvs:
- name: pv
base: root
options: [ "--force" ]
vgs:
- name: vg
base: [ "pv" ]
options: [ "--force" ]
lvs:
- name: lv_root
base: vg
extents: 50%VG
- name: lv_var
base: vg
extents: 15%VG
- name: lv_home
base: vg
extents: 10%VG
- mkfs:
name: fs_root
base: lv_root
type: xfs
label: "img-rootfs"
mount:
mount_point: /
fstab:
options: "rw,relatime"
fsck-passno: 1
- mkfs:
name: fs_var
base: lv_var
type: ext4
mount:
mount_point: /var
fstab:
options: "rw,relatime"
fsck-passno: 2
- mkfs:
name: fs_home
base: lv_home
type: ext4
mount:
mount_point: /home
fstab:
options: "rw,nodev,relatime"
fsck-passno: 2

File diff suppressed because it is too large Load diff

View file

@ -7,7 +7,7 @@
echo_summary "ironic devstack plugin.sh called: $1/$2"
source $DEST/ironic/devstack/lib/ironic
if is_service_enabled ir-api ir-cond; then
if is_service_enabled ir-api ir-cond ir-novnc; then
if [[ "$1" == "stack" ]]; then
if [[ "$2" == "install" ]]; then
# stack/install - Called after the layer 1 and 2 projects source and
@ -37,7 +37,17 @@ if is_service_enabled ir-api ir-cond; then
if [[ "$IRONIC_BAREMETAL_BASIC_OPS" == "True" && "$IRONIC_IS_HARDWARE" == "False" ]]; then
echo_summary "Precreating bridge: $IRONIC_VM_NETWORK_BRIDGE"
install_package openvswitch-switch
if [[ "$Q_BUILD_OVS_FROM_GIT" != "True" ]]; then
# NOTE(TheJulia): We are likely doing this to ensure
# OVS is running.
echo_summary "Installing OVS to pre-create bridge"
install_package openvswitch-switch
fi
if [[ "$Q_AGENT" == "ovn" ]]; then
echo_summary "Setting up OVN..."
init_ovn
start_ovn
fi
sudo ovs-vsctl -- --may-exist add-br $IRONIC_VM_NETWORK_BRIDGE
fi

View file

@ -1,16 +1,35 @@
enable_service ironic ir-api ir-cond
enable_service ironic ir-api ir-cond ir-novnc ir-sw-sim
source $DEST/ironic/devstack/common_settings
# Set a default, so we can overwrite it if we need to.
PUBLIC_BRIDGE_MTU=${PUBLIC_BRIDGE_MTU:-1500}
# NOTE(vsaienko) mtu calculation has been changed recently to 1450
# https://github.com/openstack/neutron/commit/51a697
# and caused https://bugs.launchpad.net/ironic/+bug/1631875
# Get the smallest local MTU
local_mtu=$(ip link show | sed -ne 's/.*mtu \([0-9]\+\).*/\1/p' | sort -n | head -1)
# At some point, devstack started pre-populating a public bridge mtu,
# which is fine, but that also got set and used in neutron as the MTU,
# which is fine, but if our MTU is lower, then that can create headaches,
# unless we *need* it lower for specific multinode testing.
# so if the calculated local_mtu *is* higher, then we are wrong, and trust
# a prepopulated variable (1500-40-30=1430 bytes)
if [ $local_mtu -gt $PUBLIC_BRIDGE_MTU ]; then
local_mtu=$PUBLIC_BRIDGE_MTU
fi
# 50 bytes is overhead for vxlan (which is greater than GRE
# allowing us to use either overlay option with this MTU.
# allowing us to use either overlay option with this MTU).
# However, if traffic is flowing over IPv6 tunnels, then
# The overhead is essentially another 100 bytes. In order to
# The overhead is essentially another 78 bytes. In order to
# handle both cases, lets go ahead and drop the maximum by
# 100 bytes.
PUBLIC_BRIDGE_MTU=${OVERRIDE_PUBLIC_BRIDGE_MTU:-$((local_mtu - 100))}
# 78 bytes, while not going below 1280 to make IPv6 work at all.
if [[ "$HOST_TOPOLOGY" == "multinode" ]]; then
# This logic is to artificially pin down the PUBLIC_BRIDGE_MTU for
# when we are using mutlinode architecture, as to transfer the
# bytes over the multinode VXLAN tunnel, we need to drop the mtu.
PUBLIC_BRIDGE_MTU=${OVERRIDE_PUBLIC_BRIDGE_MTU:-$((local_mtu - 78))}
fi

View file

@ -9,7 +9,7 @@ if [[ "$VERBOSE" == True ]]; then
fi
CIRROS_VERSION=${CIRROS_VERSION:-0.6.1}
CIRROS_ARCH=${CIRROS_ARCH:-x86_64}
CIRROS_ARCH=${IRONIC_HW_ARCH:-x86_64}
# TODO(dtantsur): use the image cached on infra images in the CI
DISK_URL=http://download.cirros-cloud.net/${CIRROS_VERSION}/cirros-${CIRROS_VERSION}-${CIRROS_ARCH}-disk.img
OUT=$(realpath ${1:-rootfs.img})
@ -54,6 +54,11 @@ sudo mount $efidev $efi_mp
sudo cp -aR $root_mp/* $dest/
sudo cp -aR $efi_mp/EFI $dest/boot/efi/
# Extract all of the stuffs from the disk image and write it out into
# the dest folder. This is *normally* done on startup for Cirros, but
# doesn't quite jive with the expected partition image model.
sudo zcat $root_mp/boot/initrd.img* | sudo cpio -i --make-directories -D $dest
# These locations are required by IPA even when it does not really run
# grub-install.
sudo mkdir -p $dest/{dev,proc,run,sys}

View file

@ -49,7 +49,7 @@ CONSOLE_PTY = """
<target port='0'/>
</serial>
<console type='pty'>
<target type='serial' port='0'/>
<target port='0'/>
</console>
"""
@ -65,6 +65,8 @@ def main():
help='The virtualization engine to use')
parser.add_argument('--arch', default='i686',
help='The architecture to use')
parser.add_argument('--machine_type', default='q35',
help='Machine type based on architecture')
parser.add_argument('--memory', default='2097152',
help="Maximum memory for the VM in KB.")
parser.add_argument('--cpus', default='1',
@ -77,6 +79,10 @@ def main():
help='The number of interfaces to add to VM.'),
parser.add_argument('--mac', default=None,
help='The mac for the first interface on the vm')
parser.add_argument('--mtu', default=None,
help='The mtu for the interfaces on the vm')
parser.add_argument('--net_simulator', default='ovs',
help='Network simulator is in use.')
parser.add_argument('--console-log',
help='File to log console')
parser.add_argument('--emulator', default=None,
@ -89,6 +95,8 @@ def main():
help=('The absolute path of the non-volatile memory '
'to store the UEFI variables. Should be used '
'only when --uefi-loader is also specified.'))
parser.add_argument('--block-size', default='512',
help='The block size for the block storage.')
args = parser.parse_args()
env = jinja2.Environment(loader=jinja2.FileSystemLoader(templatedir))
@ -104,16 +112,20 @@ def main():
'images': images,
'engine': args.engine,
'arch': args.arch,
'machine_type': args.machine_type,
'memory': args.memory,
'cpus': args.cpus,
'bootdev': args.bootdev,
'interface_count': args.interface_count,
'mac': args.mac,
'mtu': args.mtu,
'net_simulator': args.net_simulator,
'nicdriver': args.libvirt_nic_driver,
'emulator': args.emulator,
'disk_format': args.disk_format,
'uefi_loader': args.uefi_loader,
'uefi_nvram': args.uefi_nvram,
'block_size': args.block_size,
}
if args.emulator:
@ -133,6 +145,7 @@ def main():
params['console'] = CONSOLE_LOG % {'console_log': args.console_log}
else:
params['console'] = CONSOLE_PTY
libvirt_template = template.render(**params)
conn = libvirt.open("qemu:///system")

View file

@ -12,7 +12,7 @@ export PS4='+ ${BASH_SOURCE:-}:${FUNCNAME[0]:-}:L${LINENO:-}: '
# Keep track of the DevStack directory
TOP_DIR=$(cd $(dirname "$0")/.. && pwd)
while getopts "n:c:i:m:M:d:a:b:e:E:p:o:f:l:L:N:A:D:v:P:" arg; do
while getopts "n:c:i:m:M:d:a:b:e:E:p:o:f:l:L:N:A:D:v:P:t:B:s:" arg; do
case $arg in
n) NAME=$OPTARG;;
c) CPU=$OPTARG;;
@ -36,6 +36,9 @@ while getopts "n:c:i:m:M:d:a:b:e:E:p:o:f:l:L:N:A:D:v:P:" arg; do
D) NIC_DRIVER=$OPTARG;;
v) VOLUME_COUNT=$OPTARG;;
P) STORAGE_POOL=$OPTARG;;
t) MACHINE_TYPE=$OPTARG;;
B) BLOCK_SIZE=$OPTARG;;
s) NET_SIMULATOR=$OPTARG;;
esac
done
@ -76,6 +79,8 @@ if [ ! -z "$UEFI_LOADER" ]; then
fi
fi
BLOCK_SIZE=${BLOCK_SIZE:-512}
# Create bridge and add VM interface to it.
# Additional interface will be added to this bridge and
# it will be plugged to OVS.
@ -83,18 +88,29 @@ fi
# when VM is in shutdown state
INTERFACE_COUNT=${INTERFACE_COUNT:-1}
for int in $(seq 1 $INTERFACE_COUNT); do
tapif=tap-${NAME}i${int}
ovsif=ovs-${NAME}i${int}
# NOTE(vsaienko) use veth pair here to ensure that interface
# exists in OVS even when VM is powered off.
sudo ip link add dev $tapif type veth peer name $ovsif
for l in $tapif $ovsif; do
sudo ip link set dev $l up
sudo ip link set $l mtu $INTERFACE_MTU
if [[ "${NET_SIMULATOR:-ovs}" == "ovs" ]]; then
for int in $(seq 1 $INTERFACE_COUNT); do
ovsif=ovs-${NAME}i${int}
sudo ovs-vsctl --no-wait add-port $BRIDGE $ovsif
done
sudo ovs-vsctl add-port $BRIDGE $ovsif
done
else
for int in $(seq 1 $INTERFACE_COUNT); do
# NOTE(TheJulia): A simulator's setup will need to come along
# and identify all of the simulators for required configuration.
# NOTE(TheJulia): It would be way easier if we just sequentally
# numbered *all* interfaces together, but the per-vm execution
# model of this script makes it... difficult.
simif=sim-${NAME}i${int}
tapif=tap-${NAME}i${int}
# NOTE(vsaienko) use veth pair here to ensure that interface
# exists when VMs are turned off.
sudo ip link add dev $tapif type veth peer name $simif || true
for l in $tapif $simif; do
sudo ip link set dev $l up
sudo ip link set $l mtu $INTERFACE_MTU
done
done
fi
if [ -n "$MAC_ADDRESS" ] ; then
MAC_ADDRESS="--mac $MAC_ADDRESS"
@ -123,13 +139,22 @@ if ! virsh list --all | grep -q $NAME; then
if [[ -n "$EMULATOR" ]]; then
vm_opts+="--emulator $EMULATOR "
fi
$PYTHON $TOP_DIR/scripts/configure-vm.py \
--bootdev network --name $NAME \
--arch $ARCH --cpus $CPU --memory $MEM --libvirt-nic-driver $LIBVIRT_NIC_DRIVER \
--disk-format $DISK_FORMAT $VM_LOGGING --engine $ENGINE $UEFI_OPTS $vm_opts \
--interface-count $INTERFACE_COUNT $MAC_ADDRESS >&2
--interface-count $INTERFACE_COUNT $MAC_ADDRESS --machine_type $MACHINE_TYPE \
--block-size $BLOCK_SIZE --mtu ${INTERFACE_MTU} --net_simulator ${NET_SIMULATOR:-ovs} >&2
fi
# echo mac in format mac1,ovs-node-0i1;mac2,ovs-node-0i2;...;macN,ovs-node0iN
VM_MAC=$(echo -n $(virsh domiflist $NAME |awk '/tap-/{print $5","$3}')|tr ' ' ';' |sed s/tap-/ovs-/g)
# NOTE(TheJulia): Based upon the interface format, we need to search for slightly
# different output from the script run because we have to use different attachment
# names.
if [[ "${NET_SIMULATOR:-ovs}" == "ovs" ]]; then
VM_MAC=$(echo -n $(virsh domiflist $NAME |awk '/ovs-/{print $5","$1}')|tr ' ' ';')
else
VM_MAC=$(echo -n $(virsh domiflist $NAME |awk '/tap-/{print $5","$3}')|tr ' ' ';')
fi
echo -n "$VM_MAC $VBMC_PORT $PDU_OUTLET"

View file

@ -0,0 +1,14 @@
[Unit]
Description=TFTP server for Ironic
[Service]
ExecStart=
ExecStart=/usr/sbin/in.tftpd -v -v -v -v -v --blocksize %MAX_BLOCKSIZE% --map-file %TFTPBOOT_DIR%/map-file %TFTPBOOT_DIR%
StandardInput=socket
StandardOutput=journal
StandardError=journal
User=root
Group=root
%IPV6_FLAG%

View file

@ -3,7 +3,7 @@
<memory unit='KiB'>{{ memory }}</memory>
<vcpu>{{ cpus }}</vcpu>
<os>
<type arch='{{ arch }}' machine='q35'>hvm</type>
<type arch='{{ arch }}' machine='{{ machine_type }}'>hvm</type>
{% if bootdev == 'network' and not uefi_loader %}
<boot dev='{{ bootdev }}'/>
{% endif %}
@ -14,10 +14,19 @@
{% endif %}
{% endif %}
<bootmenu enable='no'/>
{% if arch != 'aarch64' %}
<bios useserial='yes'/>
{% endif %}
</os>
{% if engine == 'kvm' %}
<cpu mode='host-passthrough'/>
{% if engine == 'kvm' or arch == 'aarch64' %}
{% if engine == 'kvm' %}
<cpu mode='host-passthrough'/>
{% endif %}
{% if arch == 'aarch64' %}
<cpu mode='custom' match='exact' check='none'>
<model fallback='allow'>cortex-a53</model>
</cpu>
{% endif %}
{% else %}
<cpu mode='host-model'/>
{% endif %}
@ -37,15 +46,24 @@
<driver name='qemu' type='{{ disk_format }}' cache='unsafe'/>
<source file='{{ imagefile }}'/>
<target dev='vd{{ letter }}'/>
<blockio logical_block_size="{{ block_size }}" physical_block_size="{{ block_size }}" discard_granularity="{{ block_size }}"/>
</disk>
{% endfor %}
{% for n in range(1, interface_count+1) %}
{% if net_simulator == 'ovs' %}
<interface type='ethernet'>
{% else %}
<interface type='direct'>
{% endif %}
{% if n == 1 and mac %}
<mac address='{{ mac }}'/>
{% endif %}
{% if net_simulator == 'ovs' %}
<target dev='{{ "ovs-" + name + "i" + n|string }}'/>
{% else %}
<source dev='{{ "tap-" + name + "i" + n|string }}'/>
<model type='{{ nicdriver }}'/>
{% endif %}
<model type='{{ nicdriver }}' />
{% if uefi_loader and bootdev == 'network' %}
<boot order='{{ n|string }}'/>
{% endif %}

View file

@ -76,22 +76,16 @@ function early_create {
net_id=$(openstack network create --share $NEUTRON_NET -f value -c id)
resource_save network net_id $net_id
local subnet_params=""
subnet_params+="--ip_version 4 "
subnet_params+="--gateway $RESOURCES_NETWORK_GATEWAY "
subnet_params+="--name $NEUTRON_NET "
subnet_params+="$net_id $RESOURCES_FIXED_RANGE"
local subnet_id
subnet_id=$(neutron subnet-create $subnet_params | grep ' id ' | get_field 2)
subnet_id=$(openstack subnet create -f value -c id --ip-version 4 --gateway $RESOURCES_NETWORK_GATEWAY --network $net_id --subnet-range $RESOURCES_FIXED_RANGE $NEUTRON_NET)
resource_save network subnet_id $subnet_id
local router_id
router_id=$(openstack router create $NEUTRON_NET -f value -c id)
resource_save network router_id $router_id
neutron router-interface-add $NEUTRON_NET $subnet_id
neutron router-gateway-set $NEUTRON_NET public
openstack router add subnet $NEUTRON_NET $subnet_id
openstack router set --external-gateway public $NEUTRON_NET
# Add a route to the baremetal network via the Neutron public router.
# ironic-conductor will be able to access the ironic nodes via this new
@ -142,10 +136,10 @@ function destroy {
# in ironic_grenade network instead of neutron_grenade during resources phase. As result
# during neutron/resources.sh destroy phase ironic_grenade router|subnet|network were deleted.
# Make sure that we removed neutron resources here.
neutron router-gateway-clear neutron_grenade || /bin/true
neutron router-interface-delete neutron_grenade neutron_grenade || /bin/true
neutron router-delete neutron_grenade || /bin/true
neutron net-delete neutron_grenade || /bin/true
openstack router unset --external-gateway neutron_grenade || /bin/true
openstack router remove subnet neutron_grenade neutron_grenade || /bin/true
openstack router delete neutron_grenade || /bin/true
openstack network delete neutron_grenade || /bin/true
}
# Dispatcher

View file

@ -66,6 +66,19 @@ if [[ -d $IRONIC_CONF_DIR ]] && [[ ! -d $SAVE_DIR/etc.ironic ]] ; then
cp -pr $IRONIC_CONF_DIR $SAVE_DIR/etc.ironic
fi
# Ironic has an early consumer of a new neutron API, and grenade nor devstack
# has any concept of restarting neutron-rpc-server as it was added in late
# 2024. Ultimately networking-baremetal adding an rpc call which needs the
# updated service running means we need to restart it, for now.
sudo systemctl stop devstack@neutron-rpc-server.service || true
sudo systemctl stop devstack@q-l3.service || true
sudo systemctl stop devstack@q-agt.service || true
sleep 1
sudo systemctl start devstack@neutron-rpc-server.service || true
sudo systemctl start devstack@q-l3.service || true
sudo systemctl start devstack@q-agt.service || true
sleep 1
stack_install_service ironic
# calls upgrade-ironic for specific release
@ -96,7 +109,7 @@ $IRONIC_BIN_DIR/ironic-dbsync --config-file=$IRONIC_CONF_FILE
if [[ "${HOST_TOPOLOGY}" == "multinode" ]]; then
iniset $IRONIC_CONF_FILE DEFAULT pin_release_version ${BASE_DEVSTACK_BRANCH#*/}
else
ironic-dbsync online_data_migrations
$IRONIC_BIN_DIR/ironic-dbsync online_data_migrations
fi
ensure_started='ironic-conductor nova-compute '
@ -144,7 +157,7 @@ ensure_services_started $ensure_started
# internal tag, that was assigned to network will be the same. As result we need to update
# tag on link between br-int and brbm to new value after restart.
if [[ -z "${IRONIC_PROVISION_NETWORK_NAME}" ]]; then
net_id=$(openstack network show ironic_grenade -f value -c id)
net_id=$(openstack --os-cloud devstack-admin network show ironic_grenade -f value -c id)
create_ovs_taps $net_id
fi

View file

@ -1,7 +1,6 @@
openstackdocstheme>=2.2.0 # Apache-2.0
openstackdocstheme>=3.5.0 # Apache-2.0
os-api-ref>=1.4.0 # Apache-2.0
reno>=3.1.0 # Apache-2.0
sphinx>=2.0.0,!=2.1.0 # BSD
sphinx>=2.0.0 # BSD
sphinxcontrib-apidoc>=0.2.0 # BSD
sphinxcontrib-seqdiag>=0.8.4 # BSD
sphinxcontrib-svg2pdfconverter>=0.1.0 # BSD

View file

@ -12,11 +12,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from collections import defaultdict
import inspect
import itertools
import operator
import os.path
from docutils import nodes
from docutils.parsers import rst
@ -58,19 +54,22 @@ def _list_table(add, headers, data, title='', columns=None):
else:
# potentially multi-line string
add(' * %s' % lines[0])
for l in lines[1:]:
add(' %s' % l)
for line in lines[1:]:
add(' %s' % line)
add('')
def _format_doc(doc):
"Format one method docstring to be shown in the step table."
paras = doc.split('\n\n')
if paras[-1].startswith(':'):
formatted_docstring = []
for line in paras:
if line.startswith(':'):
continue
# Remove the field table that commonly appears at the end of a
# docstring.
paras = paras[:-1]
return '\n\n'.join(paras)
formatted_docstring.append(line)
return '\n\n'.join(formatted_docstring)
_clean_steps = {}
@ -88,8 +87,8 @@ def _init_steps_by_driver():
for interface_name in sorted(driver_factory.driver_base.ALL_INTERFACES):
if DEBUG:
LOG.info('[{}] probing available plugins for interface {}'.format(
__name__, interface_name))
LOG.info('[%s] probing available plugins for interface %s',
__name__, interface_name)
loader = stevedore.ExtensionManager(
'ironic.hardware.interfaces.{}'.format(interface_name),
@ -114,8 +113,8 @@ def _init_steps_by_driver():
'doc': _format_doc(inspect.getdoc(method)),
}
if DEBUG:
LOG.info('[{}] interface {!r} driver {!r} STEP {}'.format(
__name__, interface_name, plugin.name, step))
LOG.info('[%s] interface %r driver %r STEP %r',
__name__, interface_name, plugin.name, step)
steps.append(step)
if steps:
@ -153,7 +152,8 @@ class AutomatedStepsDirective(rst.Directive):
result = ViewList()
for interface_name in ['power', 'management', 'deploy', 'bios', 'raid']:
for interface_name in ['power', 'management', 'firmware',
'deploy', 'bios', 'raid']:
interface_info = _clean_steps.get(interface_name, {})
if not interface_info:
continue
@ -167,7 +167,8 @@ class AutomatedStepsDirective(rst.Directive):
_list_table(
title='{} cleaning steps'.format(driver_name),
add=lambda x: result.append(x, source_name),
headers=['Name', 'Details', 'Priority', 'Stoppable', 'Arguments'],
headers=['Name', 'Details', 'Priority',
'Stoppable', 'Arguments'],
columns=[20, 30, 10, 10, 30],
data=(
('``{}``'.format(s['step']),

View file

@ -0,0 +1,187 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import json
import os
from sphinx.application import Sphinx
__version__ = "1.0.0"
# Data model #
class Entity:
"""Represents an entity in the profile."""
def __init__(self, name, src):
self.name = name
self.src = src
self.purpose = src.get('Purpose', '')
self.writable = src.get('WriteRequirement') == 'Mandatory'
self.required = (src.get('ReadRequirement') in ('Mandatory', None)
or self.writable)
class ActionParameter(Entity):
"""Represents a parameter in an Action."""
def __init__(self, name, src):
super().__init__(name, src)
self.required_values = src.get('ParameterValues') or []
self.recommended_values = src.get('RecommendedValues') or []
class Action(Entity):
"""Represents an action on a resource."""
def __init__(self, name, src):
super().__init__(name, src)
self.parameters = {
name: ActionParameter(name, value)
for name, value in src.get('Parameters', {}).items()
}
class Resource(Entity):
"""Represents any resource in the profile.
Both top-level resources and nested fields are represented by this class
(but actions are not).
"""
def __init__(self, name, src):
super().__init__(name, src)
self.min_support_values = src.get('MinSupportValues')
self.properties = {
name: Resource(name, value)
for name, value in src.get('PropertyRequirements', {}).items()
}
self.actions = {
name: Action(name, value)
for name, value in src.get('ActionRequirements', {}).items()
}
self.link_to = (src['Values'][0]
if src.get('Comparison') == 'LinkToResource'
else None)
# Rendering #
LEVELS = {0: '=', 1: '-', 2: '~', 3: '^'}
INDENT = ' ' * 4
class NestedWriter:
"""A writer that is nested with indentations."""
def __init__(self, dest, level=0):
self.dest = dest
self.level = level
def text(self, text):
print(INDENT * self.level + text, file=self.dest)
def para(self, text):
self.text(text)
print(file=self.dest)
def _nested_common(self, res):
required = " **[required]**" if res.required else ""
writable = " **[writable]**" if res.writable else ""
self.text(f"``{res.name}``{required}{writable}")
nested = NestedWriter(self.dest, self.level + 1)
if res.purpose:
nested.para(res.purpose)
return nested
def action(self, res):
nested = self._nested_common(res)
for prop in res.parameters.values():
nested.action_parameter(prop)
print(file=self.dest)
def action_parameter(self, res):
self._nested_common(res)
print(file=self.dest)
def resource(self, res):
nested = self._nested_common(res)
for prop in res.properties.values():
nested.resource(prop)
if res.link_to:
# NOTE(dtantsur): this is a bit hacky, but we don't have
# definitions for all possible collections.
split = res.link_to.split('Collection')
if len(split) > 1:
nested.text("Link to a collection of "
f":ref:`Redfish-{split[0]}` resources.")
else:
nested.text(f"Link to a :ref:`Redfish-{res.link_to}` "
"resource.")
print(file=self.dest)
class Writer(NestedWriter):
def __init__(self, dest):
super().__init__(dest)
def title(self, text, level=1):
print(text, file=self.dest)
print(LEVELS[level] * len(text), file=self.dest)
def top_level(self, res):
required = " **[required]**" if res.required else ""
self.para(f".. _Redfish-{res.name}:")
self.title(f"{res.name}")
self.para(f"{res.purpose}{required}")
if res.properties:
self.title("Properties", level=2)
for name, prop in res.properties.items():
self.resource(prop)
if res.actions:
self.title("Actions", level=2)
for name, act in res.actions.items():
self.action(act)
def builder_inited(app: Sphinx):
source = os.path.join(app.srcdir, app.config.redfish_interop_source)
with open(source) as fp:
profile = json.load(fp)
fname = os.path.basename(source).replace('json', 'rst')
dstdir = os.path.join(app.srcdir, app.config.redfish_interop_output_dir)
with open(os.path.join(dstdir, fname), 'wt') as dest:
w = Writer(dest)
w.title(f"{profile['ProfileName']} {profile['ProfileVersion']}", 0)
w.para(profile['Purpose'])
try:
for name, value in sorted(
(name, value)
for name, value in profile['Resources'].items()
):
w.top_level(Resource(name, value))
except Exception:
import traceback
traceback.print_exc()
raise
def setup(app: Sphinx):
app.connect('builder-inited', builder_inited)
app.add_config_value('redfish_interop_source', None, 'env', [str])
app.add_config_value('redfish_interop_output_dir', None, 'env', [str])
return {'version': __version__}

View file

@ -78,7 +78,7 @@ def parse_field_list(content):
def create_bullet_list(input_dict, input_build_env):
"""Convert input_dict into a sphinx representaion of a bullet list."""
"""Convert input_dict into a sphinx representation of a bullet list."""
grp_field = GroupedField('grp_field', label='title')
bullet_list = nodes.paragraph()
@ -138,7 +138,7 @@ def split_list(input_list):
"""Split input_list into three sub-lists.
This function splits the input_list into three, one list containing the
inital non-empty items, one list containing items appearing after the
initial non-empty items, one list containing items appearing after the
string 'Success' in input_list; and the other list containing items
appearing after the string 'Failure' in input_list.
"""
@ -272,7 +272,8 @@ class Parameters(Directive):
for field_name in input_dict:
old_field_body = input_dict[field_name]
if old_field_body in yaml_data.keys():
input_dict[field_name] = yaml_data[old_field_body]["description"]
input_dict[field_name] = \
yaml_data[old_field_body]["description"]
# Convert dictionary to bullet list format
params_build_env = self.state.document.settings.env
@ -327,7 +328,8 @@ class Return(Directive):
failure_detail = create_bullet_list(failure_dict, ret_build_env)
ret_table_contents += failure_detail
if len(initial_list) > 0 or len(success_list) > 0 or len(proc_fail_list) > 0:
if (len(initial_list) > 0 or len(success_list) > 0 or
len(proc_fail_list) > 0):
# Create a table to display the final Returns directive output
ret_table = create_table('Returns', ret_table_contents)
return [ret_table]

View file

@ -18,7 +18,7 @@ states, which will prevent the node from being seen by the Compute
service as ready for use.
This feature is leveraged as part of the state machine workflow,
where a node in ``manageable`` can be moved to ``active`` state
where a node in ``manageable`` can be moved to an ``active`` state
via the provision_state verb ``adopt``. To view the state
transition capabilities, please see :ref:`states`.
@ -48,7 +48,7 @@ required boot image, or boot ISO image and then places any PXE or virtual
media configuration necessary for the node should it be required.
The adoption process makes no changes to the physical node, with the
exception of operator supplied configurations where virtual media is
exception of operator-supplied configurations where virtual media is
used to boot the node under normal circumstances. An operator should
ensure that any supplied configuration defining the node is sufficient
for the continued operation of the node moving forward.
@ -56,7 +56,7 @@ for the continued operation of the node moving forward.
Possible Risk
=============
The main risk with this feature is that supplied configuration may ultimately
The main risk with this feature is that the supplied configuration may ultimately
be incorrect or invalid which could result in potential operational issues:
* ``rebuild`` verb - Rebuild is intended to allow a user to re-deploy the node
@ -143,7 +143,7 @@ from the ``manageable`` state to ``active`` state::
.. NOTE::
In the above example, the image_source setting must reference a valid
image or file, however that image or file can ultimately be empty.
image or file, however, that image or file can ultimately be empty.
.. NOTE::
The above example utilizes a capability that defines the boot operation
@ -154,7 +154,7 @@ from the ``manageable`` state to ``active`` state::
The above example will fail a re-deployment as a fake image is
defined and no instance_info/image_checksum value is defined.
As such any actual attempt to write the image out will fail as the
image_checksum value is only validated at time of an actual
image_checksum value is only validated at the time of an actual
deployment operation.
.. NOTE::
@ -165,10 +165,9 @@ from the ``manageable`` state to ``active`` state::
baremetal node set <node name or uuid> --instance-uuid <uuid>
.. NOTE::
In Newton, coupled with API version 1.20, the concept of a
network_interface was introduced. A user of this feature may wish to
add new nodes with a network_interface of ``noop`` and then change
the interface at a later point and time.
A user of this feature may wish to add new nodes with a
``network_interface`` value of ``noop`` and then change the interface
at a later point and time.
Troubleshooting
===============
@ -176,7 +175,7 @@ Troubleshooting
Should an adoption operation fail for a node, the error that caused the
failure will be logged in the node's ``last_error`` field when viewing the
node. This error, in the case of node adoption, will largely be due to
failure of a validation step. Validation steps are dependent
the failure of a validation step. Validation steps are dependent
upon what driver is selected for the node.
Any node that is in the ``adopt failed`` state can have the ``adopt`` verb
@ -184,7 +183,7 @@ re-attempted. Example::
baremetal node adopt <node name or uuid>
If a user wishes to abort their attempt at adopting, they can then move
If a user wishes to cancel their attempt at adopting, they can then move
the node back to ``manageable`` from ``adopt failed`` state by issuing the
``manage`` verb. Example::
@ -205,18 +204,18 @@ Adoption with Nova
Since there is no mechanism to create bare metal instances in Nova when nodes
are adopted into Ironic, the node adoption feature described above cannot be
used to add in production nodes to deployments which use Ironic together with
used to add in production nodes to deployments that use Ironic together with
Nova.
One option to add in production nodes to an Ironic/Nova deployment is to use
One option to add production nodes to an Ironic/Nova deployment is to use
the fake drivers. The overall idea is that for Nova the nodes are instantiated
normally to ensure the instances are properly created in the compute project
while Ironic does not touch them.
Here are some high level steps to be used as a guideline:
Here are some high-level steps to be used as a guideline:
* create a bare metal flavor and a hosting project for the instances
* enroll the nodes into Ironic, create the ports, move them to manageable
* enroll the nodes into Ironic, create the ports, and move them to manageable
* change the hardware type and the interfaces to fake drivers
* provide the nodes to make them available
* one by one, add the nodes to the placement aggregate and create instances

View file

@ -17,22 +17,22 @@ How it works
The expected workflow is as follows:
#. The node is discovered by manually powering it on and gets the
`manual-management` hardware type and `agent` power interface.
``manual-management`` hardware type and ``agent`` power interface.
If discovery is not used, a node can be enrolled through the API and then
powered on manually.
#. The operator moves the node to `manageable`. It works because the `agent`
#. The operator moves the node to ``manageable``. It works because the ``agent``
power only requires to be able to connect to the agent.
#. The operator moves the node to `available`. Cleaning happens normally via
the already running agent. If reboot is needed, it is done by telling the
#. The operator moves the node to ``available``. Cleaning happens normally via
the already running agent. If a reboot is needed, it is done by telling the
agent to reboot the node in-band.
#. A user deploys the node. Deployment happens normally via the already
running agent.
#. In the end of the deployment, the node is rebooted via the reboot command
#. At the end of the deployment, the node is rebooted via the reboot command
instead of power off+on.
Enabling
@ -59,10 +59,6 @@ As usual with the ``noop`` management, enable the networking boot fallback:
[pxe]
enable_netboot_fallback = true
If using discovery, :ironic-inspector-doc:`configure discovery in
ironic-inspector <user/usage.html#discovery>` with the default driver set
to ``manual-management``.
Limitations
===========
@ -70,7 +66,7 @@ Limitations
* Undeploy and rescue are not supported, you need to add BMC credentials first.
* If any errors happens in the process, recovery will likely require BMC
* If any errors happen in the process, recovery will likely require BMC
credentials.
* Only rebooting is possible through the API, power on/off commands will fail.

View file

@ -25,29 +25,29 @@ How it works
These tokens are provided in one of two ways to the running agent.
1. A pre-generated token which is embedded into virtual media ISOs.
2. A one-time generated token that are provided upon the first "lookup"
1. A pre-generated token that is embedded into virtual media ISOs.
2. A one-time generated token that is provided upon the first "lookup"
of the node.
In both cases, the tokens are a randomly generated using the Python
In both cases, the tokens are randomly generated using the Python
``secrets`` library. As of mid-2020, the default length is 43 characters.
Once the token has been provided, the token cannot be retrieved or accessed.
It remains available to the conductors, and is stored in memory of the
It remains available to the conductors and is stored in the memory of the
``ironic-python-agent``.
.. note::
In the case of the token being embedded with virtual media, it is read
from a configuration file with-in the image. Ideally this should be paired
from a configuration file within the image. Ideally, this should be paired
with Swift temporary URLs.
With the token is available in memory in the agent, the token is embedded with
``heartbeat`` operations to the ironic API endpoint. This enables the API to
authenticate the heartbeat request, and refuse "heartbeat" requests from the
``ironic-python-agent``. As of the Victoria release, use of Agent Token is
``ironic-python-agent``. As of the Victoria release, the use of Agent Token is
required for all agents and the previously available setting to force this
functionality to be mandatory, ``[DEFAULT]require_agent_token`` no longer has
any effect.
functionality to be mandatory, ``[DEFAULT]require_agent_token`` has been removed
and no longer has any effect.
.. warning::
If the Bare Metal Service is updated, and the version of
@ -61,63 +61,22 @@ token, allowing the agent to authenticate the caller.
With Virtual Media
------------------
.. seqdiag::
:scale: 80
diagram {
API; Conductor; Baremetal; Swift; IPA;
activation = none;
span_height = 1;
edge_length = 250;
default_note_color = white;
default_fontsize = 14;
Conductor -> Conductor [label = "Generates a random token"];
Conductor -> Conductor [label = "Generates configuration for IPA ramdisk"];
Conductor -> Swift [label = "IPA image, with configuration is uploaded"];
Conductor -> Baremetal [label = "Attach IPA virtual media in Swift as virtual CD"];
Conductor -> Baremetal [label = "Conductor turns power on"];
Baremetal -> Swift [label = "Baremetal reads virtual media"];
Baremetal -> Baremetal [label = "Boots IPA virtual media image"];
Baremetal -> Baremetal [label = "IPA is started"];
IPA -> Baremetal [label = "IPA loads configuration and agent token into memory"];
IPA -> API [label = "Lookup node"];
API -> IPA [label = "API responds with node UUID and token value of '******'"];
IPA -> API [label = "Heartbeat with agent token"];
}
.. figure:: ./../images/agent-token-with-virtual-media.svg
:width: 100%
With PXE/iPXE/etc.
------------------
.. seqdiag::
:scale: 80
diagram {
API; Conductor; Baremetal; iPXE; IPA;
activation = none;
span_height = 1;
edge_length = 250;
default_note_color = white;
default_fontsize = 14;
Conductor -> Baremetal [label = "Conductor turns power on"];
Baremetal -> iPXE [label = "Baremetal reads kernel/ramdisk and starts boot"];
Baremetal -> Baremetal [label = "Boots IPA iPXE image"];
Baremetal -> Baremetal [label = "IPA is started"];
IPA -> Baremetal [label = "IPA loads configuration"];
IPA -> API [label = "Lookup node"];
API -> Conductor [label = "API requests conductor to generates a random token"];
API -> IPA [label = "API responds with node UUID and token value"];
IPA -> API [label = "Heartbeat with agent token"];
}
.. figure:: ./../images/agent-token-with-pxe-ipxe.svg
:width: 100%
Agent Configuration
===================
An additional setting which may be leveraged with the ``ironic-python-agent``
An additional setting that may be leveraged with the ``ironic-python-agent``
is a ``agent_token_required`` setting. Under normal circumstances, this
setting can be asserted via the configuration supplied from the Bare Metal
service deployment upon the ``lookup`` action, but can be asserted via the
service deployment upon the ``lookup`` action but can be asserted via the
embedded configuration for the agent in the ramdisk. This setting is also
available via kernel command line as ``ipa-agent-token-required``.
available via the kernel command line as ``ipa-agent-token-required``.

View file

@ -2,7 +2,7 @@ Deploying with anaconda deploy interface
========================================
Ironic supports deploying an OS with the `anaconda`_ installer.
This anaconda deploy interface works with ``pxe`` and ``ipxe`` boot interfaces.
This anaconda deploy interface *ONLY* works with ``pxe`` and ``ipxe`` boot interfaces.
Configuration
-------------
@ -22,13 +22,13 @@ This change takes effect after all the ironic conductors have been
restarted.
The default kickstart template is specified via the configuration option
``[anaconda]default_ks_template``. It is set to this `ks.cfg.template`_
:oslo.config:option:`anaconda.default_ks_template`. It is set to this `ks.cfg.template`_
but can be modified to be some other template.
.. code-block:: ini
[anaconda]
default_ks_template = file:///etc/ironic/ks.cfg.template
default_ks_template = /etc/ironic/ks.cfg.template
When creating an ironic node, specify ``anaconda`` as the deploy interface.
@ -64,7 +64,7 @@ package groups that need to be in the image:
install cloud-init
ts run
An OS tarball can be created using following set of commands, along with the above
An OS tarball can be created using the following set of commands, along with the above
``baremetal.yum`` file:
.. code-block:: shell
@ -102,48 +102,104 @@ The kernel and ramdisk can be found at ``/images/pxeboot/vmlinuz`` and
image can be normally found at ``/LiveOS/squashfs.img`` or
``/images/install.img``.
The OS tarball must be configured with the following properties in glance, in
order to be used with the anaconda deploy driver:
The anaconda deploy driver uses the following image properties from glance,
which are all optional depending on how you create your bare metal server:
* ``kernel_id``
* ``ramdisk_id``
* ``stage2_id``
* ``disk_file_extension`` (optional)
* ``ks_template``
* ``disk_file_extension``
Valid ``disk_file_extension`` values are ``.img``, ``.tar``, ``.tbz``,
``.tgz``, ``.txz``, ``.tar.gz``, ``.tar.bz2``, and ``.tar.xz``. When
``disk_file_extension`` property is not set to one of the above valid values
the anaconda installer will assume that the image provided is a mountable
All except ``disk_file_extension`` are glance image IDs. They can be prefixed
with ``glance://``.
Valid ``disk_file_extension`` values are:
* ``.img``
* ``.tar``
* ``.tbz``
* ``.tgz``
* ``.txz``
* ``.tar.gz``
* ``.tar.bz2``
* ``.tar.xz``
When the ``disk_file_extension`` property is not set to one of the above valid
values the anaconda installer will assume that the image provided is a mountable
OS disk.
This is an example of adding the anaconda-related images and the OS tarball to
glance:
An example of creating the necessary glance images with the anaconda files
and the OS tarball and setting properties to refer to components can be seen below.
.. Note:: The various images must be shared except for the OS image
with the properties set. This image must be set to public.
See `bug 2099276 <https://bugs.launchpad.net/ironic/+bug/2099276>`_ for
more details.
.. code-block:: shell
openstack image create --file ./vmlinuz --container-format aki \
--disk-format aki --shared anaconda-kernel-<version>
openstack image create --file ./initrd.img --container-format ari \
--disk-format ari --shared anaconda-ramdisk-<version>
openstack image create --file ./squashfs.img --container-format ari \
--disk-format ari --shared anaconda-stage-<verison>
openstack image create --file ./os-image.tar.gz \
--container-format bare --disk-format raw --shared \
--property kernel_id=<glance_uuid_vmlinuz> \
--property ramdisk_id=<glance_uuid_ramdisk> \
--property stage2_id=<glance_uuid_stage2> disto-name-version \
--property disk_file_extension=.tgz
# vmlinuz
openstack image create --container-format bare --disk-format raw --shared \
--file ./vmlinuz anaconda-kernel-<version>
Creating a bare metal server
----------------------------
# initrd/initramfs/ramdisk
openstack image create --container-format bare --disk-format raw --shared \
--file ./initrd.img anaconda-ramdisk-<version>
Apart from uploading a custom kickstart template to glance and associating it
with the OS image via the ``ks_template`` property in glance, operators can
also set the kickstart template in the ironic node's ``instance_info`` field.
The kickstart template set in ``instance_info`` takes precedence over the one
specified via the OS image in glance. If no kickstart template is specified
(via the node's ``instance_info`` or ``ks_template`` glance image property),
the default kickstart template will be used to deploy the OS.
# squashfs/stage2
openstack image create --container-format bare --disk-format raw --shared \
--file ./squashfs.img anaconda-stage2-<version>
KERNEL_ID=$(openstack image show -f value -c id anaconda-kernel-<version>)
RAMDISK_ID=$(openstack image show -f value -c id anaconda-ramdisk-<version>)
STAGE2_ID=$(openstack image show -f value -c id anaconda-stage2-<version>)
# the actual OS image we'll use as our source
openstack image create --container-format bare --disk-format raw --public \
--property kernel_id=${KERNEL_ID} \
--property ramdisk_id=${RAMDISK_ID} \
--property stage2_id=${STAGE2_ID} \
--property disk_file_extension=.tgz \
--file ./os-image.tar.gz \
my-anaconda-based-os-<version>
Deploying a node
----------------
To be able to deploy a node with the anaconda deploy interface the node's
``instance_info`` must have an ``image_source`` at a minimum but depending
on how your node is being deployed more fields must be populated.
If you are using Ironic via Nova then it will only set the ``image_source``
on ``instance_info`` so the following image properties are required:
* ``kernel_id``
* ``ramdisk_id``
* ``stage2_id``
You may optionally upload a custom kickstart template to glance an associate
it to the OS image via the ``ks_template`` property.
.. code-block:: shell
openstack server create --image my-anaconda-based-os-<version> ...
If you are not using Ironic via Nova then all properties except
``disk_file_extension`` can be supplied via ``instance_info`` or via the
OS image properties. The values in ``instance_info`` will take precedence
over those specified in the OS image. However most of their names are
slightly altered.
* ``kernel_id`` OS image property is ``kernel`` in ``instance_info``
* ``ramdisk_id`` OS image property is ``ramdisk`` in ``instance_info``
* ``stage2_id`` OS image property is ``stage2`` in ``instance_info``
Only the ``ks_template`` property remains the same in ``instance_info``.
.. Note:: If no ``ks_template`` is supplied then
:oslo.config:option:`anaconda.default_ks_template` will be used.
This is an example of how to set the kickstart template for a specific
ironic node:
@ -153,23 +209,32 @@ ironic node:
openstack baremetal node set <node> \
--instance_info ks_template=glance://uuid
Ultimately to deploy your node it must be able to find the kernel, the
ramdisk, the stage2 file, and your OS image via glance image properties
or via ``instance_info``.
.. code-block:: shell
openstack baremetal node set <node> \
--instance_info image_source=glance://uuid
.. warning::
In the Ironic Project terminology, the word ``template`` often refers to
a file which is supplied to the deployment, which Ironic supplies
a file that is supplied to the deployment, which Ironic supplies
parameters to render a specific output. One critical example of this in
the Ironic workflow, specifically with this driver, is that the generated
``agent token`` is conveyed to the booting ramdisk, facilitating it to call
back to Ironic and indicate the state. This token is randomly generated
for every deploy, and is required. Specifically this is leveraged in the
for every deploy and is required. Specifically, this is leveraged in the
template's ``pre``, ``onerror``, and ``post`` steps.
For more infomation on Agent Token, please see :doc:`/admin/agent-token`.
For more information on Agent Token, please see :doc:`/admin/agent-token`.
Standalone deployments
----------------------
While this deployment interface driver was developed around the use of other
OpenStack services, it is not explicitly required. For example HTTP(S) URLs
can be supplied by the API user to explictly set the expected baremetal node
OpenStack services, it is not explicitly required. For example, HTTP(S) URLs
can be supplied by the API user to explicitly set the expected baremetal node
``instance_info`` fields
.. code-block:: shell
@ -182,7 +247,7 @@ can be supplied by the API user to explictly set the expected baremetal node
When doing so, you may wish to also utilize a customized kickstart template,
which can also be a URL. Please reference the ironic community provided
template *ks.cfg.template* and use it as a basis of your own kickstart
template *ks.cfg.template* and use it as a basis for your own kickstart
as it accounts for the particular stages and appropriate callbacks to
Ironic.
@ -223,7 +288,7 @@ At this point, you should be able to request the baremetal node to deploy.
Standalone using a repository
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Anaconda supports a concept of passing a repository as opposed to a dedicated
Anaconda supports the concept of passing a repository as opposed to a dedicated
URL path which has a ``.treeinfo`` file, which tells the initial boot scripts
where to get various dependencies, such as what would be used as the anaconda
``stage2`` ramdisk. Unfortunately, this functionality is not well documented.
@ -252,11 +317,11 @@ parameter, and the node deployed.
Deployment Process
------------------
At a high level, the mechanics of the anaconda driver works in the following
At a high level, the mechanics of the anaconda driver work in the following
flow, where we also note the stages and purpose of each part for informational
purposes.
#. Network Boot Program (Such as iPXE) downloads the kernel, and initial
#. Network Boot Program (Such as iPXE) downloads the kernel and initial
ramdisk.
#. Kernel launches, uncompresses initial ramdisk, and executes init inside
of the ramdisk.
@ -280,17 +345,17 @@ part due to the general defaults being set to much lower values for image
based deployments, but the way the anaconda deployment interface works,
you may need to make some adjustments.
* ``[conductor]deploy_callback_timeout`` likely needs to be adjusted
for most ``anaconda`` deployment interface users. By default this
is a timer which looks for "agents" which have not checked in with
* :oslo.config:option:`conductor.deploy_callback_timeout` likely needs to be adjusted
for most ``anaconda`` deployment interface users. By default, this
is a timer that looks for "agents" that have not checked in with
Ironic, or agents which may have crashed or failed after they
started. If the value is reached, then the current operation is failed.
This value should be set to a number of seconds which exceeds your
average anaconda deployment time.
* ``[pxe]boot_retry_timeout`` can also be triggered and result in
* :oslo.config:option:`pxe.boot_retry_timeout` can also be triggered and result in
an anaconda deployment in progress getting reset as it is intended
to reboot nodes which might have failed their initial PXE operation.
Depending on sizes of images, and the exact nature of what was deployed,
to reboot nodes that might have failed their initial PXE operation.
Depending on the sizes of images, and the exact nature of what was deployed,
it may be necessary to ensure this is a much higher value.
Limitations
@ -299,7 +364,7 @@ Limitations
* This deploy interface has only been tested with Red Hat based operating
systems that use anaconda. Other systems are not supported.
* Runtime TLS certifiate injection into ramdisks is not supported. Assets
* Runtime TLS certificate injection into ramdisks is not supported. Assets
such as ``ramdisk`` or a ``stage2`` ramdisk image need to have trusted
Certificate Authority certificates present within the images *or* the
Ironic API endpoint utilized should utilize a known trusted Certificate

View file

@ -4,20 +4,21 @@
API Audit Logging
=================
Audit middleware supports delivery of CADF audit events via Oslo messaging
notifier capability. Based on `notification_driver` configuration, audit events
can be routed to messaging infrastructure (notification_driver = messagingv2)
or can be routed to a log file (`[oslo_messaging_notifications]/driver = log`).
Audit middleware supports the delivery of CADF audit events via the Oslo messaging
notifier capability. Based on the ``notification_driver`` configuration, audit
event can be routed to messaging infrastructure (notification_driver =
messagingv2) or can be routed to a log file (
``[oslo_messaging_notifications]/driver = log``).
Audit middleware creates two events per REST API interaction. First event has
Audit middleware creates two events per REST API interaction. The first event has
information extracted from request data and the second one has request outcome
(response).
Enabling API Audit Logging
==========================
Audit middleware is available as part of `keystonemiddleware` (>= 1.6) library.
For information regarding how audit middleware functions refer
Audit middleware is available as part of ``keystonemiddleware`` (>= 1.6)
library. For information regarding how audit middleware functions refer
:keystonemiddleware-doc:`here <audit.html>`.
Auditing can be enabled for the Bare Metal service by making the following changes
@ -30,17 +31,17 @@ to ``/etc/ironic/ironic.conf``.
enabled=true
#. To customize auditing API requests, the audit middleware requires the audit_map_file setting
to be defined. Update the value of configuration setting 'audit_map_file' to set its
to be defined. Update the value of the configuration setting 'audit_map_file' to set its
location. Audit map file configuration options for the Bare Metal service are included
in the etc/ironic/ironic_api_audit_map.conf.sample file. To understand CADF format
specified in ironic_api_audit_map.conf file refer to `CADF Format.
specified in ironic_api_audit_map.conf file, refer to `CADF Format.
<http://www.dmtf.org/sites/default/files/standards/documents/DSP2038_1.0.0.pdf>`_::
[audit]
...
audit_map_file=/etc/ironic/api_audit_map.conf
#. Comma separated list of Ironic REST API HTTP methods to be ignored during audit.
#. Comma-separated list of Ironic REST API HTTP methods to be ignored during audit.
It is used only when API audit is enabled. For example::
[audit]
@ -50,7 +51,7 @@ to ``/etc/ironic/ironic.conf``.
Sample Audit Event
==================
Following is the sample of audit event for ironic node list request.
Following is the sample of the audit event for the ironic node list request.
.. code-block:: json

View file

@ -0,0 +1,8 @@
Architecture and Implementation Details
=======================================
.. toctree::
:maxdepth: 1
Agent Token <agent-token>
Steps <steps>

View file

@ -0,0 +1,583 @@
.. meta::
:description: Implement availability zones with Ironic using conductor groups and shards. Multi-datacenter deployments, fault tolerance, and resource partitioning strategies.
:keywords: availability zones, conductor groups, shards, fault tolerance, multi-datacenter, resource partitioning, high availability, geographic distribution
:author: OpenStack Ironic Team
:robots: index, follow
:audience: cloud architects, system administrators
==========================================
Availability Zones and Resource Isolation
==========================================
Overview
========
While Ironic does not implement traditional OpenStack Availability Zones like
Nova and Neutron, it provides a **three-tier approach** for resource
partitioning and isolation that achieves comprehensive availability
zone functionality:
* **Multiple Ironic Deployments**: Completely separate Ironic services
targeted by different Nova compute nodes
* **Conductor Groups**: Physical/geographical resource partitioning within
a deployment
* **Shards**: Logical grouping for operational scaling within a deployment
This document explains how these mechanisms work together and how to achieve
sophisticated availability zone functionality across your infrastructure.
This document does **not** cover similar effect which can be achieved
through the use of API level Role Based Access Control through the
``owner`` and ``lessee`` fields.
.. contents:: Table of Contents
:local:
:depth: 2
Comparison with Other OpenStack Services
========================================
+------------------+-------------------+------------------------+
| Service | Mechanism | Purpose |
+==================+===================+========================+
| Nova | Availability | Instance placement |
| | Zones (host | across fault domains |
| | aggregates) | |
+------------------+-------------------+------------------------+
| Neutron | Agent AZs | Network service HA |
+------------------+-------------------+------------------------+
| **Ironic** | **Multiple | **Complete service |
| | Deployments + | isolation + physical |
| | Conductor Groups | partitioning + |
| | + Shards** | operational scaling** |
+------------------+-------------------+------------------------+
Ironic's Three-Tier Approach
=============================
Tier 1: Multiple Ironic Deployments
------------------------------------
The highest level of isolation involves running **completely separate
Ironic services** that Nova and other API users can target independently.
**Use Cases**:
* Complete geographic separation (different regions/countries)
* Regulatory compliance requiring full data isolation
* Independent upgrade cycles and operational teams
**Implementation**: Configure separate Nova compute services to target
different Ironic deployments using Nova's Ironic driver configuration.
**Benefits**:
* Complete fault isolation - failure of one deployment doesn't affect others
* Independent scaling, upgrades, and maintenance
* Different operational policies per deployment
* Complete API endpoint separation
Tier 2: Conductor Groups (Physical Partitioning)
-------------------------------------------------
Within a single Ironic deployment, conductor groups provides
**physical resource partitioning**.
**Use Cases**:
* Separate nodes by datacenter/availability zone within a region
* Separate nodes by conductor groups for conductor resource management
* Isolate hardware types or vendors
* Create fault domains for high availability
* Manage nodes with different network connectivity
Conductor groups control **which conductor manages which nodes**.
Each conductor can be assigned to a specific group, and will only
manage nodes that belong to the same group.
A classical challenge of Ironic is that it is able to manage far more
Bare Metal nodes than a single ``nova-compute`` service is designed to
support. The primary answer for this issue is to leverage Shards first,
and then continue to evolve based upon operational needs.
See: :doc:`conductor-groups` for detailed configuration.
.. _availability-zones-shards:
Tier 3: Shards (Logical Partitioning)
--------------------------------------
The finest level of granularity for **operational and client-side grouping**.
**Use Cases**:
* Horizontal scaling of operations
* Parallelize maintenance tasks
* Create logical groupings for different teams
Shards can be used by clients, including Nova, to limit the scope of their
requests to a logical and declared subset of nodes which prevents multiple
``nova-compute`` services from being able to see and work with the same
node on multiple ``nova-compute`` services.
.. note::
Shards are client-side constructs - Ironic itself does not use shard
values internally.
.. versionadded:: 1.82
Shard support was added in API version 1.82.
.. warning::
Once set, a shard should not be changed. Nova's model of leveraging the
Ironic API does not permit this value to be changed after the fact.
Common Deployment Patterns
===========================
Pattern 1: Multi-Region with Complete Isolation
------------------------------------------------
**Use Case**: Global deployment with regulatory compliance
**Implementation**:
- **Multiple Deployments**: ``ironic-us-east``, ``ironic-eu-west``, ``ironic-apac``
- **Nova Configuration**: Separate compute services per region
- **Conductor Groups**: Optional within each deployment
- **Shards**: Operational grouping within regions
**Example Nova Configuration**:
.. code-block:: ini
# nova-compute for US East region
[ironic]
auth_url = https://keystone-us-east.example.com/v3
endpoint_override = https://ironic-us-east.example.com
# nova-compute for EU West region
[ironic]
auth_url = https://keystone-eu-west.example.com/v3
endpoint_override = https://ironic-eu-west.example.com
.. note::
The above indicated ``endpoint_override`` configuration is provided
for illustrative purposes to stress endpoints would be distinctly
different.
Pattern 2: Single Region with Datacenter Separation
----------------------------------------------------
**Use Case**: Metro deployment across multiple datacenters
**Implementation**:
- **Single Deployment**: One Ironic service
- **Conductor Groups**: ``datacenter-1``, ``datacenter-2``, ``datacenter-3``
- **Nova Configuration**: Target specific conductor groups
- **Shards**: Optional operational grouping
In this case, we don't expect BMC management network access to occur between
datacenters. Thus each datacenter is configured with it's own group of
conductors.
**Example Configuration**:
.. code-block:: bash
# Configure Nova compute to target specific conductor group
[ironic]
conductor_group = datacenter-1
# Configure conductors (ironic.conf)
[conductor]
conductor_group = datacenter-1
# Assign nodes
baremetal node set --conductor-group datacenter-1 <node-uuid>
.. note::
Some larger operators who leverage conductor groups have suggested
that it is sometimes logical to have a conductor set without a
``conductor_group`` set. This helps prevent orphaning nodes because
Ironic routes all changes to the conductor which presently manages
the node.
Pattern 3: Operational Scaling Within Datacenters
--------------------------------------------------
**Use Case**: Large deployment requiring parallel operations
**Implementation**:
- **Single Deployment**: One Ironic service
- **Conductor Groups**: By datacenter or hardware type
- **Shards**: Operational batches for maintenance/upgrades
- **Nova Configuration**: May target specific conductor groups
**Example**:
.. code-block:: bash
# Set up conductor groups by hardware
baremetal node set --conductor-group dell-servers <node-uuid-1>
baremetal node set --conductor-group hpe-servers <node-uuid-2>
# Create operational shards for maintenance
baremetal node set --shard maintenance-batch-1 <node-uuid-1>
baremetal node set --shard maintenance-batch-2 <node-uuid-2>
Pattern 4: Hybrid Multi-Tier Approach
--------------------------------------
**Use Case**: Complex enterprise deployment
**Implementation**: All three tiers working together
**Example Architecture**:
.. code-block:: bash
# Deployment 1: Production East Coast
# Nova compute service targets ironic-prod-east
[ironic]
endpoint_override = https://ironic-prod-east.example.com
conductor_group = datacenter-east
# Within this deployment:
baremetal node set --conductor-group datacenter-east --shard prod-batch-a <node-uuid>
# Deployment 2: Production West Coast
# Nova compute service targets ironic-prod-west
[ironic]
endpoint_override = https://ironic-prod-west.example.com
conductor_group = datacenter-west
Nova Integration and Configuration
==================================
Targeting Multiple Ironic Deployments
--------------------------------------
Nova's Ironic driver can be configured to target different Ironic services:
**Per-Compute Service Configuration**:
.. code-block:: ini
# /etc/nova/nova.conf on compute-service-1
[ironic]
auth_url = https://keystone-region1.example.com/v3
endpoint_override = https://ironic-region1.example.com
conductor_group = region1-zone1
# /etc/nova/nova.conf on compute-service-2
[ironic]
auth_url = https://keystone-region2.example.com/v3
endpoint_override = https://ironic-region2.example.com
conductor_group = region2-zone1
**Advanced Options**:
.. code-block:: ini
[ironic]
# Target specific conductor group within deployment
conductor_group = datacenter-east
# Target specific shard within deployment
shard = production-nodes
# Connection retry configuration
api_max_retries = 60
api_retry_interval = 2
.. seealso::
`Nova Ironic Hypervisor Configuration <https://github.com/openstack/nova/blob/master/doc/source/admin/configuration/hypervisor-ironic.rst>`_
for complete Nova configuration details.
Scaling Considerations
----------------------
**Nova Compute Service Scaling**:
* Single nova-compute can handle several hundred Ironic nodes efficiently.
* Consider multiple compute services for >1000 nodes per deployment.
Nova-compute is modeled on keeping a relatively small number of "instances"
per nova-compute process. For example, 250 baremetal nodes.
* One nova-compute process per conductor group or shard is expected.
* A ``conductor_group`` which is independent of a nova-compute service
configuration can be changed at any time. A shard should never be
changed once it has been introduced to a nova-compute process.
**Multi-Deployment Benefits**:
* Independent scaling per deployment
* Isolated failure domains
* Different operational schedules
Integration Considerations
==========================
Network Considerations
----------------------
Ironic's partitioning works alongside physical network configuration:
* Physical networks can span multiple conductor groups
* Consider network topology when designing conductor group boundaries
* Ensure network connectivity between conductors and their assigned nodes
.. seealso::
:doc:`networking` for detailed network configuration guidance
Nova Placement and Scheduling
------------------------------
When using Ironic with Nova:
* Nova's availability zones operate independently of Ironic's partitioning
* Use resource classes and traits for capability-based scheduling
.. seealso::
:doc:`../install/configure-nova-flavors` for flavor and scheduling configuration
API Client Usage
================
Working Across Multiple Deployments
------------------------------------
When managing multiple Ironic deployments, use separate client configurations:
.. code-block:: bash
# Configure client for deployment 1
export OS_AUTH_URL=https://keystone-east.example.com/v3
export OS_ENDPOINT_OVERRIDE=https://ironic-east.example.com
baremetal node list
# Configure client for deployment 2
export OS_AUTH_URL=https://keystone-west.example.com/v3
export OS_ENDPOINT_OVERRIDE=https://ironic-west.example.com
baremetal node list
Filtering by Conductor Group
-----------------------------
.. code-block:: bash
# List nodes by conductor group
baremetal node list --conductor-group datacenter-east
# List ports by node conductor group
baremetal port list --conductor-group datacenter-east
Filtering by Shard
-------------------
.. code-block:: bash
# List nodes by shard
baremetal node list --shard batch-a
# Get shard distribution
baremetal shard list
# Find nodes without a shard assignment
baremetal node list --unsharded
Combined Filtering Within Deployments
--------------------------------------
.. code-block:: bash
# Within a single deployment, filter by conductor group and shard
baremetal node list --conductor-group datacenter-1 --shard maintenance-batch-a
# Set both conductor group and shard on a node
baremetal node set --conductor-group datacenter-east --shard batch-a <node-uuid>
# Get overview of resource distribution
baremetal shard list
baremetal conductor list
Best Practices
==============
Deployment Strategy Planning
----------------------------
1. **Assess isolation requirements**: Determine if you need complete service separation
2. **Plan geographic distribution**: Use multiple deployments for true regional separation
3. **Design conductor groups**: Align with physical/network boundaries
4. **Implement shard strategy**: Plan for operational efficiency
5. **Configure Nova appropriately**: Match Nova compute services to your architecture
Operational Considerations
--------------------------
**Multiple Deployments**:
* Maintain consistent tooling across deployments
* Plan for cross-deployment migrations if needed
* Monitor each deployment independently
* Coordinate upgrade schedules
**Within Deployments**:
* Monitor conductor distribution: ``baremetal shard list``
* Ensure conductor redundancy per group
* Align network topology with conductor groups
* Automate shard management for balance
**Nova Integration**:
* Plan compute service distribution across deployments
* Monitor nova-compute to Ironic node ratios
* Test failover scenarios between compute services
Naming Conventions
------------------
Naming patterns can be defined by the infrastructure operator and below
are some basic suggestions which may be relevant based upon operational
requirements.
**Conductor Groups**:
* Geographic: ``datacenter-east``, ``region-us-west``, ``rack-01``
* Hardware: ``dell-servers``, ``hpe-gen10``, ``gpu-nodes``
* Network: ``vlan-100``, ``isolated-network``
**Shards**:
* Operational: ``maintenance-batch-1``, ``upgrade-group-a``
* Size-based: ``small-nodes``, ``large-memory``
* Temporal: ``weekend-maintenance``, ``business-hours``
Decision Matrix
---------------
Choose your approach based on requirements:
+-------------------------+-------------------+-----------------+---------------+
| **Requirement** | **Multiple | **Conductor | **Shards** |
| | Deployments** | **Groups** | |
+=========================+===================+=================+===============+
| Complete isolation | ✓ Best | ✓ Good | ✗ No |
+-------------------------+-------------------+-----------------+---------------+
| Independent upgrades | ✓ Complete | ✓ Partial | ✗ No |
+-------------------------+-------------------+-----------------+---------------+
| Geographic separation | ✓ Best | ✓ Good | ✗ No |
+-------------------------+-------------------+-----------------+---------------+
| Operational scaling | ✗ Overhead | ✓ Good | ✓ Best |
+-------------------------+-------------------+-----------------+---------------+
| Resource efficiency | ✗ Lower | ✓ Good | ✓ Best |
+-------------------------+-------------------+-----------------+---------------+
Troubleshooting
===============
Multiple Deployment Issues
---------------------------
**Connectivity Problems**:
.. code-block:: bash
# Test connectivity to each deployment
baremetal --os-endpoint-override https://ironic-east.example.com node list
baremetal --os-endpoint-override https://ironic-west.example.com node list
**Nova Configuration Issues**:
.. code-block:: bash
# Check Nova compute service registration
openstack compute service list --service nova-compute
# Verify Nova can reach Ironic
grep -i ironic /var/log/nova/nova-compute.log
**Cross-Deployment Node Migration**:
.. code-block:: bash
# Export node data from source deployment
baremetal node show --fields all <node-uuid>
# Import to destination deployment (manual process)
# Note: Requires careful planning and may need custom tooling
Common Issues Within Deployments
---------------------------------
**Orphaned nodes**: Nodes without matching conductor groups cannot be managed
.. code-block:: bash
# Find nodes without conductor groups
baremetal node list --conductor-group ""
# List available conductor groups
baremetal conductor list
**Unbalanced shards**: Monitor node distribution across shards
.. code-block:: bash
# Check shard distribution
baremetal shard list
# Find heavily loaded shards
baremetal node list --shard <shard-name> | wc -l
**Missing conductor groups**: Ensure all groups have active conductors
.. code-block:: bash
# Check conductor status
baremetal conductor list
# Verify conductor group configuration
# Check ironic.conf [conductor] conductor_group setting
Migration Scenarios
-------------------
**Moving nodes between conductor groups**:
.. code-block:: bash
# Move node to different conductor group
baremetal node set --conductor-group new-group <node-uuid>
**Reassigning shards**:
.. code-block:: bash
# Change node shard assignment
baremetal node set --shard new-shard <node-uuid>
# Remove shard assignment
baremetal node unset --shard <node-uuid>
.. warning::
Shards should never be changed once a nova-compute service has
identified a node in Ironic. Changing a shard at this point is
an unsupported action. As such, Ironic's API RBAC policy restricts
these actions to a "System-Scoped Admin" user. Normal Admin users
are denied this capability due the restriction and requirement
on the nova-compute side of the consumption of shards.
See Also
========
* :doc:`conductor-groups` - Detailed conductor group configuration
* :doc:`networking` - Physical network considerations
* :doc:`../install/refarch/index` - Reference architectures
* :doc:`multitenancy` - Multi-tenant deployments
* :doc:`tuning` - Performance tuning considerations
* `Nova Ironic Driver Documentation <https://github.com/openstack/nova/blob/master/doc/source/admin/configuration/hypervisor-ironic.rst>`_
* `Nova Ironic Configuration Options <https://github.com/openstack/nova/blob/master/nova/conf/ironic.py>`_

View file

@ -55,9 +55,9 @@ To retrieve the cached BIOS configuration from a specified node::
BIOS settings are cached on each node cleaning operation or when settings
have been applied successfully via BIOS cleaning steps. The return of above
command is a table of last cached BIOS settings from specified node.
If ``-f json`` is added as suffix to above command, it returns BIOS settings
as following::
command is a table of the last cached BIOS settings from the specified node.
If ``-f json`` is added as a suffix to the above command, it returns BIOS
settings as following::
[
{
@ -81,8 +81,8 @@ To get a specified BIOS setting for a node::
$ baremetal node bios setting show <node> <setting-name>
If ``-f json`` is added as suffix to above command, it returns BIOS settings
as following::
If ``-f json`` is added as a suffix to the above command, it returns BIOS
settings as following::
{
"setting name":

View file

@ -7,7 +7,7 @@ Boot From Volume
Overview
========
The Bare Metal service supports booting from a Cinder iSCSI volume as of the
Pike release. This guide will primarily deal with this use case, but will be
Pike release. This guide will primarily deal with this use case but will be
updated as more paths for booting from a volume, such as FCoE, are introduced.
The boot from volume is supported on both legacy BIOS and
@ -21,33 +21,16 @@ In essence, ironic sets the stage for the process, by providing the required
information to the boot interface to facilitate the configuration of the
the node OR the iPXE boot templates such that the node CAN be booted.
.. seqdiag::
:scale: 80
diagram {
User; API; Conductor; Storage; Boot; Network; Deploy;
activation = none;
span_height = 1;
edge_length = 250;
default_note_color = white;
default_fontsize = 14;
User -> API [label = "User or intermediate service such as nova supplies volume target configuration."];
User -> API [label = "Sends deployment request."];
API -> Conductor [label = "API transmits the action to the conductor service"];
Conductor -> Storage [label = "Conductor calls the storage_interface to perform attachment of volume to node"];
Conductor -> Boot [label = "Conductor calls the boot interface signaling preparation of an instance"];
Conductor -> Network [label = "Conductor attaches the machine to network requested by the user VIF"];
Conductor -> Deploy [label = "Conductor starts deployment steps which just turn the power on."];
}
.. figure:: ./../images/boot-from-volume.svg
:width: 100%
In this example, the boot interface does the heavy lifting. For drivers the
``irmc`` and ``ilo`` hardware types with hardware type specific boot
interfaces, they are able to signal via an out of band mechanism to the
``irmc`` and ``ilo`` hardware types with hardware type-specific boot
interfaces, they are able to signal via an out-of-band mechanism to the
baremetal node's BMC that the integrated iSCSI initiators are to connect
to the supplied volume target information.
In most hardware this would be the network cards of the machine.
In most hardware, this would be the network cards of the machine.
In the case of the ``ipxe`` boot interface, templates are created on disk
which point to the iscsi target information that was either submitted
@ -56,7 +39,7 @@ requested as the baremetal's boot from volume disk upon requesting the
instance.
In terms of network access, both interface methods require connectivity
to the iscsi target. In the vendor driver specific path, additional network
to the iscsi target. In the vendor driver-specific path, additional network
configuration options may be available to allow separation of standard
network traffic and instance network traffic. In the iPXE case, this is
not possible as the OS userspace re-configures the iSCSI connection
@ -64,7 +47,7 @@ after detection inside the OS ramdisk boot.
An iPXE user *may* be able to leverage multiple VIFs, one specifically
set to be set with ``pxe_enabled`` to handle the initial instance boot
and back-end storage traffic where as external facing network traffic
and back-end storage traffic whereas external-facing network traffic
occurs on a different interface. This is a common pattern in iSCSI
based deployments in the physical realm.
@ -86,7 +69,7 @@ Currently booting from a volume requires:
Conductor Configuration
=======================
In ironic.conf, you can specify a list of enabled storage interfaces. Check
``[DEFAULT]enabled_storage_interfaces`` in your ironic.conf to ensure that
:oslo.config:option:`DEFAULT.enabled_storage_interfaces` in your ironic.conf to ensure that
your desired interface is enabled. For example, to enable the ``cinder`` and
``noop`` storage interfaces::
@ -94,7 +77,7 @@ your desired interface is enabled. For example, to enable the ``cinder`` and
enabled_storage_interfaces = cinder,noop
If you want to specify a default storage interface rather than setting the
storage interface on a per node basis, set ``[DEFAULT]default_storage_interface``
storage interface on a per node basis, set :oslo.config:option:`DEFAULT.default_storage_interface`
in ironic.conf. The ``default_storage_interface`` will be used for any node that
doesn't have a storage interface defined.
@ -112,6 +95,14 @@ on an existing node::
A default storage interface can be specified in ironic.conf. See the
`Conductor Configuration`_ section for details.
The storage interface is responsible for managing the mapping state of the
volume to the host. If some changes need to be communicated from Cinder and
then updated for Ironic to become aware of them, such as a change in iSCSI
credentials, then the act of powering baremetal node off via Ironic's API
will trigger these values to be updated automatically as the ``cinder``
storage interface resets the volume attachments with power actions to
ensure the latest information is used for each boot sequence.
iSCSI Configuration
-------------------
In order for a bare metal node to boot from an iSCSI volume, the ``iscsi_boot``
@ -157,13 +148,13 @@ Use without the Compute Service
-------------------------------
As discussed in other sections, the Bare Metal service has a concept of a
`connector` that is used to represent an interface that is intended to
``connector`` that is used to represent an interface that is intended to
be utilized to attach the remote volume.
In addition to the connectors, we have a concept of a `target` that can be
In addition to the connectors, we have a concept of a ``target`` that can be
defined via the API. While a user of this feature through the Compute
service would automatically have a new target record created for them,
it is not explicitly required, and can be performed manually.
it is not explicitly required and can be performed manually.
A target record can be created using a command similar to the example below::
@ -193,7 +184,7 @@ the node should or could boot from a remote volume.
It must be noted that minimal configuration or value validation occurs
with the ``external`` storage interface. The ``cinder`` storage interface
contains more extensive validation, that is likely un-necessary in a
contains more extensive validation, that is likely unnecessary in a
``external`` scenario.
Setting the external storage interface::
@ -245,7 +236,7 @@ contain support for multi-attach volumes.
When support for storage interfaces was added to the Bare Metal service,
specifically for the ``cinder`` storage interface, the concept of volume
multi-attach was accounted for, however has not been fully tested,
and is unlikely to be fully tested until there is Compute service integration
and is unlikely to be fully tested until there is a Compute service integration
as well as volume driver support.
The data model for storage of volume targets in the Bare Metal service

View file

@ -4,7 +4,7 @@ Building images for Windows
---------------------------
We can use ``New-WindowsOnlineImage`` in `windows-openstack-imaging-tools`_
tool as an option to create Windows images (whole disk images) corresponding
boot modes which will support for Windows NIC Teaming. And allow the
boot modes which will support Windows NIC Teaming. And allow the
utilization of link aggregation when the instance is spawned on hardware
servers (Bare metals).
@ -16,27 +16,26 @@ Requirements:
``PowerShell`` version >=4 supported,
``Windows Assessment and Deployment Kit``,
in short ``Windows ADK``.
* The windows Server compatible drivers.
* The Windows Server compatible drivers.
* Working git environment.
Preparation:
~~~~~~~~~~~~
* Download a Windows Server 2012R2/ 2016 installation ISO.
* Install Windows Server 2012R2/ 2016 OS on workstation PC along with
* Install Windows Server 2012R2/ 2016 OS on the workstation PC along with
following feature:
- Enable Hyper-V virtualization.
- Install PowerShell 4.0.
- Install Git environment & import git proxy (if have).
- Create new ``Path`` in Microsoft Windows Server Operating System which
- Install Git environment & import git proxy (if you have).
- Create a new ``Path`` in the Microsoft Windows Server Operating System which
support for submodule update via ``git submodule update init`` command::
- Variable name: Path
- Variable value: C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Git\bin
- Rename virtual switch name in Windows Server 2012R2/ 2016 in
``Virtual Switch Manager`` into `external`.
- Rename the virtual switch name in Windows Server 2012R2/ 2016 in
``Virtual Switch Manager`` into ``external``.
Implementation:
~~~~~~~~~~~~~~~
@ -56,7 +55,7 @@ Implementation:
git clone https://github.com/cloudbase/windows-openstack-imaging-tools.git
* ``Step 5``: Create & running script `create-windows-cloud-image.ps1`:
* ``Step 5``: Create & running script ``create-windows-cloud-image.ps1``:
.. code-block:: console
@ -85,7 +84,7 @@ Implementation:
.. note::
We can change ``SizeBytes``, ``CpuCores`` and ``Memory`` depending on requirements.
We can change ``SizeBytes``, ``CpuCores``, and ``Memory`` depending on requirements.
.. _`example_windows_images`: https://github.com/cloudbase/windows-openstack-imaging-tools/blob/master/Examples
.. _`windows-openstack-imaging-tools`: https://github.com/cloudbase/windows-openstack-imaging-tools

View file

@ -1,3 +1,10 @@
.. meta::
:description: Automated cleaning and preparation of bare metal nodes in Ironic. Security wiping, hardware configuration, and node lifecycle management.
:keywords: node cleaning, automated cleaning, security wiping, hardware preparation, node lifecycle, tenant isolation, data security
:author: OpenStack Ironic Team
:robots: index, follow
:audience: security engineers, system administrators
.. _cleaning:
=============
@ -20,16 +27,10 @@ one workload to another.
Automated cleaning
==================
When hardware is recycled from one workload to another, ironic performs
When hardware is recycled from one workload to another, Ironic performs
automated cleaning on the node to ensure it's ready for another workload. This
ensures the tenant will get a consistent bare metal node deployed every time.
Ironic implements automated cleaning by collecting a list of cleaning steps
to perform on a node from the Power, Deploy, Management, BIOS, and RAID
interfaces of the driver assigned to the node. These steps are then ordered by
priority and executed on the node when the node is moved to ``cleaning`` state,
if automated cleaning is enabled.
With automated cleaning, nodes move to ``cleaning`` state when moving from
``active`` -> ``available`` state (when the hardware is recycled from one
workload to another). Nodes also traverse cleaning when going from
@ -37,7 +38,6 @@ workload to another). Nodes also traverse cleaning when going from
assigned to the nodes). For a full understanding of all state transitions
into cleaning, please see :ref:`states`.
Ironic added support for automated cleaning in the Kilo release.
.. _enabling-cleaning:
@ -52,7 +52,7 @@ To enable automated cleaning, ensure that your ironic.conf is set as follows:
automated_clean=true
This will enable the default set of cleaning steps, based on your hardware and
ironic hardware types used for nodes. This includes, by default, erasing all
Ironic hardware types used for nodes. This includes, by default, erasing all
of the previous tenant's data.
You may also need to configure a `Cleaning Network`_.
@ -60,72 +60,231 @@ You may also need to configure a `Cleaning Network`_.
Cleaning steps
--------------
Cleaning steps used for automated cleaning are ordered from higher to lower
priority, where a larger integer is a higher priority. In case of a conflict
between priorities across interfaces, the following resolution order is used:
Power, Management, Deploy, BIOS, and RAID interfaces.
The way cleaning steps are determined depends on the value of
:oslo.config:option:`conductor.automated_cleaning_step_source`:
You can skip a cleaning step by setting the priority for that cleaning step
to zero or 'None'.
**Autogenerated cleaning steps** ('autogenerated')
This is the default mode of Ironic automated cleaning and provides the
original Ironic behavior implemented originally in Kilo.
You can reorder the cleaning steps by modifying the integer priorities of the
cleaning steps.
Steps are collected from hardware interfaces and ordered from higher to
lower priority, where a larger integer is a higher priority. In case of
a conflict between priorities across interfaces, the following resolution
order is used: Power, Management, Deploy, BIOS, and RAID interfaces.
See `How do I change the priority of a cleaning step?`_ for more information.
You can skip a cleaning step by setting the priority for that cleaning
step to zero or ``None``. You can reorder the cleaning steps by modifying
the integer priorities of the cleaning steps.
**Runbook-based cleaning steps** ('runbook')
When using :ref:`runbooks` for automated cleaning, the exact steps and
their order are defined in the runbook. Priority-based ordering does not
apply; steps execute in the order specified in the runbook.
If there is not a runbook assigned to perform cleaning on the node, and
automated_cleaning is enabled, the machine will fail to clean and go into
a ``clean failed`` state.
**Hybrid** ('hybrid')
This uses a runbook-based cleaning method if a cleaning runbook is
configured for the node being cleaned. In this mode, if there is not a
runbook configured for cleaning Ironic will fall-back to autogenerating
cleaning steps.
See `How do I change the priority of a cleaning step?`_ for more information on
changing the priority of an autogenerated cleaning step.
See :ref:`runbook-cleaning` for full details on configuring cleaning
runbooks.
Storage cleaning options
------------------------
.. warning::
Ironic's storage cleaning options by default will remove data from the disk
permanently during automated cleaning.
Clean steps specific to storage are ``erase_devices``,
``erase_devices_metadata`` and (added in Yoga) ``erase_devices_express``.
``erase_devices`` aims to ensure that the data is removed in the most secure
way available. On devices that support hardware assisted secure erasure
(many NVMe and some ATA drives) this is the preferred option. If
way available. On devices that support hardware-assisted secure erasure
(many NVMe and some ATA drives), this is the preferred option. If
hardware-assisted secure erasure is not available and if
``[deploy]/continue_if_disk_secure_erase_fails`` is set to ``True``, cleaning
will fall back to using ``shred`` to overwrite the contents of the device.
Otherwise cleaning will fail. It is important to note that ``erase_devices``
may take a very long time (hours or even days) to complete, unless fast,
hardware assisted data erasure is supported by all the devices in a system.
Generally, it is very difficult (if possible at all) to recover data after
performing cleaning with ``erase_devices``.
:oslo.config:option:`deploy.continue_if_disk_secure_erase_fails` is set to
``True``, cleaning will fall back to using ``shred`` to overwrite the
contents of the device. By default, if ``erase_devices`` is enabled
and Ironic is unable to erase the device, cleaning will fail to ensure
data security.
.. note::
``erase_devices`` may take a very long time (hours or even days) to
complete, unless fast, hardware-assisted data erasure is supported by
all the devices in a system.
``erase_devices_metadata`` clean step doesn't provide as strong assurance
of irreversible destruction of data as ``erase_devices``. However, it has the
advantage of a reasonably quick runtime (seconds to minutes). It operates by
destroying metadata of the storage device without erasing every bit of the
data itself. Attempts of restoring data after running
destroying the metadata of the storage device without erasing every bit of the
data itself. Attempts to restore data after running
``erase_devices_metadata`` may be successful but would certainly require
relevant expertise and specialized tools.
Lastly, ``erase_devices_express`` combines some of the perks of both
``erase_devices`` and ``erase_devices_metadata``. It attempts to utilize
hardware assisted data erasure features if available (currently only NVMe
devices are supported). In case hardware-asssisted data erasure is not
hardware-assisted data erasure features if available (currently only NVMe
devices are supported). In case hardware-assisted data erasure is not
available, it falls back to metadata erasure for the device (which is
identical to ``erase_devices_metadata``). It can be considered a
time optimized mode of storage cleaning, aiming to perform as thorough
time-optimized mode of storage cleaning, aiming to perform as thorough
data erasure as it is possible within a short period of time.
This clean step is particularly well suited for environments with hybrid
NVMe-HDD storage configuration as it allows fast and secure erasure of data
stored on NVMes combined with equally fast but more basic metadata-based
erasure of data on HDDs.
``erase_devices_express`` is disabled by default. In order to use it, the
following configuration is recommended.
erasure of data on commodity HDDs.
By default, Ironic will use ``erase_devices_metadata`` early in cleaning
for reliability (ensuring a node cannot reboot into its old workload) and
``erase_devices`` later in cleaning to securely erase the drive;
``erase_devices_express`` is disabled.
Operators can use :oslo.config:option:`deploy.erase_devices_priority` and
:oslo.config:option:`deploy.erase_devices_metadata_priority` to change the
priorities of the default device erase methods or disable them entirely
by setting ``0``. Other cleaning steps can have their priority modified
via the :oslo.config:option:`conductor.clean_step_priority_override` option.
For example, the configuration snippet below disables
``erase_devices_metadata`` and ``erase_devices`` and instead performs an
``erase_devices_express`` erase step.
.. code-block:: ini
[deploy]/erase_devices_priority=0
[deploy]/erase_devices_metadata_priority=0
[conductor]/clean_step_priority_override=deploy.erase_devices_express:5
[deploy]
erase_devices_priority=0
erase_devices_metadata_priority=0
[conductor]
clean_step_priority_override=deploy.erase_devices_express:95
This ensures that ``erase_devices`` and ``erase_devices_metadata`` are
disabled so that storage is not cleaned twice and then assigns a non-zero
priority to ``erase_devices_express``, hence enabling it. Any non-zero
priority specified in the priority override will work.
priority specified in the priority override will work; larger values will
cause the disk erasure to run earlier in the cleaning process if multiple
steps are enabled.
Other configurations that can modify how Ironic erases disks are below.
This list may not be comprehensive. Please review ironic.conf.sample
(linked) for more details:
* :oslo.config:option:`deploy.enable_ata_secure_erase`, default ``True``
* :oslo.config:option:`deploy.enable_nvme_secure_erase`, default ``True``
* :oslo.config:option:`deploy.shred_random_overwrite_iterations`, default ``1``
* :oslo.config:option:`deploy.shred_final_overwrite_with_zeros`, default ``True``
* :oslo.config:option:`deploy.disk_erasure_concurrency`, default ``4``
.. warning::
Ironic automated cleaning is defaulted to a secure configuration. You should
not modify settings related to it unless you have special hardware needs
or a unique use case. Misconfigurations can lead to data exposure
vulnerabilities.
.. _runbook-cleaning:
Configuring automated cleaning with runbooks
--------------------------------------------
Starting with the 2025.2/Flamingo release, operators can configure Ironic to
use runbooks for automated cleaning instead of relying on autogenerated steps.
This provides more control over the cleaning process and ensures consistency
across nodes.
.. warning::
When using runbooks for automated cleaning, ensure they include appropriate
security measures such as disk erasure. Ironic does not validate that a
runbook performs disk cleaning operations or any other specific cleaning
step.
**Trait matching**
As always with runbooks, you must have a trait on the node which matches the
runbook name. This allows a fail-safe to prevent dangerous, hardware-specific
cleaning steps from running on incompatible hardware.
You can disable this check by setting
:oslo.config:option:`conductor.automated_cleaning_runbook_validate_traits` to
False.
.. code-block:: bash
openstack baremetal node add trait myNode CUSTOM_RB_EXAMPLE
**Configure cleaning runbooks**
Runbooks can be configured at three levels (from most to least specific):
1. **Per-node**:
Operators can set a per-node cleaning runbook override using the following
command:
.. code-block:: bash
openstack baremetal node set myNode --driver-info cleaning_runbook=CUSTOM_RB_EXAMPLE
.. warning::
Customizing cleaning per node requires setting
:oslo.config:option:`conductor.automated_cleaning_runbook_from_node`
to True.
Enabling node-level runbooks allows node owners to override cleaning
behavior via use a noop runbook. Only enable this in trusted
environments.
2. **Per-resource-class**:
Operators can set a runbook per resource_class using
:oslo.config:option:`conductor.automated_cleaning_runbook_by_resource_class`
to build a list of mappings of resource_class to runbook. These runbooks are
used to clean any node in that resource class that do not have a node-level
override.
In this example, the large resource_class uses ``CUSTOM_FULL_CLEAN`` and the
small resource_class uses ``CUSTOM_QUICK_CLEAN``. Nodes in those resource
classes would still be required to have traits matching the runbook name.
.. code-block:: ini
[conductor]
automated_cleaning_runbook_by_resource_class = large:CUSTOM_FULL_CLEAN,small:CUSTOM_QUICK_CLEAN
3. **Global default**:
Operators can also configure a global default, which is used for nodes which
do not already have a more specific runbook configured, such as node-level
overrides or a resource_class mapping.
In this example, any node cleaned in the environment would use
``CUSTOM_DEFAULT_CLEAN``. Unless trait mapping is disabled, all nodes would
be required to have a trait also named ``CUSTOM_DEFAULT_CLEAN`` to
successfully clean.
.. code-block:: ini
[conductor]
automated_cleaning_runbook = CUSTOM_DEFAULT_CLEAN
**Create and assign runbooks**
Create a runbook with the necessary cleaning steps::
baremetal runbook create --name CUSTOM_SECURE_ERASE \
--steps '[{"interface": "deploy", "step": "erase_devices", "args": {}, "order": 0}]'
Ensure nodes have the matching trait::
baremetal node add trait <node> CUSTOM_SECURE_ERASE
Also `[deploy]/enable_nvme_secure_erase` should not be disabled (it is on by default).
.. show-steps::
:phase: cleaning
@ -135,7 +294,7 @@ Also `[deploy]/enable_nvme_secure_erase` should not be disabled (it is on by def
Manual cleaning
===============
``Manual cleaning`` is typically used to handle long running, manual, or
``Manual cleaning`` is typically used to handle long-running, manual, or
destructive tasks that an operator wishes to perform either before the first
workload has been assigned to a node or between workloads. When initiating a
manual clean, the operator specifies the cleaning steps to be performed.
@ -172,13 +331,13 @@ dictionary (JSON), in the form::
{
"interface": "<interface>",
"step": "<name of cleaning step>",
"args": {"<arg1>": "<value1>", ..., "<argn>": <valuen>}
"args": {"<arg1>": "<value1>", ..., "<argn>": "<valuen>"}
}
The 'interface' and 'step' keys are required for all steps. If a cleaning step
method takes keyword arguments, the 'args' key may be specified. It
is a dictionary of keyword variable arguments, with each keyword-argument entry
being <name>: <value>.
being ``<name>: <value>``.
If any step is missing a required keyword argument, manual cleaning will not be
performed and the node will be put in ``clean failed`` provision state with an
@ -208,7 +367,31 @@ In the above example, the node's RAID interface would configure hardware
RAID without non-root volumes, and then all devices would be erased
(in that order).
Starting manual cleaning via "openstack metal" CLI
An example is setting the BMC clock using the Redfish management interface::
{
"target": "clean",
"clean_steps": [{
"interface": "management",
"step": "set_bmc_clock",
"args": {"target_datetime": "2025-07-22T12:34:56+00:00"}
}]
}
This step requires the node to use the ``redfish`` management interface
and that the Redfish service exposes the ``DateTime`` and ``DateTimeLocalOffset``
fields under the Manager Resource.
Alternatively, you can specify a runbook instead of clean_steps::
{
"target":"clean",
"runbook": "<runbook_name_or_uuid>"
}
The specified runbook must match one of the node's traits to be used.
Starting manual cleaning via "openstack baremetal" CLI
------------------------------------------------------
Manual cleaning is available via the ``baremetal node clean``
@ -218,7 +401,7 @@ The argument ``--clean-steps`` must be specified. Its value is one of:
- a JSON string
- path to a JSON file whose contents are passed to the API
- '-', to read from stdin. This allows piping in the clean steps.
- ``-`` to read from stdin. This allows piping in the clean steps.
Using '-' to signify stdin is common in Unix utilities.
The following examples assume that the Bare Metal API version was set via
@ -245,6 +428,22 @@ Or with stdin::
cat my-clean-steps.txt | baremetal node clean <node> \
--clean-steps -
Runbooks for Manual Cleaning
----------------------------
Instead of passing a list of clean steps, operators can now use runbooks.
Runbooks are curated lists of steps that can be associated with nodes via
traits which simplifies the process of performing consistent cleaning
operations across similar nodes.
To use a runbook for manual cleaning::
baremetal node clean <node> --runbook <runbook_name_or_uuid>
Runbooks must be created and associated with nodes beforehand. Only runbooks
that match the node's traits can be used for cleaning that node.
For more information on the runbook API usage, see :ref:`runbooks`.
Cleaning Network
================
@ -263,7 +462,7 @@ out-of-band. Ironic supports using both methods to clean a node.
In-band
-------
In-band steps are performed by ironic making API calls to a ramdisk running
In-band steps are performed by Ironic making API calls to a ramdisk running
on the node using a deploy interface. Currently, all the deploy interfaces
support in-band cleaning. By default, ironic-python-agent ships with a minimal
cleaning configuration, only erasing disks. However, you can add your own
@ -273,7 +472,7 @@ Hardware Manager.
Out-of-band
-----------
Out-of-band are actions performed by your management controller, such as IPMI,
iLO, or DRAC. Out-of-band steps will be performed by ironic using a power or
iLO, or DRAC. Out-of-band steps will be performed by Ironic using a power or
management interface. Which steps are performed depends on the hardware type
and hardware itself.
@ -300,12 +499,14 @@ order.
How do I skip a cleaning step?
------------------------------
For automated cleaning, cleaning steps with a priority of 0 or None are skipped.
For automated cleaning, cleaning steps with a priority of zero or ``None`` are skipped.
.. _clean_step_priority:
How do I change the priority of a cleaning step?
------------------------------------------------
For manual cleaning, specify the cleaning steps in the desired order.
For manual cleaning, or runbook-based cleaning, specify the cleaning steps in
the desired order.
For automated cleaning, it depends on whether the cleaning steps are
out-of-band or in-band.
@ -314,46 +515,9 @@ Most out-of-band cleaning steps have an explicit configuration option for
priority.
Changing the priority of an in-band (ironic-python-agent) cleaning step
requires use of a custom HardwareManager. The only exception is
``erase_devices``, which can have its priority set in ironic.conf. For instance,
to disable erase_devices, you'd set the following configuration option::
[deploy]
erase_devices_priority=0
To enable/disable the in-band disk erase using ``ilo`` hardware type, use the
following configuration option::
[ilo]
clean_priority_erase_devices=0
The generic hardware manager first identifies whether a device is an NVMe
drive or an ATA drive so that it can attempt a platform-specific secure erase
method. In case of NVMe drives, it tries to perform a secure format operation
by using the ``nvme-cli`` utility. This behavior can be controlled using
the following configuration option (by default it is set to True)::
[deploy]
enable_nvme_secure_erase=True
In case of ATA drives, it tries to perform ATA disk erase by using the
``hdparm`` utility.
If neither method is supported, it performs software based disk erase using
the ``shred`` utility. By default, the number of iterations performed
by ``shred`` for software based disk erase is 1. To configure the number of
iterations, use the following configuration option::
[deploy]
erase_devices_iterations=1
Overriding step priority
------------------------
``[conductor]clean_step_priority_override`` is a new configuration option
which allows specifying priority of each step using multiple configuration
values:
requires use of :oslo.config:option:`conductor.clean_step_priority_override`,
a configuration option that allows specifying the priority of each step using
multiple configuration values:
.. code-block:: ini
@ -379,8 +543,8 @@ the node failed before going into ``clean failed`` state.
Should I disable automated cleaning?
------------------------------------
Automated cleaning is recommended for ironic deployments, however, there are
some tradeoffs to having it enabled. For instance, ironic cannot deploy a new
Automated cleaning is recommended for Ironic deployments, however, there are
some tradeoffs to having it enabled. For instance, Ironic cannot deploy a new
instance to a node that is currently cleaning, and cleaning can be a time
consuming process. To mitigate this, we suggest using NVMe drives with support
for NVMe Secure Erase (based on ``nvme-cli`` format command) or ATA drives
@ -392,7 +556,7 @@ Why can't I power on/off a node while it's cleaning?
----------------------------------------------------
During cleaning, nodes may be performing actions that shouldn't be
interrupted, such as BIOS or Firmware updates. As a result, operators are
forbidden from changing power state via the ironic API while a node is
forbidden from changing the power state via the Ironic API while a node is
cleaning.
Advanced topics
@ -407,16 +571,20 @@ account child nodes. Mainly, the concept of executing clean steps in relation
to child nodes.
In this context, a child node is primarily intended to be an embedded device
with it's own management controller. For example "SmartNIC's" or Data
with its own management controller. For example "SmartNIC's" or Data
Processing Units (DPUs) which may have their own management controller and
power control.
The relationship between a parent node and a child node is established on the child node. Example::
baremetal node set --parent-node <parent_node_uuid> <child_node_uuid>
Child Node Clean Step Execution
-------------------------------
You can execute steps which perform actions on child nodes. For example,
You can execute steps that perform actions on child nodes. For example,
turn them on (via step ``power_on``), off (via step ``power_off``), or to
signal a BMC controlled reboot (via step ``reboot``).
signal a BMC-controlled reboot (via step ``reboot``).
For example, if you need to explicitly power off child node power, before
performing another step, you can articulate it with a step such as::
@ -441,20 +609,37 @@ power will be turned off via the management interface. Afterwards, the
While the deployment step framework also supports the
``execute_on_child_nodes`` and ``limit_child_node_execution`` parameters,
all of the step frameworks have a fundamental limitation in that child node
step execution is indended for syncronous actions which do not rely upon
step execution is intended for synchronous actions which do not rely upon
the ``ironic-python-agent`` running on any child nodes. This constraint may
be changed in the future.
Power Management with Child Nodes
---------------------------------
The mix of child nodes and parent nodes has special power considerations,
and these devices are evolving in the industry. That being said, the Ironic
project has taken an approach of explicitly attempting to "power on" any
parent node when a request comes in to "power on" a child node. This can be
bypassed by setting a ``driver_info`` parameter ``has_dedicated_power_supply``
set to ``True``, in recognition that some hardware vendors are working on
supplying independent power to these classes of devices to meet their customer
use cases.
Similarly to the case of a "power on" request for a child node, when power
is requested to be turned off for a "parent node", Ironic will issue
"power off" commands for all child nodes unless the child node has the
``has_dedicated_power_supply`` option set in the node's ``driver_info`` field.
Troubleshooting
===============
If cleaning fails on a node, the node will be put into ``clean failed`` state.
If the failure happens while running a clean step, the node is also placed in
maintenance mode to prevent ironic from taking actions on the node. The
maintenance mode to prevent Ironic from taking actions on the node. The
operator should validate that no permanent damage has been done to the
node and no processes are still running on it before removing the maintenance
mode.
node and that no processes are still running on it before removing the
maintenance mode.
.. note:: Older versions of ironic may put the node to maintenance even when
.. note:: Older versions of Ironic may put the node to maintenance even when
no clean step has been running.
Nodes in ``clean failed`` will not be powered off, as the node might be in a
@ -462,7 +647,7 @@ state such that powering it off could damage the node or remove useful
information about the nature of the cleaning failure.
A ``clean failed`` node can be moved to ``manageable`` state, where it cannot
be scheduled by nova and you can safely attempt to fix the node. To move a node
be scheduled by Nova and you can safely attempt to fix the node. To move a node
from ``clean failed`` to ``manageable``::
baremetal node manage $node_ident
@ -470,19 +655,19 @@ from ``clean failed`` to ``manageable``::
You can now take actions on the node, such as replacing a bad disk drive.
Strategies for determining why a cleaning step failed include checking the
ironic conductor logs, viewing logs on the still-running ironic-python-agent
Ironic conductor logs, viewing logs on the still-running ironic-python-agent
(if an in-band step failed), or performing general hardware troubleshooting on
the node.
When the node is repaired, you can move the node back to ``available`` state,
to allow it to be scheduled by nova.
to allow it to be scheduled by Nova.
::
# First, move it out of maintenance mode
baremetal node maintenance unset $node_ident
# Now, make the node available for scheduling by nova
# Now, make the node available for scheduling by Nova
baremetal node provide $node_ident
The node will begin automated cleaning from the start, and move to

View file

@ -4,16 +4,25 @@
Conductor Groups
================
.. seealso::
For a complete guide on achieving availability zone functionality,
see :doc:`availability-zones`.
Overview
========
Large scale operators tend to have needs that involve creating
well defined and delinated resources. In some cases, these systems
may reside close by or in far away locations. Reasoning may be simple
Conductor groups provide **physical resource partitioning** in Ironic,
similar to Nova's availability zones but focused on conductor-level management.
They work alongside :ref:`shards <availability-zones-shards>` to provide
complete resource isolation and operational scaling capabilities.
Large-scale operators tend to have needs that involve creating
well-defined and delineated resources. In some cases, these systems
may reside close by or in faraway locations. The reasoning may be simple
or complex, and yet is only known to the deployer and operator of the
infrastructure.
A common case is the need for delineated high availability domains
A common case is the need for delineated high-availability domains
where it would be much more efficient to manage a datacenter in Antarctica
with a conductor in Antarctica, as opposed to a conductor in New York City.
@ -24,12 +33,12 @@ Starting in ironic 11.1, each node has a ``conductor_group`` field which
influences how the ironic conductor calculates (and thus allocates)
baremetal nodes under ironic's management. This calculation is performed
independently by each operating conductor and as such if a conductor has
a ``[conductor]conductor_group`` configuration option defined in its
`ironic.conf` configuration file, the conductor will then be limited to
a :oslo.config:option:`conductor.conductor_group` configuration option defined in its
``ironic.conf`` configuration file, the conductor will then be limited to
only managing nodes with a matching ``conductor_group`` string.
.. note::
Any conductor without a ``[conductor]conductor_group`` setting will
Any conductor without a :oslo.config:option:`conductor.conductor_group` setting will
only manage baremetal nodes without a ``conductor_group`` value set upon
node creation. If no such conductor is present when conductor groups are
configured, node creation will fail unless a ``conductor_group`` is
@ -37,18 +46,18 @@ only managing nodes with a matching ``conductor_group`` string.
.. warning::
Nodes without a ``conductor_group`` setting can only be managed when a
conductor exists that does not have a ``[conductor]conductor_group``
conductor exists that does not have a :oslo.config:option:`conductor.conductor_group`
defined. If all conductors have been migrated to use a conductor group,
such nodes are effectively "orphaned".
How to use
==========
A conductor group value may be any case insensitive string up to 255
A conductor group value may be any case-insensitive string up to 255
characters long which matches the ``^[a-zA-Z0-9_\-\.]*$`` regular
expression.
#. Set the ``[conductor]conductor_group`` option in ironic.conf
#. Set the :oslo.config:option:`conductor.conductor_group` option in ironic.conf
on one or more, but not all conductors::
[conductor]
@ -61,6 +70,21 @@ expression.
baremetal node set \
--conductor-group "OperatorDefinedString" <uuid>
#. As desired and as needed, remaining conductors can be updated with
#. As desired and as needed, the remaining conductors can be updated with
the first two steps. Please be mindful of the constraints covered
earlier in the document related to ability to manage nodes.
earlier in the document related to the ability to manage nodes.
Advanced Usage with Multiple Deployments
=========================================
Conductor groups work within a single Ironic deployment. For complete
service isolation across geographic regions or regulatory boundaries,
consider using :ref:`multiple Ironic deployments <availability-zones:Tier 1: Multiple Ironic Deployments>`
targeted by different Nova compute services.
See Also
========
* :doc:`availability-zones` - Complete availability zone strategy
* :doc:`networking` - Physical network considerations
* :doc:`../install/refarch/index` - Reference architectures

View file

@ -1,15 +1,55 @@
.. _console:
=================================
Configuring Web or Serial Console
=================================
====================
Configuring Consoles
====================
Overview
--------
There are two types of console which are available in Bare Metal service,
one is web console (`Node web console`_) which is available directly from web
browser, another is serial console (`Node serial console`_).
There are three types of consoles which are available in Bare Metal service:
* (`Node graphical console`_) for a graphical console from a NoVNC web browser
* (`Node web console`_) a terminal available from a web browser
* (`Node serial console`_) for serial console support
Node graphical console
----------------------
Graphical console drivers require a configured and running ``ironic-novncproxy``
service. Each supported driver is described below.
redfish-graphical
~~~~~~~~~~~~~~~~~
A driver for a subset of Redfish hosts. Starting the console will start a
container which exposes a VNC server for ``ironic-novncproxy`` to attach to.
When attached, a browser will start which displays an HTML5 based console on
the following supported hosts:
* Dell iDRAC
* HPE iLO
* Supermicro
.. code-block:: ini
[DEFAULT]
enabled_hardware_types = redfish
enabled_console_interfaces = redfish-graphical,no-console
fake-graphical
~~~~~~~~~~~~~~~~~
A driver for demonstrating working graphical console infrastructure. Starting
the console will start a container which exposes a VNC server for
``ironic-novncproxy`` to attach to. When attached, a browser will start which
displays an animation.
.. code-block:: ini
[DEFAULT]
enabled_hardware_types = fake-hardware
enabled_console_interfaces = fake-graphical,no-console
Node web console
----------------
@ -17,15 +57,17 @@ Node web console
The web console can be configured in Bare Metal service in the following way:
* Install shellinabox in ironic conductor node. For RHEL/CentOS, shellinabox package
is not present in base repositories, user must enable EPEL repository, you can find
more from `FedoraProject page`_.
is not present in base repositories, the user must enable EPEL repository, you can
find more from `FedoraProject page`_.
.. note::
.. warning::
shellinabox is no longer maintained by the authorized author.
`This <https://github.com/shellinabox/shellinabox>`_ is a fork of the
project on GitHub that aims to continue with maintenance of the
shellinabox project.
Shell In A Box is considered abandoned by the Ironic community. The
original maintainer stopped maintaining the project and the project
was thus forked. The resulting
`fork <https://github.com/shellinabox/shellinabox>`_ has not received
updates in a number of years and is considered abandoned.
As such, shellinabox support has been deprecated by the Ironic community.
Installation example:
@ -33,7 +75,7 @@ The web console can be configured in Bare Metal service in the following way:
sudo apt-get install shellinabox
RHEL8/CentOS8/Fedora::
RHEL/CentOS/Fedora::
sudo dnf install shellinabox
@ -48,7 +90,7 @@ The web console can be configured in Bare Metal service in the following way:
sudo apt-get install openssl
RHEL8/CentOS8/Fedora::
RHEL/CentOS/Fedora::
sudo dnf install openssl
@ -66,7 +108,7 @@ The web console can be configured in Bare Metal service in the following way:
* Customize the console section in the Bare Metal service configuration
file (/etc/ironic/ironic.conf), if you want to use SSL certificate in
shellinabox, you should specify ``terminal_cert_dir``.
for example::
For example::
[console]
@ -147,9 +189,9 @@ The web console can be configured in Bare Metal service in the following way:
| console_info | {u'url': u'http://<url>:<customized_port>', u'type': u'shellinabox'} |
+-----------------+----------------------------------------------------------------------+
You can open web console using above ``url`` through web browser. If ``console_enabled`` is
``false``, ``console_info`` is ``None``, web console is disabled. If you want to launch web
console, see the ``Configure node web console`` part.
You can open the web console using the above ``url`` through web browser. If
``console_enabled`` is ``false``, ``console_info`` is ``None``, web console is disabled.
If you want to launch the web console, see the ``Configure node web console`` part.
.. note::
@ -171,7 +213,12 @@ Node serial console
-------------------
Serial consoles for nodes are implemented using `socat`_. It is supported by
the ``ipmi`` and ``irmc`` hardware types.
the ``ipmi``, ``irmc``, and ``redfish`` hardware types.
.. NOTE::
The use of the ``ipmitool-socat`` console interface on any hardware type
requires the ipmi connection parameters to be set into the ``driver_info``
filed on the node.
Serial consoles can be configured in the Bare Metal service as follows:
@ -184,7 +231,7 @@ Serial consoles can be configured in the Bare Metal service as follows:
sudo apt-get install socat
RHEL8/CentOS8/Fedora::
RHEL/CentOS/Fedora::
sudo dnf install socat
@ -235,7 +282,7 @@ If ``console_enabled`` is ``false`` or ``console_info`` is ``None`` then
the serial console is disabled. If you want to launch serial console, see the
``Configure node console``.
Node serial console of the Bare Metal service is compatible with the
The node serial console of the Bare Metal service is compatible with the
serial console of the Compute service. Hence, serial consoles to
Bare Metal nodes can be seen and interacted with via the Dashboard service.
In order to achieve that, you need to follow the documentation for
@ -269,7 +316,7 @@ configuration, you may consider some settings below.
* The Compute service's caching feature may need to be enabled in order
to make the Bare Metal serial console work under a HA configuration.
Here is an example of caching configuration in ``nova.conf``.
Here is an example of a caching configuration in ``nova.conf``.
.. code-block:: ini

View file

@ -0,0 +1,8 @@
Dashboard Integration
---------------------
A plugin for the OpenStack Dashboard (horizon) service is under development.
Documentation for that can be found within the ironic-ui project.
* :ironic-ui-doc:`Dashboard (horizon) plugin <>`

View file

@ -4,7 +4,7 @@ Layer 3 or DHCP-less ramdisk booting
Booting nodes via PXE, while universally supported, suffers from one
disadvantage: it requires a direct L2 connectivity between the node and the
control plane for DHCP. Using virtual media it is possible to avoid not only
the unreliable TFTP protocol, but DHCP altogether.
the unreliable TFTP protocol but DHCP altogether.
When network data is provided for a node as explained below, the generated
virtual media ISO will also serve as a configdrive_, and the network data will
@ -42,8 +42,8 @@ When the Bare Metal service is running within OpenStack, no additional
configuration is required - the network configuration will be fetched from the
Network service.
Alternatively, the user can build and pass network configuration in form of
a network_data_ JSON to a node via the ``network_data`` field. Node-based
Alternatively, the user can build and pass network configuration in the form
of a network_data_ JSON to a node via the ``network_data`` field. Node-based
configuration takes precedence over the configuration generated by the
Network service and also works in standalone mode.
@ -79,7 +79,7 @@ An example network data:
.. note::
Some fields are redundant with the port information. We're looking into
simplifying the format, but currently all these fields are mandatory.
simplifying the format, but currently, all these fields are mandatory.
You'll need the deployed image to support network data, e.g. by pre-installing
cloud-init_ or Glean_ on it (most cloud images have the former). Then you can
@ -131,7 +131,7 @@ the service catalog or configured in the ``[service_catalog]`` section:
In case you need specific URLs for each node, you can use the
``driver_info[external_http_url]`` node property. When used it overrides the
``[deploy]http_url`` and ``[deploy]external_http_url`` settings in the
:oslo.config:option:`deploy.http_url` and :oslo.config:option:`deploy.external_http_url` settings in the
configuration file.
.. code-block:: bash

View file

@ -1,6 +1,13 @@
===============================================
Drivers, Hardware Types and Hardware Interfaces
===============================================
.. meta::
:description: Comprehensive guide to Ironic hardware drivers and interfaces. Configure support for IPMI, Redfish, vendor-specific management, and hardware types.
:keywords: ironic drivers, hardware interfaces, IPMI, redfish, hardware management, vendor drivers, boot interfaces, power management
:author: OpenStack Ironic Team
:robots: index, follow
:audience: system administrators, hardware engineers
===========================================================
Drivers, Hardware Types, and Hardware Interfaces for Ironic
===========================================================
Generic Interfaces
------------------
@ -17,7 +24,6 @@ Hardware Types
.. toctree::
:maxdepth: 1
drivers/ibmc
drivers/idrac
drivers/ilo
drivers/intel-ipmi
@ -25,7 +31,6 @@ Hardware Types
drivers/irmc
drivers/redfish
drivers/snmp
drivers/xclarity
drivers/fake
Changing Hardware Types and Interfaces
@ -42,7 +47,7 @@ Any hardware interfaces can be specified on enrollment as well::
baremetal node create --driver <hardware type> \
--deploy-interface direct --<other>-interface <other implementation>
For the remaining interfaces the default value is assigned as described in
For the remaining interfaces, the default value is assigned as described in
:ref:`hardware_interfaces_defaults`. Both the hardware type and the hardware
interfaces can be changed later via the node update API.
@ -71,7 +76,7 @@ not work::
This is because the ``fake-hardware`` hardware type defaults to ``fake``
implementations for some or all interfaces, but the ``ipmi`` hardware type is
not compatible with them. There are three ways to deal with this situation:
incompatible with them. There are three ways to deal with this situation:
#. Provide new values for all incompatible interfaces, for example::
@ -90,9 +95,6 @@ not compatible with them. There are three ways to deal with this situation:
--reset-management-interface \
--reset-power-interface
.. note:: This feature is available starting with ironic 11.1.0 (Rocky
series, API version 1.45).
#. Request resetting all interfaces to their new defaults::
baremetal node set test --driver ipmi --reset-interfaces
@ -102,9 +104,6 @@ not compatible with them. There are three ways to deal with this situation:
baremetal node set test --driver ipmi --reset-interfaces \
--deploy-interface direct
.. note:: This feature is available starting with ironic 11.1.0 (Rocky
series, API version 1.45).
.. _static-boot-order:
Static boot order configuration
@ -116,7 +115,7 @@ implementation with the ``ipmi`` and ``redfish`` hardware types. In this case
the Bare Metal service will not change the boot device for you, leaving
the pre-configured boot order.
For example, in case of the :ref:`pxe-boot`:
For example, in the case of the :ref:`pxe-boot`:
#. Via any available means configure the boot order on the node as follows:
@ -126,7 +125,7 @@ For example, in case of the :ref:`pxe-boot`:
If it is not possible to limit network boot to only provisioning NIC,
make sure that no other DHCP/PXE servers are accessible by the node.
#. Boot from hard drive.
#. Boot from the hard drive.
#. Make sure the ``noop`` management interface is enabled, for example:
@ -139,23 +138,3 @@ For example, in case of the :ref:`pxe-boot`:
#. Change the node to use the ``noop`` management interface::
baremetal node set <NODE> --management-interface noop
Unsupported drivers
-------------------
The following drivers were declared as unsupported in ironic Newton release
and as of Ocata release they are removed from ironic:
- AMT driver - available as part of ironic-staging-drivers_
- iBoot driver - available as part of ironic-staging-drivers_
- Wake-On-Lan driver - available as part of ironic-staging-drivers_
- Virtualbox drivers
- SeaMicro drivers
- MSFT OCS drivers
The SSH drivers were removed in the Pike release. Similar functionality can be
achieved either with VirtualBMC_ or using libvirt drivers from
ironic-staging-drivers_.
.. _ironic-staging-drivers: http://ironic-staging-drivers.readthedocs.io
.. _VirtualBMC: https://opendev.org/openstack/virtualbmc

View file

@ -115,7 +115,7 @@ Logging
Logging is implemented as custom Ansible callback module,
that makes use of ``oslo.log`` and ``oslo.config`` libraries
and can re-use logging configuration defined in the main ironic configuration
and can reuse logging configuration defined in the main ironic configuration
file to set logging for Ansible events, or use a separate file for this purpose.
It works best when ``journald`` support for logging is enabled.
@ -378,26 +378,26 @@ Those values are then accessible in your plays as well
passed inside this variable. Some extra notes and fields:
- ``mem_req`` is calculated from image size (if available) and config
option ``[ansible]extra_memory``.
option :oslo.config:option:`ansible.extra_memory`.
- if ``checksum`` is not in the form ``<hash-algo>:<hash-sum>``, hashing
algorithm is assumed to be ``md5`` (default in Glance).
- ``validate_certs`` - boolean (``yes/no``) flag that turns validating
image store SSL certificate on or off (default is 'yes').
Governed by ``[ansible]image_store_insecure`` option
Governed by :oslo.config:option:`ansible.image_store_insecure` option
in ironic configuration file.
- ``cafile`` - custom CA bundle to use for validating image store
SSL certificate.
Takes value of ``[ansible]image_store_cafile`` if that is defined.
Takes value of :oslo.config:option:`ansible.image_store_cafile` if that is defined.
Currently is not used by default playbooks, as Ansible has no way to
specify the custom CA bundle to use for single HTTPS actions,
however you can use this value in your custom playbooks to for example
upload and register this CA in the ramdisk at deploy time.
- ``client_cert`` - cert file for client-side SSL authentication.
Takes value of ``[ansible]image_store_certfile`` option if defined.
Takes value of :oslo.config:option:`ansible.image_store_certfile` option if defined.
Currently is not used by default playbooks,
however you can use this value in your custom playbooks.
- ``client_key`` - private key file for client-side SSL authentication.
Takes value of ``[ansible]image_store_keyfile`` option if defined.
Takes value of :oslo.config:option:`ansible.image_store_keyfile` option if defined.
Currently is not used by default playbooks,
however you can use this value in your custom playbooks.

View file

@ -1,317 +0,0 @@
===============
iBMC driver
===============
Overview
========
The ``ibmc`` driver is targeted for Huawei V5 series rack server such as
2288H V5, CH121 V5. The iBMC hardware type enables the user to take advantage
of features of `Huawei iBMC`_ to control Huawei server.
The ``ibmc`` hardware type supports the following Ironic interfaces:
* Management Interface: Boot device management
* Power Interface: Power management
* `RAID Interface`_: RAID controller and disk management
* `Vendor Interface`_: ibmc passthru interfaces
Prerequisites
=============
The `HUAWEI iBMC Client library`_ should be installed on the ironic conductor
node(s).
For example, it can be installed with ``pip``::
sudo pip install python-ibmcclient
Enabling the iBMC driver
============================
#. Add ``ibmc`` to the list of ``enabled_hardware_types``,
``enabled_power_interfaces``, ``enabled_vendor_interfaces``
and ``enabled_management_interfaces`` in ``/etc/ironic/ironic.conf``. For example::
[DEFAULT]
...
enabled_hardware_types = ibmc
enabled_power_interfaces = ibmc
enabled_management_interfaces = ibmc
enabled_raid_interfaces = ibmc
enabled_vendor_interfaces = ibmc
#. Restart the ironic conductor service::
sudo service ironic-conductor restart
# Or, for RDO:
sudo systemctl restart openstack-ironic-conductor
Registering a node with the iBMC driver
===========================================
Nodes configured to use the driver should have the ``driver`` property
set to ``ibmc``.
The following properties are specified in the node's ``driver_info``
field:
- ``ibmc_address``:
The URL address to the ibmc controller. It must
include the authority portion of the URL, and can
optionally include the scheme. If the scheme is
missing, https is assumed.
For example: https://ibmc.example.com. This is required.
- ``ibmc_username``:
User account with admin/server-profile access
privilege. This is required.
- ``ibmc_password``:
User account password. This is required.
- ``ibmc_verify_ca``:
If ibmc_address has the **https** scheme, the
driver will use a secure (TLS_) connection when
talking to the ibmc controller. By default
(if this is set to True), the driver will try to
verify the host certificates. This can be set to
the path of a certificate file or directory with
trusted certificates that the driver will use for
verification. To disable verifying TLS_, set this
to False. This is optional.
The ``baremetal node create`` command can be used to enroll
a node with the ``ibmc`` driver. For example:
.. code-block:: bash
baremetal node create --driver ibmc
--driver-info ibmc_address=https://example.com \
--driver-info ibmc_username=admin \
--driver-info ibmc_password=password
For more information about enrolling nodes see :ref:`enrollment`
in the install guide.
RAID Interface
==============
Currently, only RAID controller which supports OOB management can be managed.
See :doc:`/admin/raid` for more information on Ironic RAID support.
The following properties are supported by the iBMC raid interface
implementation, ``ibmc``:
Mandatory properties
--------------------
* ``size_gb``: Size in gigabytes (integer) for the logical disk. Use ``MAX`` as
``size_gb`` if this logical disk is supposed to use the rest of the space
available.
* ``raid_level``: RAID level for the logical disk. Valid values are
``JBOD``, ``0``, ``1``, ``5``, ``6``, ``1+0``, ``5+0`` and ``6+0``. And it
is possible that some RAID controllers can only support a subset RAID
levels.
.. NOTE::
RAID level ``2`` is not supported by ``iBMC`` driver.
Optional properties
-------------------
* ``is_root_volume``: Optional. Specifies whether this disk is a root volume.
By default, this is ``False``.
* ``volume_name``: Optional. Name of the volume to be created. If this is not
specified, it will be N/A.
Backing physical disk hints
---------------------------
See :doc:`/admin/raid` for more information on backing disk hints.
These are machine-independent properties. The hints are specified for each
logical disk to help Ironic find the desired disks for RAID configuration.
* ``share_physical_disks``
* ``disk_type``
* ``interface_type``
* ``number_of_physical_disks``
Backing physical disks
----------------------
These are HUAWEI RAID controller dependent properties:
* ``controller``: Optional. Supported values are: RAID storage id,
RAID storage name or RAID controller name. If a bare metal server have more
than one controller, this is mandatory. Typical values would look like:
* RAID Storage Id: ``RAIDStorage0``
* RAID Storage Name: ``RAIDStorage0``
* RAID Controller Name: ``RAID Card1 Controller``.
* ``physical_disks``: Optional. Supported values are: disk-id, disk-name or
disk serial number. Typical values for hdd disk would look like:
* Disk Id: ``HDDPlaneDisk0``
* Disk Name: ``Disk0``.
* Disk SerialNumber: ``38DGK77LF77D``
Delete RAID configuration
-------------------------
For ``delete_configuration`` step, ``ibmc`` will do:
* delete all logical disks
* delete all hot-spare disks
Logical disks creation priority
-------------------------------
Logical Disks creation priority based on three properties:
* ``share_physical_disks``
* ``physical_disks``
* ``size_gb``
The logical disks creation priority strictly follow the table below, if
multiple logical disks have the same priority, then they will be created with
the same order in ``logical_disks`` array.
==================== ========================== =========
Share physical disks Specified Physical Disks Size
==================== ========================== =========
no yes int|max
no no int
yes yes int
yes yes max
yes no int
yes no max
no no max
==================== ========================== =========
Physical disks choice strategy
------------------------------
.. note::
physical-disk-group: a group of physical disks which have been used by some
logical-disks with same RAID level.
* If no ``physical_disks`` are specified, the "waste least" strategy will be
used to choose the physical disks.
* waste least disk capacity: when using disks with different capacity, it
will cause a waste of disk capacity. This is to avoid with highest
priority.
* using least total disk capacity: for example, we can create 400G RAID 5
with both 5 100G-disks and 3 200G-disks. 5 100G disks is a better
strategy because it uses a 500G capacity totally. While 3 200G-disks
are 600G totally.
* using least disk count: finally, if waste capacity and total disk
capacity are both the same (it rarely happens?), we will choose the one
with the minimum number of disks.
* when ``share_physical_disks`` option is present, ``ibmc`` driver will
create logical disk upon existing physical-disk-group list first. Only
when no existing physical-disk-group matches, then it chooses unused
physical disks with same strategy described above. When multiple exists
physical-disk-groups matches, it will use "waste least" strategy too,
the bigger capacity left the better. For example, to create a logical disk
shown below on a ``ibmc`` server which has two RAID5 logical disks already.
And the shareable capacity of this two logical-disks are 500G and 300G,
then ``ibmc`` driver will choose the second one.
.. code-block:: json
{
"logical_disks": [
{
"controller": "RAID Card1 Controller",
"raid_level": "5",
"size_gb": 100,
"share_physical_disks": true
}
]
}
And the ``ibmc`` server has two RAID5 logical disks already.
* When ``size_gb`` is set to ``MAX``, ``ibmc`` driver will auto work through
all possible cases and choose the "best" solution which has the biggest
capacity and use least capacity. For example: to create a RAID 5+0 logical
disk with MAX size in a server has 9 200G-disks, it will finally choose
"8 disks + span-number 2" but not "9 disks + span-number 3". Although they
both have 1200G capacity totally, but the former uses only 8 disks and the
latter uses 9 disks. If you want to choose the latter solution, you can
specified the disk count to use by adding ``number_of_physical_disks``
option.
.. code-block:: json
{
"logical_disks": [
{
"controller": "RAID Card1 Controller",
"raid_level": "5+0",
"size_gb": "MAX"
}
]
}
Examples
--------
In a typical scenario we may want to create:
* RAID 5, 500G, root OS volume with 3 disks
* RAID 5, rest available space, data volume with rest disks
.. code-block:: json
{
"logical_disks": [
{
"volume_name": "os_volume",
"controller": "RAID Card1 Controller",
"is_root_volume": "True",
"physical_disks": [
"Disk0",
"Disk1",
"Disk2"
],
"raid_level": "5",
"size_gb": "500"
},
{
"volume_name": "data_volume",
"controller": "RAID Card1 Controller",
"raid_level": "5",
"size_gb": "MAX"
}
]
}
Vendor Interface
=========================================
The ``ibmc`` hardware type provides vendor passthru interfaces shown below:
======================== ============ ======================================
Method Name HTTP Method Description
======================== ============ ======================================
boot_up_seq GET Query boot up sequence
get_raid_controller_list GET Query RAID controller summary info
======================== ============ ======================================
.. _Huawei iBMC: https://e.huawei.com/en/products/computing/kunpeng/accessories/ibmc
.. _TLS: https://en.wikipedia.org/wiki/Transport_Layer_Security
.. _HUAWEI iBMC Client library: https://pypi.org/project/python-ibmcclient/

View file

@ -7,9 +7,10 @@ Overview
The integrated Dell Remote Access Controller (iDRAC_) is an out-of-band
management platform on Dell EMC servers, and is supported directly by
the ``idrac`` hardware type. This driver uses the Dell Web Services for
Management (WSMAN) protocol and the standard Distributed Management Task
Force (DMTF) Redfish protocol to perform all of its functions.
the ``idrac`` hardware type. This driver utilizes the Distributed
Management Task Force (DMTF) Redfish protocol to perform all of it's
functions. In older versions of Ironic, this driver leveraged
Web Services for Management (WSMAN) protocol.
iDRAC_ hardware is also supported by the generic ``ipmi`` and ``redfish``
hardware types, though with smaller feature sets.
@ -25,62 +26,53 @@ Key features of the Dell iDRAC driver include:
Ironic Features
---------------
The ``idrac`` hardware type supports the following Ironic interfaces:
The ``idrac`` hardware type extends the ``redfish`` hardware type
and supports the following Ironic interfaces:
* `BIOS Interface`_: BIOS management
* `Inspect Interface`_: Hardware inspection
* `Management Interface`_: Boot device and firmware management
* Power Interface: Power management
* `RAID Interface`_: RAID controller and disk management
* `Vendor Interface`_: BIOS management (WSMAN) and eject virtual media
(Redfish)
* `Vendor Interface`_: eject virtual media (Redfish)
Prerequisites
-------------
The ``idrac`` hardware type requires the ``python-dracclient`` library
to be installed on the ironic conductor node(s) if an Ironic node is
configured to use an ``idrac-wsman`` interface implementation, for example::
sudo pip install 'python-dracclient>=3.1.0'
Additionally, the ``idrac`` hardware type requires the ``sushy`` library
The ``idrac`` hardware type requires the ``sushy`` library and the vendor extensions
to be installed on the ironic conductor node(s) if an Ironic node is
configured to use an ``idrac-redfish`` interface implementation, for example::
sudo pip install 'python-dracclient>=3.1.0' 'sushy>=2.0.0'
sudo pip install 'sushy>=5.6.0'
Enabling
--------
The iDRAC driver supports WSMAN for the bios, inspect, management, power,
raid, and vendor interfaces. In addition, it supports Redfish for
the bios, inspect, management, power, and raid interfaces. The iDRAC driver
allows you to mix and match WSMAN and Redfish interfaces.
The iDRAC driver supports Redfish for the bios, inspect, management, power,
and raid interfaces.
The ``idrac-wsman`` implementation must be enabled to use WSMAN for
an interface. The ``idrac-redfish`` implementation must be enabled
The ``idrac-redfish`` implementation must be enabled
to use Redfish for an interface.
To enable the ``idrac`` hardware type with the minimum interfaces,
all using WSMAN, add the following to your ``/etc/ironic/ironic.conf``:
To enable the ``idrac`` hardware type, add the following to your
``/etc/ironic/ironic.conf``:
.. code-block:: ini
[DEFAULT]
enabled_hardware_types=idrac
enabled_management_interfaces=idrac-wsman
enabled_power_interfaces=idrac-wsman
enabled_management_interfaces=idrac-redfish
enabled_power_interfaces=redfish
To enable all optional features (BIOS, inspection, RAID, and vendor passthru)
using Redfish where it is supported and WSMAN where not, use the
following configuration:
To enable all optional features (BIOS, inspection, RAID, and vendor passthru),
use the following configuration:
.. code-block:: ini
[DEFAULT]
enabled_hardware_types=idrac
enabled_bios_interfaces=idrac-redfish
enabled_bios_interfaces=redfish
enabled_firmware_interfaces=redfish
enabled_inspect_interfaces=idrac-redfish
enabled_management_interfaces=idrac-redfish
enabled_power_interfaces=idrac-redfish
@ -93,42 +85,31 @@ order:
================ ===================================================
Interface Supported Implementations
================ ===================================================
``bios`` ``idrac-wsman``, ``idrac-redfish``, ``no-bios``
``boot`` ``ipxe``, ``pxe``, ``idrac-redfish-virtual-media``
``bios`` ``idrac-redfish``, ``no-bios``
``boot`` ``ipxe``, ``pxe``, ``http-ipxe``, ``http``,
``redfish-https``, ``idrac-redfish-virtual-media``
``console`` ``no-console``
``deploy`` ``direct``, ``ansible``, ``ramdisk``
``inspect`` ``idrac-wsman``, ``idrac``, ``idrac-redfish``,
``inspector``, ``no-inspect``
``management`` ``idrac-wsman``, ``idrac``, ``idrac-redfish``
``firmware`` ``redfish``, ``no-firmware``
``inspect`` ``idrac-redfish``,
``agent``, ``no-inspect``
``management`` ``idrac-redfish``
``network`` ``flat``, ``neutron``, ``noop``
``power`` ``idrac-wsman``, ``idrac``, ``idrac-redfish``
``raid`` ``idrac-wsman``, ``idrac``, ``idrac-redfish``, ``no-raid``
``power`` ``redfish``, ``idrac-redfish``
``raid`` ``idrac-redfish``, ``no-raid``
``rescue`` ``no-rescue``, ``agent``
``storage`` ``noop``, ``cinder``, ``external``
``vendor`` ``idrac-wsman``, ``idrac``, ``idrac-redfish``,
``vendor`` ``redfish``, ``idrac-redfish``,
``no-vendor``
================ ===================================================
.. NOTE::
``idrac`` is the legacy name of the WSMAN interface. It has been
deprecated in favor of ``idrac-wsman`` and may be removed in a
future release.
Protocol-specific Properties
----------------------------
The WSMAN and Redfish protocols require different properties to be specified
The Redfish protocols require different properties to be specified
in the Ironic node's ``driver_info`` field to communicate with the bare
metal system's iDRAC.
The WSMAN protocol requires the following properties:
* ``drac_username``: The WSMAN user name to use when communicating
with the iDRAC. Usually ``root``.
* ``drac_password``: The password for the WSMAN user to use when
communicating with the iDRAC.
* ``drac_address``: The IP address of the iDRAC.
The Redfish protocol requires the following properties:
* ``redfish_username``: The Redfish user name to use when
@ -143,25 +124,9 @@ The Redfish protocol requires the following properties:
For other Redfish protocol parameters see :doc:`/admin/drivers/redfish`.
If using only interfaces which use WSMAN (``idrac-wsman``), then only
the WSMAN properties must be supplied. If using only interfaces which
use Redfish (``idrac-redfish``), then only the Redfish properties must be
supplied. If using a mix of interfaces, where some use WSMAN and others
use Redfish, both the WSMAN and Redfish properties must be supplied.
Enrolling
---------
The following command enrolls a bare metal node with the ``idrac``
hardware type using WSMAN for all interfaces:
.. code-block:: bash
baremetal node create --driver idrac \
--driver-info drac_username=user \
--driver-info drac_password=pa$$w0rd \
--driver-info drac_address=drac.host
The following command enrolls a bare metal node with the ``idrac``
hardware type using Redfish for all interfaces:
@ -172,35 +137,12 @@ hardware type using Redfish for all interfaces:
--driver-info redfish_password=pa$$w0rd \
--driver-info redfish_address=drac.host \
--driver-info redfish_system_id=/redfish/v1/Systems/System.Embedded.1 \
--bios-interface idrac-redfish \
--bios-interface redfish \
--inspect-interface idrac-redfish \
--management-interface idrac-redfish \
--power-interface idrac-redfish \
--power-interface redfish \
--raid-interface idrac-redfish \
--vendor-interface idrac-redfish
The following command enrolls a bare metal node with the ``idrac``
hardware type assuming a mix of Redfish and WSMAN interfaces are used:
.. code-block:: bash
baremetal node create --driver idrac \
--driver-info drac_username=user \
--driver-info drac_password=pa$$w0rd
--driver-info drac_address=drac.host \
--driver-info redfish_username=user \
--driver-info redfish_password=pa$$w0rd \
--driver-info redfish_address=drac.host \
--driver-info redfish_system_id=/redfish/v1/Systems/System.Embedded.1 \
--bios-interface idrac-redfish \
--inspect-interface idrac-redfish \
--management-interface idrac-redfish \
--power-interface idrac-redfish
.. NOTE::
If using WSMAN for the management interface, then WSMAN must be used
for the power interface. The same applies to Redfish. It is currently not
possible to use Redfish for one and WSMAN for the other.
--vendor-interface redfish
BIOS Interface
==============
@ -244,7 +186,7 @@ Inspect Interface
The Dell iDRAC out-of-band inspection process catalogs all the same
attributes of the server as the IPMI driver. Unlike IPMI, it does this
without requiring the system to be rebooted, or even to be powered on.
Inspection is performed using the Dell WSMAN or Redfish protocol directly
Inspection is performed using the Redfish protocol directly
without affecting the operation of the system being inspected.
The inspection discovers the following properties:
@ -259,8 +201,6 @@ Extra capabilities:
* ``pci_gpu_devices``: number of GPU devices connected to the bare metal.
It also creates baremetal ports for each NIC port detected in the system.
The ``idrac-wsman`` inspect interface discovers which NIC ports are
configured to PXE boot and sets ``pxe_enabled`` to ``True`` on those ports.
The ``idrac-redfish`` inspect interface does not currently set ``pxe_enabled``
on the ports. The user should ensure that ``pxe_enabled`` is set correctly on
the ports following inspection with the ``idrac-redfish`` inspect interface.
@ -280,6 +220,11 @@ The management interface for ``idrac-redfish`` supports:
Import and export configuration
-------------------------------
.. warning::
This feature has been deprecated and is anticipated to be removed once
Ironic has a generalized interface for doing step template articulation
for aspects beyond just "deployment" of baremetal nodes.
The clean and deploy steps provided in this section allow to configure the
system and collect the system inventory using configuration mold files.
@ -423,7 +368,7 @@ Storage setup
To start using these steps, configure the storage location. The settings can be
found in the ``[molds]`` section. Configure the storage type from the
``[molds]storage`` setting. Currently, ``swift``, which is enabled by default,
:oslo.config:option:`molds.storage` setting. Currently, ``swift``, which is enabled by default,
and ``http`` are supported.
In the setup input parameters, the complete HTTP URL is used. This requires
@ -455,7 +400,7 @@ To use HTTP server with configuration molds,
#. Enable HTTP PUT support.
#. Create the directory to be used for the configuration mold storage.
#. Configure read/write access for HTTP Basic access authentication and provide
user credentials in ``[molds]user`` and ``[molds]password`` fields.
user credentials in :oslo.config:option:`molds.user` and :oslo.config:option:`molds.password` fields.
The HTTP web server does not support multitenancy and is intended to be used in
a stand-alone Ironic, or single-tenant OpenStack environment.
@ -474,7 +419,7 @@ Compared to ``redfish`` RAID interface, using ``idrac-redfish`` adds:
* Converting non-RAID disks to RAID mode if there are any,
* Clearing foreign configuration, if any, after deleting virtual disks.
The following properties are supported by the iDRAC WSMAN and Redfish RAID
The following properties are supported by the Redfish RAID
interface implementation:
.. NOTE::
@ -620,223 +565,6 @@ Or using ``sushy`` with Redfish:
Vendor Interface
================
idrac-wsman
-----------
Dell iDRAC BIOS management is available through the Ironic WSMAN vendor
passthru interface.
======================== ============ ======================================
Method Name HTTP Method Description
======================== ============ ======================================
``abandon_bios_config`` ``DELETE`` Abandon a BIOS configuration job.
``commit_bios_config`` ``POST`` Commit a BIOS configuration job
submitted through ``set_bios_config``.
Required argument: ``reboot`` -
indicates whether a reboot job
should be automatically created
with the config job. Returns a
dictionary containing the ``job_id``
key with the ID of the newly created
config job, and the
``reboot_required`` key indicating
whether the node needs to be rebooted
to execute the config job.
``get_bios_config`` ``GET`` Returns a dictionary containing the
node's BIOS settings.
``list_unfinished_jobs`` ``GET`` Returns a dictionary containing
the key ``unfinished_jobs``; its value
is a list of dictionaries. Each
dictionary represents an unfinished
config job object.
``set_bios_config`` ``POST`` Change the BIOS configuration on
a node. Required argument: a
dictionary of {``AttributeName``:
``NewValue``}. Returns a dictionary
containing the ``is_commit_required``
key indicating whether
``commit_bios_config`` needs to be
called to apply the changes and the
``is_reboot_required`` value
indicating whether the server must
also be rebooted. Possible values are
``true`` and ``false``.
======================== ============ ======================================
Examples
^^^^^^^^
Get BIOS Config
~~~~~~~~~~~~~~~
.. code-block:: bash
baremetal node passthru call --http-method GET <node> get_bios_config
Snippet of output showing virtualization enabled:
.. code-block:: json
{"ProcVirtualization": {
"current_value": "Enabled",
"instance_id": "BIOS.Setup.1-1:ProcVirtualization",
"name": "ProcVirtualization",
"pending_value": null,
"possible_values": [
"Enabled",
"Disabled"],
"read_only": false }}
There are a number of items to note from the above snippet:
* ``name``: this is the name to use in a call to ``set_bios_config``.
* ``current_value``: the current state of the setting.
* ``pending_value``: if the value has been set, but not yet committed,
the new value is shown here. The change can either be committed or
abandoned.
* ``possible_values``: shows a list of valid values which can be used
in a call to ``set_bios_config``.
* ``read_only``: indicates if the value is capable of being changed.
Set BIOS Config
~~~~~~~~~~~~~~~
.. code-block:: bash
baremetal node passthru call <node> set_bios_config --arg "name=value"
Walkthrough of perfoming a BIOS configuration change:
The following section demonstrates how to change BIOS configuration settings,
detect that a commit and reboot are required, and act on them accordingly. The
two properties that are being changed are:
* Enable virtualization technology of the processor
* Globally enable SR-IOV
.. code-block:: bash
baremetal node passthru call <node> set_bios_config \
--arg "ProcVirtualization=Enabled" \
--arg "SriovGlobalEnable=Enabled"
This returns a dictionary indicating what actions are required next:
.. code-block:: json
{
"is_reboot_required": true,
"is_commit_required": true
}
Commit BIOS Changes
~~~~~~~~~~~~~~~~~~~
The next step is to commit the pending change to the BIOS. Note that in this
example, the ``reboot`` argument is set to ``true``. The response indicates
that a reboot is no longer required as it has been scheduled automatically
by the ``commit_bios_config`` call. If the reboot argument is not supplied,
the job is still created, however it remains in the ``scheduled`` state
until a reboot is performed. The reboot can be initiated through the
Ironic power API.
.. code-block:: bash
baremetal node passthru call <node> commit_bios_config \
--arg "reboot=true"
.. code-block:: json
{
"job_id": "JID_499377293428",
"reboot_required": false
}
The state of any executing job can be queried:
.. code-block:: bash
baremetal node passthru call --http-method GET <node> list_unfinished_jobs
.. code-block:: json
{"unfinished_jobs":
[{"status": "Scheduled",
"name": "ConfigBIOS:BIOS.Setup.1-1",
"until_time": "TIME_NA",
"start_time": "TIME_NOW",
"message": "Task successfully scheduled.",
"percent_complete": "0",
"id": "JID_499377293428"}]}
Abandon BIOS Changes
~~~~~~~~~~~~~~~~~~~~
Instead of committing, a pending change can be abandoned:
.. code-block:: bash
baremetal node passthru call --http-method DELETE <node> abandon_bios_config
The abandon command does not provide a response body.
Change Boot Mode
^^^^^^^^^^^^^^^^
The boot mode of the iDRAC can be changed to:
* BIOS - Also called legacy or traditional boot mode. The BIOS initializes the
systems processors, memory, bus controllers, and I/O devices. After
initialization is complete, the BIOS passes control to operating system (OS)
software. The OS loader uses basic services provided by the system BIOS to
locate and load OS modules into system memory. After booting the system, the
BIOS and embedded management controllers execute system management
algorithms, which monitor and optimize the condition of the underlying
hardware. BIOS configuration settings enable fine-tuning of the
performance, power management, and reliability features of the system.
* UEFI - The Unified Extensible Firmware Interface does not change the
traditional purposes of the system BIOS. To a large extent, a UEFI-compliant
BIOS performs the same initialization, boot, configuration, and management
tasks as a traditional BIOS. However, UEFI does change the interfaces and
data structures the BIOS uses to interact with I/O device firmware and
operating system software. The primary intent of UEFI is to eliminate
shortcomings in the traditional BIOS environment, enabling system firmware to
continue scaling with industry trends.
The UEFI boot mode offers:
* Improved partitioning scheme for boot media
* Support for media larger than 2 TB
* Redundant partition tables
* Flexible handoff from BIOS to OS
* Consolidated firmware user interface
* Enhanced resource allocation for boot device firmware
The boot mode can be changed via the WSMAN vendor passthru interface as
follows:
.. code-block:: bash
baremetal node passthru call <node> set_bios_config \
--arg "BootMode=Uefi"
baremetal node passthru call <node> commit_bios_config \
--arg "reboot=true"
.. code-block:: bash
baremetal node passthru call <node> set_bios_config \
--arg "BootMode=Bios"
baremetal node passthru call <node> commit_bios_config \
--arg "reboot=true"
idrac-redfish
-------------
@ -862,7 +590,7 @@ Nodes go into maintenance mode
After some period of time, nodes managed by the ``idrac`` hardware type may go
into maintenance mode in Ironic. This issue can be worked around by changing
the Ironic power state poll interval to 70 seconds. See
``[conductor]sync_power_state_interval`` in ``/etc/ironic/ironic.conf``.
:oslo.config:option:`conductor.sync_power_state_interval` in ``/etc/ironic/ironic.conf``.
PXE reset with "factory_reset" BIOS clean step
----------------------------------------------
@ -883,27 +611,6 @@ settings.
.. _Ironic_RAID: https://docs.openstack.org/ironic/latest/admin/raid.html
.. _iDRAC: https://www.dell.com/idracmanuals
WSMAN vendor passthru timeout
-----------------------------
When iDRAC is not ready and executing WSMAN vendor passthru commands, they take
more time as waiting for iDRAC to become ready again and then time out,
for example:
.. code-block:: bash
baremetal node passthru call --http-method GET \
aed58dca-1b25-409a-a32f-3a817d59e1e0 list_unfinished_jobs
Timed out waiting for a reply to message ID 547ce7995342418c99ef1ea4a0054572 (HTTP 500)
To avoid this need to increase timeout for messaging in ``/etc/ironic/ironic.conf``
and restart Ironic API service.
.. code-block:: ini
[DEFAULT]
rpc_response_timeout = 600
Timeout when powering off
-------------------------

View file

@ -1,3 +1,10 @@
.. meta::
:description: Configure Ironic iLO driver for HPE ProLiant server management. Support for iLO 4, iLO 5, virtual media, and HPE-specific hardware features.
:keywords: ilo driver, hpe proliant, hpe servers, ilo4, ilo5, virtual media, hpe management, proliant automation
:author: OpenStack Ironic Team
:robots: index, follow
:audience: system administrators, hardware engineers
.. _ilo:
==========
@ -8,8 +15,8 @@ Overview
========
iLO driver enables to take advantage of features of iLO management engine in
HPE ProLiant servers. The ``ilo`` hardware type is targeted for HPE ProLiant
Gen8 and Gen9 systems which have `iLO 4 management engine`_. From **Pike**
release ``ilo`` hardware type supports ProLiant Gen10 systems which have
Gen8 and Gen9 systems which have `iLO 4 management engine`_. The ``ilo``
hardware type supports ProLiant Gen10 systems which have
`iLO 5 management engine`_. iLO5 conforms to `Redfish`_ API and hence hardware
type ``redfish`` (see :doc:`redfish`) is also an option for this kind of
hardware but it lacks the iLO specific features.
@ -20,6 +27,19 @@ known issues, etc), please check the `iLO driver wiki page <https://wiki.opensta
For enabling Gen10 systems and getting detailed information on Gen10 feature
support in Ironic please check this `Gen10 wiki section`_.
.. warning::
Starting from Gen11 servers and above (iLO6 and above) use ``redfish``
(see :doc:`redfish`) hardware type for baremetal provisioning and
management. You can use the ``redfish`` hardware type for iLO5 hardware,
however RAID configuration is not available via Redfish until the iLO6
baseboard management controllers.
The Ironic community does not anticipate new features to be added to the
``ilo`` and ``ilo5`` hardware types as ``redfish`` is superseding
most vendor specific hardware types. These drivers are anticipated
to be available in Ironic as long as the ``proliantutils`` library
is maintained.
Hardware type
=============
@ -30,9 +50,6 @@ hardware can be used with reference hardware type ``ipmi`` (see
to enable the ``ilo`` and ``ilo5`` hardware type, see
:ref:`enable-hardware-types`.
.. note::
Only HPE ProLiant Gen10 servers supports hardware type ``redfish``.
.. warning::
It is important to note that while the HPE Edgeline series of servers may
contain iLO adapters, they are known to not be compatible with the ``ilo``
@ -84,7 +101,7 @@ The ``ilo`` hardware type supports following hardware interfaces:
* bios
Supports ``ilo`` and ``no-bios``. The default is ``ilo``.
They can be enabled by using the ``[DEFAULT]enabled_bios_interfaces``
They can be enabled by using the :oslo.config:option:`DEFAULT.enabled_bios_interfaces`
option in ``ironic.conf`` as given below:
.. code-block:: ini
@ -100,7 +117,7 @@ The ``ilo`` hardware type supports following hardware interfaces:
media to boot up the bare metal node. The ``ilo-pxe`` and ``ilo-ipxe``
interfaces use PXE and iPXE respectively for deployment(just like
:ref:`pxe-boot`). These interfaces do not require iLO Advanced license.
They can be enabled by using the ``[DEFAULT]enabled_boot_interfaces``
They can be enabled by using the :oslo.config:option:`DEFAULT.enabled_boot_interfaces`
option in ``ironic.conf`` as given below:
.. code-block:: ini
@ -111,7 +128,7 @@ The ``ilo`` hardware type supports following hardware interfaces:
* console
Supports ``ilo`` and ``no-console``. The default is ``ilo``.
They can be enabled by using the ``[DEFAULT]enabled_console_interfaces``
They can be enabled by using the :oslo.config:option:`DEFAULT.enabled_console_interfaces`
option in ``ironic.conf`` as given below:
.. code-block:: ini
@ -128,23 +145,19 @@ The ``ilo`` hardware type supports following hardware interfaces:
management engine.
* inspect
Supports ``ilo`` and ``inspector``. The default is ``ilo``. They
can be enabled by using the ``[DEFAULT]enabled_inspect_interfaces`` option
Supports ``ilo`` and ``agent``. The default is ``ilo``. They
can be enabled by using the :oslo.config:option:`DEFAULT.enabled_inspect_interfaces` option
in ``ironic.conf`` as given below:
.. code-block:: ini
[DEFAULT]
enabled_hardware_types = ilo
enabled_inspect_interfaces = ilo,inspector
.. note::
:ironic-inspector-doc:`Ironic Inspector <>`
needs to be configured to use ``inspector`` as the inspect interface.
enabled_inspect_interfaces = ilo,agent
* management
Supports only ``ilo``. It can be enabled by using the
``[DEFAULT]enabled_management_interfaces`` option in ``ironic.conf`` as
:oslo.config:option:`DEFAULT.enabled_management_interfaces` option in ``ironic.conf`` as
given below:
.. code-block:: ini
@ -155,7 +168,7 @@ The ``ilo`` hardware type supports following hardware interfaces:
* power
Supports only ``ilo``. It can be enabled by using the
``[DEFAULT]enabled_power_interfaces`` option in ``ironic.conf`` as given
:oslo.config:option:`DEFAULT.enabled_power_interfaces` option in ``ironic.conf`` as given
below:
.. code-block:: ini
@ -166,7 +179,7 @@ The ``ilo`` hardware type supports following hardware interfaces:
* raid
Supports ``agent`` and ``no-raid``. The default is ``no-raid``.
They can be enabled by using the ``[DEFAULT]enabled_raid_interfaces``
They can be enabled by using the :oslo.config:option:`DEFAULT.enabled_raid_interfaces`
option in ``ironic.conf`` as given below:
.. code-block:: ini
@ -177,7 +190,7 @@ The ``ilo`` hardware type supports following hardware interfaces:
* storage
Supports ``cinder`` and ``noop``. The default is ``noop``.
They can be enabled by using the ``[DEFAULT]enabled_storage_interfaces``
They can be enabled by using the :oslo.config:option:`DEFAULT.enabled_storage_interfaces`
option in ``ironic.conf`` as given below:
.. code-block:: ini
@ -194,7 +207,7 @@ The ``ilo`` hardware type supports following hardware interfaces:
* rescue
Supports ``agent`` and ``no-rescue``. The default is ``no-rescue``.
They can be enabled by using the ``[DEFAULT]enabled_rescue_interfaces``
They can be enabled by using the :oslo.config:option:`DEFAULT.enabled_rescue_interfaces`
option in ``ironic.conf`` as given below:
.. code-block:: ini
@ -206,7 +219,7 @@ The ``ilo`` hardware type supports following hardware interfaces:
* vendor
Supports ``ilo``, ``ilo-redfish`` and ``no-vendor``. The default is
``ilo``. They can be enabled by using the
``[DEFAULT]enabled_vendor_interfaces`` option in ``ironic.conf`` as given
:oslo.config:option:`DEFAULT.enabled_vendor_interfaces` option in ``ironic.conf`` as given
below:
.. code-block:: ini
@ -222,7 +235,7 @@ except for ``boot`` and ``raid`` interfaces. The details of ``boot`` and
* raid
Supports ``ilo5`` and ``no-raid``. The default is ``ilo5``.
They can be enabled by using the ``[DEFAULT]enabled_raid_interfaces``
They can be enabled by using the :oslo.config:option:`DEFAULT.enabled_raid_interfaces`
option in ``ironic.conf`` as given below:
.. code-block:: ini
@ -234,7 +247,7 @@ except for ``boot`` and ``raid`` interfaces. The details of ``boot`` and
* boot
Supports ``ilo-uefi-https`` apart from the other boot interfaces supported
by ``ilo`` hardware type.
This can be enabled by using the ``[DEFAULT]enabled_boot_interfaces``
This can be enabled by using the :oslo.config:option:`DEFAULT.enabled_boot_interfaces`
option in ``ironic.conf`` as given below:
.. code-block:: ini
@ -359,8 +372,8 @@ Node configuration
before the Xena release.
* The following parameters are mandatory in ``driver_info``
if ``ilo-inspect`` inspect inteface is used and SNMPv3 inspection
(`SNMPv3 Authentication` in `HPE iLO4 User Guide`_) is desired:
if ``ilo-inspect`` inspect interface is used and SNMPv3 inspection
(``SNMPv3 Authentication`` in `HPE iLO4 User Guide`_) is desired:
* ``snmp_auth_user`` : The SNMPv3 user.
@ -889,7 +902,7 @@ The hardware type ``ilo`` supports hardware inspection.
an error. This feature is available in proliantutils release
version >= 2.2.0.
* The iLO must be updated with SNMPv3 authentication details.
Pleae refer to the section `SNMPv3 Authentication` in `HPE iLO4 User Guide`_
Please refer to the section ``SNMPv3 Authentication`` in `HPE iLO4 User Guide`_
for setting up authentication details on iLO.
The following parameters are mandatory to be given in driver_info
for SNMPv3 inspection:
@ -1097,197 +1110,32 @@ Deploy Process
Glance and swift for partition images
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. seqdiag::
:scale: 80
diagram {
Glance; Conductor; Baremetal; Swift; IPA; iLO;
activation = none;
span_height = 1;
edge_length = 250;
default_note_color = white;
default_fontsize = 14;
Conductor -> iLO [label = "Powers off the node"];
Conductor -> Glance [label = "Get the metadata for deploy ISO"];
Glance -> Conductor [label = "Returns the metadata for deploy ISO"];
Conductor -> Conductor [label = "Generates swift tempURL for deploy ISO"];
Conductor -> Conductor [label = "Creates the FAT32 image containing ironic API URL and driver name"];
Conductor -> Swift [label = "Uploads the FAT32 image"];
Conductor -> Conductor [label = "Generates swift tempURL for FAT32 image"];
Conductor -> iLO [label = "Attaches the FAT32 image swift tempURL as virtual media floppy"];
Conductor -> iLO [label = "Attaches the deploy ISO swift tempURL as virtual media CDROM"];
Conductor -> iLO [label = "Sets one time boot to CDROM"];
Conductor -> iLO [label = "Reboot the node"];
iLO -> Swift [label = "Downloads deploy ISO"];
Baremetal -> iLO [label = "Boots deploy kernel/ramdisk from iLO virtual media CDROM"];
IPA -> Conductor [label = "Lookup node"];
Conductor -> IPA [label = "Provides node UUID"];
IPA -> Conductor [label = "Heartbeat"];
Conductor -> IPA [label = "Sends the user image HTTP(S) URL"];
IPA -> Swift [label = "Retrieves the user image on bare metal"];
IPA -> IPA [label = "Writes user image to root partition"];
IPA -> IPA [label = "Installs boot loader"];
IPA -> Conductor [label = "Heartbeat"];
Conductor -> Baremetal [label = "Sets boot device to disk"];
Conductor -> IPA [label = "Power off the node"];
Conductor -> iLO [label = "Power on the node"];
Baremetal -> Baremetal [label = "Boot user image from disk"];
}
.. figure:: ./../../images/glance-and-swift-for-partition-images.svg
:width: 100%
Glance and swift with whole-disk images
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. seqdiag::
:scale: 80
diagram {
Glance; Conductor; Baremetal; Swift; IPA; iLO;
activation = none;
span_height = 1;
edge_length = 250;
default_note_color = white;
default_fontsize = 14;
Conductor -> iLO [label = "Powers off the node"];
Conductor -> Glance [label = "Get the metadata for deploy ISO"];
Glance -> Conductor [label = "Returns the metadata for deploy ISO"];
Conductor -> Conductor [label = "Generates swift tempURL for deploy ISO"];
Conductor -> Conductor [label = "Creates the FAT32 image containing ironic API URL and driver name"];
Conductor -> Swift [label = "Uploads the FAT32 image"];
Conductor -> Conductor [label = "Generates swift tempURL for FAT32 image"];
Conductor -> iLO [label = "Attaches the FAT32 image swift tempURL as virtual media floppy"];
Conductor -> iLO [label = "Attaches the deploy ISO swift tempURL as virtual media CDROM"];
Conductor -> iLO [label = "Sets one time boot to CDROM"];
Conductor -> iLO [label = "Reboot the node"];
iLO -> Swift [label = "Downloads deploy ISO"];
Baremetal -> iLO [label = "Boots deploy kernel/ramdisk from iLO virtual media CDROM"];
IPA -> Conductor [label = "Lookup node"];
Conductor -> IPA [label = "Provides node UUID"];
IPA -> Conductor [label = "Heartbeat"];
Conductor -> IPA [label = "Sends the user image HTTP(S) URL"];
IPA -> Swift [label = "Retrieves the user image on bare metal"];
IPA -> IPA [label = "Writes user image to disk"];
IPA -> Conductor [label = "Heartbeat"];
Conductor -> Baremetal [label = "Sets boot device to disk"];
Conductor -> IPA [label = "Power off the node"];
Conductor -> iLO [label = "Power on the node"];
Baremetal -> Baremetal [label = "Boot user image from disk"];
}
.. figure:: ./../../images/glance-and-swift-whole-disk-images.svg
:width: 100%
Swiftless deploy
^^^^^^^^^^^^^^^^
.. seqdiag::
:scale: 80
diagram {
Glance; Conductor; Baremetal; ConductorWebserver; IPA; iLO;
activation = none;
span_height = 1;
edge_length = 250;
default_note_color = white;
default_fontsize = 14;
Conductor -> iLO [label = "Powers off the node"];
Conductor -> Glance [label = "Get the metadata for deploy ISO"];
Glance -> Conductor [label = "Returns the metadata for deploy ISO"];
Conductor -> Conductor [label = "Generates swift tempURL for deploy ISO"];
Conductor -> Conductor [label = "Creates the FAT32 image containing Ironic API URL and driver name"];
Conductor -> ConductorWebserver [label = "Uploads the FAT32 image"];
Conductor -> iLO [label = "Attaches the FAT32 image URL as virtual media floppy"];
Conductor -> iLO [label = "Attaches the deploy ISO swift tempURL as virtual media CDROM"];
Conductor -> iLO [label = "Sets one time boot to CDROM"];
Conductor -> iLO [label = "Reboot the node"];
iLO -> Swift [label = "Downloads deploy ISO"];
Baremetal -> iLO [label = "Boots deploy kernel/ramdisk from iLO virtual media CDROM"];
IPA -> Conductor [label = "Lookup node"];
Conductor -> IPA [label = "Provides node UUID"];
IPA -> Conductor [label = "Heartbeat"];
Conductor -> IPA [label = "Sends the user image HTTP(S) URL"];
IPA -> Swift [label = "Retrieves the user image on bare metal"];
IPA -> IPA [label = "Writes user image to disk"];
IPA -> Conductor [label = "Heartbeat"];
Conductor -> Baremetal [label = "Sets boot device to disk"];
Conductor -> IPA [label = "Power off the node"];
Conductor -> Baremetal [label = "Power on the node"];
Baremetal -> Baremetal [label = "Boot user image from disk"];
}
.. figure:: ./../../images/swiftless-deploy.svg
:width: 100%
HTTP(S) based deploy
^^^^^^^^^^^^^^^^^^^^
.. seqdiag::
:scale: 80
diagram {
Webserver; Conductor; Baremetal; Swift; IPA; iLO;
activation = none;
span_height = 1;
edge_length = 250;
default_note_color = white;
default_fontsize = 14;
Conductor -> iLO [label = "Powers off the node"];
Conductor -> Conductor [label = "Creates the FAT32 image containing ironic API URL and driver name"];
Conductor -> Swift [label = "Uploads the FAT32 image"];
Conductor -> Conductor [label = "Generates swift tempURL for FAT32 image"];
Conductor -> iLO [label = "Attaches the FAT32 image swift tempURL as virtual media floppy"];
Conductor -> iLO [label = "Attaches the deploy ISO URL as virtual media CDROM"];
Conductor -> iLO [label = "Sets one time boot to CDROM"];
Conductor -> iLO [label = "Reboot the node"];
iLO -> Webserver [label = "Downloads deploy ISO"];
Baremetal -> iLO [label = "Boots deploy kernel/ramdisk from iLO virtual media CDROM"];
IPA -> Conductor [label = "Lookup node"];
Conductor -> IPA [label = "Provides node UUID"];
IPA -> Conductor [label = "Heartbeat"];
Conductor -> IPA [label = "Sends the user image HTTP(S) URL"];
IPA -> Webserver [label = "Retrieves the user image on bare metal"];
IPA -> IPA [label = "Writes user image to disk"];
IPA -> Conductor [label = "Heartbeat"];
Conductor -> Baremetal [label = "Sets boot device to disk"];
Conductor -> IPA [label = "Power off the node"];
Conductor -> Baremetal [label = "Power on the node"];
Baremetal -> Baremetal [label = "Boot user image from disk"];
}
.. figure:: ./../../images/https-based-deploy.svg
:width: 100%
Standalone ironic
^^^^^^^^^^^^^^^^^
.. seqdiag::
:scale: 80
diagram {
Webserver; Conductor; Baremetal; ConductorWebserver; IPA; iLO;
activation = none;
span_height = 1;
edge_length = 250;
default_note_color = white;
default_fontsize = 14;
Conductor -> iLO [label = "Powers off the node"];
Conductor -> Conductor [label = "Creates the FAT32 image containing Ironic API URL and driver name"];
Conductor -> ConductorWebserver [label = "Uploads the FAT32 image"];
Conductor -> Conductor [label = "Generates URL for FAT32 image"];
Conductor -> iLO [label = "Attaches the FAT32 image URL as virtual media floppy"];
Conductor -> iLO [label = "Attaches the deploy ISO URL as virtual media CDROM"];
Conductor -> iLO [label = "Sets one time boot to CDROM"];
Conductor -> iLO [label = "Reboot the node"];
iLO -> Webserver [label = "Downloads deploy ISO"];
Baremetal -> iLO [label = "Boots deploy kernel/ramdisk from iLO virtual media CDROM"];
IPA -> Conductor [label = "Lookup node"];
Conductor -> IPA [label = "Provides node UUID"];
IPA -> Conductor [label = "Heartbeat"];
Conductor -> IPA [label = "Sends the user image HTTP(S) URL"];
IPA -> Webserver [label = "Retrieves the user image on bare metal"];
IPA -> IPA [label = "Writes user image to disk"];
IPA -> Conductor [label = "Heartbeat"];
Conductor -> Baremetal [label = "Sets boot device to disk"];
Conductor -> IPA [label = "Power off the node"];
Conductor -> Baremetal [label = "Power on the node"];
Baremetal -> Baremetal [label = "Boot user image from disk"];
}
.. figure:: ./../../images/standalone-ironic.svg
:width: 100%
Activating iLO Advanced license as manual clean step
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -1687,9 +1535,9 @@ An example of a manual clean step with ``create_csr`` as the only clean step cou
}
}]
The ``[ilo]cert_path`` option in ``ironic.conf`` is used as the directory path for
The :oslo.config:option:`ilo.cert_path` option in ``ironic.conf`` is used as the directory path for
creating the CSR, which defaults to ``/var/lib/ironic/ilo``. The CSR is created in the directory location
given in ``[ilo]cert_path`` in ``node_uuid`` directory as <node_uuid>.csr.
given in :oslo.config:option:`ilo.cert_path` in ``node_uuid`` directory as <node_uuid>.csr.
Add HTTPS Certificate as manual clean step
@ -1711,7 +1559,7 @@ An example of a manual clean step with ``add_https_certificate`` as the only cle
Argument ``cert_file`` is mandatory. The ``cert_file`` takes the path or url of the certificate file.
The url schemes supported are: ``file``, ``http`` and ``https``.
The CSR generated in step ``create_csr`` needs to be signed by a valid CA and the resultant HTTPS certificate should
be provided in ``cert_file``. It copies the ``cert_file`` to ``[ilo]cert_path`` under ``node.uuid`` as <node_uuid>.crt
be provided in ``cert_file``. It copies the ``cert_file`` to :oslo.config:option:`ilo.cert_path` under ``node.uuid`` as <node_uuid>.crt
before adding it to iLO.
RAID Support
@ -1738,7 +1586,7 @@ configuration of RAID:
DIB support for Proliant Hardware Manager
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Install ``ironic-python-agent-builder`` following the guide [1]_
Install `ironic-python-agent-builder`_
To create an agent ramdisk with ``Proliant Hardware Manager``,
use the ``proliant-tools`` element in DIB::
@ -1770,7 +1618,7 @@ This clean step is performed as part of automated cleaning and it is disabled
by default. See :ref:`InbandvsOutOfBandCleaning` for more information on
enabling/disabling a clean step.
Install ``ironic-python-agent-builder`` following the guide [1]_
Install `ironic-python-agent-builder`_.
To create an agent ramdisk with ``Proliant Hardware Manager``, use the
``proliant-tools`` element in DIB::
@ -1970,7 +1818,7 @@ refer to `HPE Integrated Lights-Out REST API Documentation <https://hewlettpacka
Allowed values are ``Enabled``, ``Disabled``.
- ``WorkloadProfile``:
Change the Workload Profile to accomodate your desired workload.
Change the Workload Profile to accommodate your desired workload.
Allowed values are ``GeneralPowerEfficientCompute``,
``GeneralPeakFrequencyCompute``, ``GeneralThroughputCompute``,
``Virtualization-PowerEfficient``, ``Virtualization-MaxPerformance``,
@ -1990,7 +1838,7 @@ the node's ``driver_info``. To update SSL certificates into iLO,
refer to `HPE Integrated Lights-Out Security Technology Brief <http://h20564.www2.hpe.com/hpsc/doc/public/display?docId=c04530504>`_.
Use iLO hostname or IP address as a 'Common Name (CN)' while
generating Certificate Signing Request (CSR). Use the same value as
`ilo_address` while enrolling node to Bare Metal service to avoid SSL
``ilo_address`` while enrolling node to Bare Metal service to avoid SSL
certificate validation errors related to hostname mismatch.
Rescue mode support
@ -2036,7 +1884,7 @@ soft power operations on a server:
[--power-timeout <power-timeout>] <node>
.. note::
The configuration ``[conductor]soft_power_off_timeout`` is used as a
The configuration :oslo.config:option:`conductor.soft_power_off_timeout` is used as a
default timeout value when no timeout is provided while invoking
hard or soft power operations.
@ -2206,7 +2054,7 @@ Events subscription
^^^^^^^^^^^^^^^^^^^
Events subscription is supported by ``ilo`` and ``ilo5`` hardware types with
``ilo`` vendor interface for Gen10 and Gen10 Plus servers. See
:ref:`node-vendor-passthru-methods` for more information.
:doc:`redfish/passthru` for more information.
Anaconda based deployment
^^^^^^^^^^^^^^^^^^^^^^^^^
@ -2227,5 +2075,5 @@ more information.
.. _`Guidelines for SPP ISO`: https://h17007.www1.hpe.com/us/en/enterprise/servers/products/service_pack/spp
.. _`SUM`: https://h17007.www1.hpe.com/us/en/enterprise/servers/products/service_pack/hpsum/index.aspx
.. _`SUM User Guide`: https://h20565.www2.hpe.com/hpsc/doc/public/display?docId=c05210448
.. [1] `ironic-python-agent-builder`: https://docs.openstack.org/ironic-python-agent-builder/latest/install/index.html
.. _`ironic-python-agent-builder`: https://docs.openstack.org/ironic-python-agent-builder/latest/install/index.html
.. _`HPE Integrated Lights-Out Security Technology Brief`: http://h20564.www2.hpe.com/hpsc/doc/public/display?docId=c04530504

View file

@ -94,8 +94,8 @@ A node with Intel SST-PP can be configured to use it via
* ``intel_speedselect_config``:
Hexadecimal code of Intel SST-PP configuration. Accepted values are
'0x00', '0x01', '0x02'. These values correspond to
`Intel SST-PP Config Base`, `Intel SST-PP Config 1`,
`Intel SST-PP Config 2` respectively. The input value must be a string.
``Intel SST-PP Config Base``, ``Intel SST-PP Config 1``,
``Intel SST-PP Config 2`` respectively. The input value must be a string.
* ``socket_count``:
Number of sockets in the node. The input value must be a positive

View file

@ -58,14 +58,14 @@ Steps to enable proxies
sensitive information. Refer to your proxy server's documentation to
complete this step.
#. Set ``[glance]swift_temp_url_cache_enabled`` in the ironic conductor config
#. Set :oslo.config:option:`glance.swift_temp_url_cache_enabled` in the ironic conductor config
file to ``True``. The conductor will reuse the cached swift temporary URLs
instead of generating new ones each time an image is requested, so that the
proxy server does not create new cache entries for the same image, based on
the query part of the URL (as it contains some query parameters that change
each time it is regenerated).
#. Set ``[glance]swift_temp_url_expected_download_start_delay`` option in the
#. Set :oslo.config:option:`glance.swift_temp_url_expected_download_start_delay` option in the
ironic conductor config file to the value appropriate for your hardware.
This is the delay (in seconds) from the time of the deploy request (when
the swift temporary URL is generated) to when the URL is used for the image
@ -74,15 +74,15 @@ Steps to enable proxies
temporary URL duration is large enough to let the image download begin. Also
if temporary URL caching is enabled, this will determine if a cached entry
will still be valid when the download starts. It is used only if
``[glance]swift_temp_url_cache_enabled`` is ``True``.
:oslo.config:option:`glance.swift_temp_url_cache_enabled` is ``True``.
#. Increase ``[glance]swift_temp_url_duration`` option in the ironic conductor
#. Increase :oslo.config:option:`glance.swift_temp_url_duration` option in the ironic conductor
config file, as only non-expired links to images will be returned from the
swift temporary URLs cache. This means that if
``swift_temp_url_duration=1200`` then after 20 minutes a new image will be
cached by the proxy server as the query in its URL will change. The value of
this option must be greater than or equal to
``[glance]swift_temp_url_expected_download_start_delay``.
:oslo.config:option:`glance.swift_temp_url_expected_download_start_delay`.
#. Add one or more of ``image_http_proxy``, ``image_https_proxy``,
``image_no_proxy`` to driver_info properties in each node that will use the

View file

@ -1,3 +1,10 @@
.. meta::
:description: Configure Ironic IPMI driver using ipmitool for legacy server management. Power control, console access, and hardware monitoring via IPMI protocol.
:keywords: ipmi driver, ipmitool, legacy servers, power management, console access, hardware monitoring, baseboard management controller
:author: OpenStack Ironic Team
:robots: index, follow
:audience: system administrators, hardware engineers
===========
IPMI driver
===========
@ -82,6 +89,28 @@ with an IPMItool-based driver. For example::
--driver-info ipmi_username=<username> \
--driver-info ipmi_password=<password>
Changing The Default IPMI Credential Persistence Method
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ``store_cred_in_env``: :oslo.config:option:`ipmi.store_cred_in_env`.
The ``store_cred_in_env`` configuration option allow users to switch
between file-based and environment variable persistence methods for
IPMI password.
For the temporary file option, long lived IPMI sessions, such as those for
console support, leave files with credentials on the conductor disk for the
duration of the session.
To switch to environment variable persistence, set the
``store_cred_in_env`` parameter to ``True`` in the configuration file:
.. code-block:: ini
[ipmi]
store_cred_in_env = True
Advanced configuration
======================
@ -202,10 +231,10 @@ a value that can be used from the list provided (from last to first):
.. code-block:: ini
[ipmi]
cipher_suite_versions = ['1','2','3','6','7','8','11','12']
cipher_suite_versions = 1,2,3,6,7,8,11,12
To find the suitable values for this configuration, you can check the field
`RMCP+ Cipher Suites` after running an ``ipmitool`` command, e.g:
``RMCP+ Cipher Suites`` after running an ``ipmitool`` command, e.g:
.. code-block:: console

Some files were not shown because too many files have changed in this diff Show more