File openstack-ironic.spec of Package openstack-ironic

#
# spec file for package openstack-ironic
#
# Copyright (c) 2025 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.

# Please submit bugfixes or comments via https://bugs.opensuse.org/
#


%global pythons %{primary_python}
Name:           openstack-ironic
Version:        32.0.0
Release:        0
Summary:        Openstack Provisioning of Bare Metal Servers
License:        Apache-2.0
URL:            https://docs.openstack.org/ironic
Source0:        https://files.pythonhosted.org/packages/source/i/ironic/ironic-%{version}.tar.gz
Source2:        openstack-ironic.logrotate
Source3:        openstack-ironic.tmpfiles
Source4:        openstack-ironic.defaultconf
Source5:        openstack-ironic.README.config
# systemd service files
Source6:        openstack-ironic-api.service
Source7:        openstack-ironic-conductor.service
Patch1:         0001-Fix-singleprocess-launcher-compatibility-with-oslo.s.patch
BuildRequires:  %{python_module Jinja2}
BuildRequires:  %{python_module SQLAlchemy}
BuildRequires:  %{python_module WebOb}
BuildRequires:  %{python_module alembic}
BuildRequires:  %{python_module automaton}
BuildRequires:  %{python_module cheroot}
BuildRequires:  %{python_module cinderclient}
BuildRequires:  %{python_module construct}
BuildRequires:  %{python_module ddt}
BuildRequires:  %{python_module eventlet}
BuildRequires:  %{python_module fixtures}
BuildRequires:  %{python_module futurist}
#BuildRequires:  %{python_module glanceclient}
BuildRequires:  %{python_module iso8601}
BuildRequires:  %{python_module jsonpatch}
BuildRequires:  %{python_module jsonschema}
BuildRequires:  %{python_module keystoneauth1}
BuildRequires:  %{python_module keystonemiddleware}
BuildRequires:  %{python_module microversion-parse}
BuildRequires:  %{python_module openstacksdk}
BuildRequires:  %{python_module os-traits}
BuildRequires:  %{python_module oslo.concurrency}
BuildRequires:  %{python_module oslo.config}
BuildRequires:  %{python_module oslo.context}
BuildRequires:  %{python_module oslo.db}
BuildRequires:  %{python_module oslo.i18n}
BuildRequires:  %{python_module oslo.log}
BuildRequires:  %{python_module oslo.messaging}
BuildRequires:  %{python_module oslo.middleware}
BuildRequires:  %{python_module oslo.policy}
BuildRequires:  %{python_module oslo.reports}
BuildRequires:  %{python_module oslo.rootwrap}
BuildRequires:  %{python_module oslo.serialization}
BuildRequires:  %{python_module oslo.service}
BuildRequires:  %{python_module oslo.upgradecheck}
BuildRequires:  %{python_module oslo.utils}
BuildRequires:  %{python_module oslo.versionedobjects}
BuildRequires:  %{python_module oslotest}
BuildRequires:  %{python_module osprofiler}
BuildRequires:  %{python_module pbr}
BuildRequires:  %{python_module pecan}
BuildRequires:  %{python_module psutil}
BuildRequires:  %{python_module pycdlib}
BuildRequires:  %{python_module pysendfile}
BuildRequires:  %{python_module pysnmp-lextudio}
BuildRequires:  %{python_module pytz}
BuildRequires:  %{python_module requests}
BuildRequires:  %{python_module rfc3986}
BuildRequires:  %{python_module stestr}
BuildRequires:  %{python_module stevedore}
BuildRequires:  %{python_module sushy}
BuildRequires:  %{python_module websockify}
#BuildRequires:  %{python_module swiftclient}
BuildRequires:  %{python_module tenacity}
BuildRequires:  %{python_module testtools}
BuildRequires:  %{python_module tooz}
BuildRequires:  %{python_module zeroconf}
BuildRequires:  openstack-macros
Requires:       logrotate
Requires:       python3-ironic = %{version}-%{release}
Provides:       group(ironic)
Provides:       user(ironic)
BuildArch:      noarch
BuildRequires:  qemu-img
BuildRequires:  systemd-rpm-macros
%{?systemd_requires}

%description
Ironic is an Incubated OpenStack project which aims to provision bare metal
machines instead of virtual machines, forked from the Nova Baremetal driver.
It is best thought of as a bare metal hypervisor API and a set of plugins
which interact with the bare metal hypervisors. By default, it will use
PXE and IPMI in concert to provision and turn on/off machines, but Ironic
also supports vendor-specific plugins which may implement additional functionality.

%package -n     python3-ironic
Summary:        OpenStack shared file system service (ironic) - Python module
Group:          Development/Languages/Python
Requires:       python3-Jinja2
Requires:       python3-SQLAlchemy
Requires:       python3-WebOb
Requires:       python3-alembic
Requires:       python3-automaton
Requires:       python3-cheroot
Requires:       python3-cinderclient
Requires:       python3-construct
Requires:       python3-eventlet
Requires:       python3-futurist
Requires:       python3-glanceclient
Requires:       python3-jsonpatch
Requires:       python3-jsonschema
Requires:       python3-keystoneauth1
Requires:       python3-keystonemiddleware
Requires:       python3-microversion-parse
Requires:       python3-openstacksdk
Requires:       python3-os-traits
Requires:       python3-oslo.concurrency
Requires:       python3-oslo.config
Requires:       python3-oslo.context
Requires:       python3-oslo.db
Requires:       python3-oslo.log
Requires:       python3-oslo.messaging
Requires:       python3-oslo.middleware
Requires:       python3-oslo.policy
Requires:       python3-oslo.serialization
Requires:       python3-oslo.service
Requires:       python3-oslo.upgradecheck
Requires:       python3-oslo.utils
Requires:       python3-oslo.versionedobjects
Requires:       python3-osprofiler
Requires:       python3-pbr
Requires:       python3-pecan
Requires:       python3-psutil
Requires:       python3-pycdlib
Requires:       python3-pysendfile
Requires:       python3-pytz
Requires:       python3-requests
Requires:       python3-rfc3986
Requires:       python3-stevedore
Requires:       python3-sushy
Requires:       python3-swiftclient
Requires:       python3-tenacity
Requires:       python3-tooz
Requires:       python3-websockify
Requires:       python3-zeroconf

%description -n python3-ironic
This package contains the core code of OpenStack Ironic.

%package doc
Summary:        OpenStack bare metal provisioning service (ironic) - Documentation
Group:          Documentation/HTML
BuildRequires:  python3-Sphinx
BuildRequires:  python3-openstackdocstheme
BuildRequires:  python3-sphinxcontrib-apidoc
BuildRequires:  python3-sphinxcontrib-httpdomain
BuildRequires:  python3-sphinxcontrib-pecanwsme
BuildRequires:  python3-sphinxcontrib-seqdiag
BuildRequires:  python3-sphinxcontrib-svg2pdfconverter

%description doc
OpenStack bare metal provisioning service.
This package contains the Documentation.

%package api
Summary:        OpenStack Ironic - API
Group:          System/Management
Requires:       openstack-ironic = %{version}-%{release}

%description api
This package contains the OpenStack Ironic API Daemon.

%package conductor
Summary:        OpenStack Ironic - Conductor
Group:          System/Management
Requires:       openstack-ironic = %{version}-%{release}

%description conductor
This package contains the OpenStack Ironic Conductor Manager Daemon.

%prep
%autosetup -p1 -n ironic-%{version}

%build
%py3_build

PYTHONPATH=. PBR_VERSION=%{version} sphinx-build --keep-going -b html doc/source doc/build/html
PYTHONPATH=. PBR_VERSION=%{version} sphinx-build --keep-going -b man doc/source doc/build/man
# remove the Sphinx-build leftovers
rm -rf doc/build/html/.{doctrees,buildinfo}
rm -rf doc/build/man/.{doctrees,buildinfo}

%install
%py3_install

### Setup directories
install -d -m 750 %{buildroot}%{_localstatedir}/{lib,log,cache}/ironic
install -d -m 755 %{buildroot}%{_sysconfdir}/ironic
install -d -m 755 %{buildroot}%{_sysconfdir}/ironic/ironic.conf.d/
install -d -m 700 %{buildroot}%{_localstatedir}/run/ironic

### Install configuration files
install -D -m 644 %{SOURCE3} %{buildroot}/%{_tmpfilesdir}/ironic.conf
install -p -D -m 640 %{SOURCE4} %{buildroot}%{_sysconfdir}/ironic/ironic.conf.d/010-ironic.conf
install -p -D -m 640 %{SOURCE5} %{buildroot}%{_sysconfdir}/ironic/README.config

### Install systemd service files
install -p -D -m 644 %{SOURCE6} %{buildroot}%{_unitdir}/%{name}-api.service
install -p -D -m 644 %{SOURCE7} %{buildroot}%{_unitdir}/%{name}-conductor.service

### Install logrotate
install -p -D -m 644 %{SOURCE2} %{buildroot}%{_sysconfdir}/logrotate.d/openstack-ironic

rm -rf %{buildroot}%{_datadir}/ironic/vnc-container/

### man pages
mkdir -p %{buildroot}%{_mandir}/man1
install -p -D -m 644 doc/build/man/*.1 %{buildroot}%{_mandir}/man1/

%check
export LC_ALL=en_US.UTF-8
%{openstack_stestr_run}

%pre
%openstack_pre_user_group_create ironic ironic /sbin/nologin

%post
%tmpfiles_create %{_tmpfilesdir}/ironic.conf

%pre api
%service_add_pre %{name}-api.service

%post api
%service_add_post %{name}-api.service

%preun api
%service_del_preun %{name}-api.service

%postun api
%service_del_postun %{name}-api.service

%pre conductor
%service_add_pre %{name}-conductor.service

%post conductor
%service_add_post %{name}-conductor.service

%preun conductor
%service_del_preun %{name}-conductor.service

%postun conductor
%service_del_postun %{name}-conductor.service

%files
%doc README.rst
%license LICENSE
%dir %attr(0750, ironic, ironic) %{_localstatedir}/lib/ironic
%dir %attr(0750, ironic, ironic) %{_localstatedir}/cache/ironic
%dir %attr(0750, ironic, ironic) %{_localstatedir}/log/ironic
%{_tmpfilesdir}/ironic.conf
%dir %{_sysconfdir}/ironic
%dir %{_sysconfdir}/ironic/ironic.conf.d/
%{_sysconfdir}/ironic/README.config
%config(noreplace) %{_sysconfdir}/logrotate.d/openstack-ironic
%config(noreplace) %attr(0640, root, ironic) %{_sysconfdir}/ironic/ironic.conf.d/010-ironic.conf
%{_bindir}/ironic
%{_bindir}/ironic-novncproxy
%{_bindir}/ironic-pxe-filter
%{_bindir}/ironic-status
%{_bindir}/ironic-dbsync
%{_mandir}/man1/ironic.1%{?ext_man}

%files -n python3-ironic
%license LICENSE
%{python3_sitelib}/ironic/
%{python3_sitelib}/ironic-*.egg-info

%files doc
%license LICENSE
%doc doc/build/html

%files api
%license LICENSE
%{_unitdir}/%{name}-api.service
%{_bindir}/ironic-api

%files conductor
%license LICENSE
%{_unitdir}/%{name}-conductor.service
%{_bindir}/ironic-conductor

%changelog
openSUSE Build Service is sponsored by