Compare commits

..

No commits in common. "cad912ebf2f5fc7fcabae4379f1412e11c39d88f" and "19a5842b2a5e56c6b13bd4f8e1f017d79f5c8024" have entirely different histories.

13 changed files with 280 additions and 319 deletions

View File

@ -1,98 +0,0 @@
diff --git a/ironic/api/controllers/v1/utils.py b/ironic/api/controllers/v1/utils.py
index 2949325..5c13d2a 100644
--- a/ironic/api/controllers/v1/utils.py
+++ b/ironic/api/controllers/v1/utils.py
@@ -42,7 +42,8 @@ from ironic import objects
CONF = cfg.CONF
-_JSONPATCH_EXCEPTIONS = (jsonpatch.JsonPatchException,
+_JSONPATCH_EXCEPTIONS = (jsonpatch.JsonPatchConflict,
+ jsonpatch.JsonPatchException,
jsonpatch.JsonPointerException,
KeyError,
IndexError)
diff --git a/ironic/tests/unit/api/controllers/v1/test_deploy_template.py b/ironic/tests/unit/api/controllers/v1/test_deploy_template.py
index 049a21f..d30b763 100644
--- a/ironic/tests/unit/api/controllers/v1/test_deploy_template.py
+++ b/ironic/tests/unit/api/controllers/v1/test_deploy_template.py
@@ -361,7 +361,8 @@ class TestPatch(BaseDeployTemplatesAPITest):
self.assertEqual('application/json', response.content_type)
self.assertEqual(http_client.BAD_REQUEST, response.status_code)
self.assertTrue(response.json['error_message'])
- self.assertIn(error_msg, response.json['error_message'])
+ #self.assertIn(error_msg, response.json['error_message'])
+ self.assertRegex(response.json['error_message'], error_msg)
self.assertFalse(mock_save.called)
return response
@@ -539,7 +540,8 @@ class TestPatch(BaseDeployTemplatesAPITest):
}
patch = [{'path': '/steps/1', 'op': 'replace', 'value': step}]
self._test_update_bad_request(
- mock_save, patch, "list assignment index out of range")
+ mock_save, patch, "list assignment index out of range|"
+ "can't replace outside of list")
def test_replace_empty_step_list_fail(self, mock_save):
patch = [{'path': '/steps', 'op': 'replace', 'value': []}]
@@ -567,7 +569,7 @@ class TestPatch(BaseDeployTemplatesAPITest):
def test_remove_foo(self, mock_save):
self._test_remove_not_allowed(
- mock_save, 'foo', "can't remove non-existent object 'foo'")
+ mock_save, 'foo', "can't remove a non-existent object 'foo'")
def test_replace_step_invalid_interface(self, mock_save):
patch = [{'path': '/steps/0/interface', 'op': 'replace',
@@ -634,12 +636,12 @@ class TestPatch(BaseDeployTemplatesAPITest):
patch = [{'path': '/non-existent', 'op': 'remove'}]
self._test_update_bad_request(
mock_save, patch,
- "can't remove non-existent object 'non-existent'")
+ "can't remove a non-existent object 'non-existent'")
def test_remove_non_existent_step_fail(self, mock_save):
patch = [{'path': '/steps/1', 'op': 'remove'}]
self._test_update_bad_request(
- mock_save, patch, "can't remove non-existent object '1'")
+ mock_save, patch, "can't remove a non-existent object '1'")
def test_remove_only_step_fail(self, mock_save):
patch = [{'path': '/steps/0', 'op': 'remove'}]
@@ -650,12 +652,12 @@ class TestPatch(BaseDeployTemplatesAPITest):
patch = [{'path': '/steps/0/non-existent', 'op': 'remove'}]
self._test_update_bad_request(
mock_save, patch,
- "can't remove non-existent object 'non-existent'")
+ "can't remove a non-existent object 'non-existent'")
def test_add_root_non_existent(self, mock_save):
patch = [{'path': '/foo', 'value': 'bar', 'op': 'add'}]
self._test_update_bad_request(
- mock_save, patch, "Adding a new attribute (/foo)")
+ mock_save, patch, "Adding a new attribute \(/foo\)")
def test_add_too_high_index_step_fail(self, mock_save):
step = {
diff --git a/ironic/tests/unit/api/controllers/v1/test_utils.py b/ironic/tests/unit/api/controllers/v1/test_utils.py
index d18fded..1c7d842 100644
--- a/ironic/tests/unit/api/controllers/v1/test_utils.py
+++ b/ironic/tests/unit/api/controllers/v1/test_utils.py
@@ -105,7 +105,7 @@ class TestApiUtils(base.TestCase):
doc = {}
patch = [{"op": "remove", "path": "/foo"}]
self.assertRaisesRegex(exception.PatchError,
- "can't remove non-existent object 'foo'",
+ "can't remove a non-existent object 'foo'",
utils.apply_jsonpatch, doc, patch)
def test_apply_jsonpatch_replace_non_existent_list_item(self):
@@ -113,6 +113,7 @@ class TestApiUtils(base.TestCase):
doc = []
patch = [{"op": "replace", "path": "/0", "value": 42}]
self.assertRaisesRegex(exception.PatchError,
+ "can't replace outside of list|"
"list assignment index out of range",
utils.apply_jsonpatch, doc, patch)

Binary file not shown.

View File

@ -1,4 +0,0 @@
[DEFAULT]
log_dir = /var/log/ironic
state_path = /var/lib/ironic
use_stderr = False

Binary file not shown.

View File

@ -1,7 +0,0 @@
/var/log/ironic/*.log {
rotate 14
size 10M
missingok
compress
copytruncate
}

View File

@ -1,13 +1,17 @@
[Unit]
Description=OpenStack Ironic API service
Description=OpenStack Ironic - API
After=syslog.target network.target
After=mariadb.service postgresql.service rabbitmq-server.service
[Service]
Type=simple
Type=notify
User=ironic
Group=ironic
WorkingDirectory=/var/lib/ironic
PrivateTmp=yes
ExecStartPre=-/usr/bin/ironic-dbsync
ExecStart=/usr/bin/ironic-api
Restart=on-failure
[Install]
WantedBy=multi-user.target

View File

@ -1,13 +1,16 @@
[Unit]
Description=OpenStack Ironic Conductor service
Description=OpenStack Ironic - Conductor
After=syslog.target network.target
After=mariadb.service postgresql.service rabbitmq-server.service
[Service]
Type=simple
Type=notify
User=ironic
Group=ironic
WorkingDirectory=/var/lib/ironic
PrivateTmp=yes
ExecStart=/usr/bin/ironic-conductor
Restart=on-failure
[Install]
WantedBy=multi-user.target

View File

@ -0,0 +1,30 @@
The main service configuration (/etc/$project/$project.conf) can still be used
for configuration but the preferred way is to add config file snippets into
/etc/$project/$project.conf.d/ instead.
As part of the packaging, the package itself installs a config snippet at
/etc/$project/$project.conf.d/010-$project.conf with basic configuration. This
file should not be modified. In case there is a need to overwrite or add
settings, a XXX-$project.conf (XXX being a 3 digit number) should be created
instead.
Config directory file snippet naming should follow these conventions:
- snippets should start with "XXX-" where "X" is a number
- snippets must end with ".conf"
- config management systems (Crowbar, Salt, ...) should use numbers
between 100 and 499
- users should use numbers starting from 500
Configuring just a single $program (eg for Nova, $project is "nova" and
$program is "nova-api", "nova-compute", "nova-scheduler", ...) can be done
in a similar way. The config snippets should be placed in
/etc/$project/$program.conf.d/ . The same snippets rules apply here, too.
$program reads the configuration files in the following order:
- /etc/$project/$project.conf
- /etc/$project/$project.conf.d/*.conf (lexically sorted)
- /etc/$project/$program.conf.d/*.conf (lexically sorted)
The last configured key overwrites all previous ones. In particular, settings
in /etc/$project/$project.conf are overwritten by config values from any file
in /etc/$project/$project.conf.d/XXX-$project.conf .

View File

@ -0,0 +1,7 @@
[DEFAULT]
log_dir = /var/log/ironic
rootwrap_config = /etc/ironic/rootwrap.conf
state_path = /var/lib/ironic
[oslo_concurrency]
lock_path = /run/ironic

View File

@ -0,0 +1,10 @@
/var/log/ironic/*.log {
compress
rotate 15
size 1M
dateext
missingok
notifempty
su ironic ironic
sharedscripts
}

View File

@ -1,51 +1,42 @@
%global full_release ironic-%{version}
%{!?upstream_version: %global upstream_version %{version}%{?milestone}}
%global with_doc 1
Name: openstack-ironic
# Liberty semver reset
# https://review.openstack.org/#/q/I1a161b2c1d1e27268065b6b4be24c8f7a5315afb,n,z
Summary: OpenStack Baremetal Hypervisor API (ironic)
Version: 13.0.7
Release: 4
Epoch: 0
Version: 16.0.4
Release: 0.2.dev3
Summary: Openstack Provisioning of Bare Metal Servers
License: ASL 2.0
URL: http://www.openstack.org
Source0: https://tarballs.openstack.org/ironic/ironic-%{version}.tar.gz
Source1: openstack-ironic-api.service
Source2: openstack-ironic-conductor.service
Source3: ironic-rootwrap-sudoers
Source4: ironic-dist.conf
Source5: ironic.logrotate
Patch0: Fix-jsonpatch-related-tests.patch
BuildArch: noarch
URL: https://launchpad.net/ironic
Source0: ironic-stable-victoria.tar.gz
Source1: openstack-ironic.sudoers
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
BuildRequires: openstack-macros
BuildRequires: python3-setuptools
BuildRequires: python3-devel
BuildRequires: python3-pbr
BuildRequires: openssl-devel
BuildRequires: libxml2-devel
BuildRequires: libxslt-devel
BuildRequires: gmp-devel
BuildRequires: python3-sphinx
BuildRequires: systemd
# Required to run unit tests
BuildRequires: python3-jinja2
BuildRequires: python3-sqlalchemy
BuildRequires: python3-wsme
BuildRequires: python3-webob
BuildRequires: python3-alembic
BuildRequires: python3-automaton
BuildRequires: python3-cinderclient
BuildRequires: python3-ddt
BuildRequires: python3-eventlet
BuildRequires: python3-fixtures
BuildRequires: python3-futurist
BuildRequires: python3-glanceclient
BuildRequires: python3-jinja2
BuildRequires: python3-ironic-lib
BuildRequires: python3-iso8601
BuildRequires: python3-jsonpatch
BuildRequires: python3-jsonschema
BuildRequires: python3-keystoneauth1
BuildRequires: python3-keystonemiddleware
BuildRequires: python3-mock
BuildRequires: python3-neutronclient
BuildRequires: python3-openstacksdk
BuildRequires: python3-os-traits
BuildRequires: python3-oslo-concurrency
BuildRequires: python3-oslo-config
BuildRequires: python3-oslo-context
@ -64,242 +55,266 @@ BuildRequires: python3-oslo-utils
BuildRequires: python3-oslo-versionedobjects
BuildRequires: python3-oslotest
BuildRequires: python3-osprofiler
BuildRequires: python3-os-traits
BuildRequires: python3-pbr
BuildRequires: python3-pecan
BuildRequires: python3-psutil
BuildRequires: python3-pysendfile
BuildRequires: python3-pysnmp
BuildRequires: python3-pytz
BuildRequires: python3-requests
BuildRequires: python3-scciclient
BuildRequires: python3-sqlalchemy
BuildRequires: python3-retrying
BuildRequires: python3-rfc3986
BuildRequires: python3-stestr
BuildRequires: python3-stevedore
BuildRequires: python3-sushy
BuildRequires: python3-swiftclient
BuildRequires: python3-testresources
BuildRequires: python3-testscenarios
BuildRequires: python3-testtools
BuildRequires: python3-tooz
BuildRequires: python3-dracclient
BuildRequires: python3-ironic-lib
BuildRequires: python3-proliantutils
BuildRequires: python3-tenacity
BuildRequires: python3-webob
BuildRequires: python3-pysendfile
BuildRequires: python3-wsme
Requires: %{name}-api = %{version}-%{release}
Requires: %{name}-conductor = %{version}-%{release}
BuildRequires: sudo
Requires: logrotate
Requires: python3-ironic = %{epoch}:%{version}-%{release}
BuildArch: noarch
%if 0%{?suse_version}
BuildRequires: systemd-rpm-macros
%{?systemd_requires}
%else
BuildRequires: systemd
Requires(post): systemd
Requires(postun): systemd
Requires(pre): shadow-utils
Requires(preun): systemd
%endif
%description
Ironic provides an API for management and provisioning of physical machines
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
Requires: python3-alembic
Requires: python3-automaton
Requires: python3-cinderclient
Requires: python3-eventlet
Requires: python3-futurist
Requires: python3-glanceclient
Requires: python3-ironic-lib
Requires: python3-jinja2
Requires: python3-jsonpatch
Requires: python3-jsonschema
Requires: python3-keystoneauth1
Requires: python3-keystonemiddleware
Requires: python3-openstacksdk
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-rootwrap
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-os-traits
Requires: python3-pbr
Requires: python3-pecan
Requires: python3-psutil
Requires: python3-pytz
Requires: python3-requests
Requires: python3-rfc3986
Requires: python3-sqlalchemy
Requires: python3-stevedore
Requires: python3-swiftclient
Requires: python3-tenacity
Requires: python3-tooz
Requires: python3-webob
Requires: python3-wsme
Requires: python3-pysendfile
Requires(pre): shadow-utils
%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-wsme
Requires: python3-webob
Requires: python3-alembic
Requires: python3-automaton
Requires: python3-cinderclient
Requires: python3-eventlet
Requires: python3-futurist
Requires: python3-glanceclient
Requires: python3-ironic-lib
Requires: python3-jsonpatch
Requires: python3-jsonschema
Requires: python3-keystoneauth1
Requires: python3-keystonemiddleware
Requires: python3-neutronclient
Requires: python3-os-traits
Requires: python3-oslo-concurrency
Requires: python3-oslo-config
Requires: python3-oslo-context
Requires: python3-oslo-db
Requires: python3-oslo-i18n
Requires: python3-oslo-log
Requires: python3-oslo-messaging
Requires: python3-oslo-middleware
Requires: python3-oslo-policy
Requires: python3-oslo-reports
Requires: python3-oslo-rootwrap
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-pysendfile
Requires: python3-pysnmp
Requires: python3-pytz
Requires: python3-requests
Requires: python3-retrying
Requires: python3-rfc3986
Requires: python3-stevedore
Requires: python3-swiftclient
Requires: python3-tooz
Requires: sudo
%description -n python3-ironic
This package contains the core code of OpenStack Ironic.
%package common
Summary: Ironic common
Requires: python3-ironic = %{version}-%{release}
%if 0%{?with_doc}
%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 common
Components common to all OpenStack Ironic services
%description doc
OpenStack bare metal provisioning service.
This package contains the Documentation.
%endif
%package api
Summary: OpenStack Ironic - API
Requires: %{name}-common = %{version}-%{release}
Group: System/Management
Requires: openstack-ironic = %{epoch}:%{version}-%{release}
%description api
This package contains the OpenStack Ironic API Daemon.
%package conductor
Summary: OpenStack Ironic - Conductor
Requires: %{name}-common = %{version}-%{release}
Group: System/Management
Requires: openstack-ironic = %{epoch}:%{version}-%{release}
%description conductor
This package contains the OpenStack Ironic Conductor Manager Daemon.
%package -n python3-ironic-tests
Summary: Ironic unit tests
Requires: %{name}-common = %{version}-%{release}
Requires: python3-mock
Requires: python3-oslotest
Requires: python3-stestr
Requires: python3-testresources
Requires: python3-testscenarios
Requires: python3-testtools
%description -n python3-ironic-tests
This package contains the Ironic test files.
%prep
# Required for tarball sources verification
%setup -q -n ironic-%{upstream_version}
%patch0 -p1
# Let RPM handle the requirements
%autosetup -p1 -n ironic-16.0.4.dev3
%py_req_cleanup
# Remove tempest plugin entrypoint as a workaround
sed -i '/tempest/d' setup.cfg
rm -rf ironic_tempest_plugin
%build
%{py3_build}
%if 0%{?with_doc}
PYTHONPATH=. PBR_VERSION=16.0.4.dev3 sphinx-build --keep-going -b html doc/source doc/build/html
PYTHONPATH=. PBR_VERSION=16.0.4.dev3 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}
%endif
%install
%{py3_install}
install -p -D -m 644 %{SOURCE5} %{buildroot}%{_sysconfdir}/logrotate.d/openstack-ironic
### 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 systemd scripts
mkdir -p %{buildroot}%{_unitdir}
install -p -D -m 644 %{SOURCE1} %{buildroot}%{_unitdir}
install -p -D -m 644 %{SOURCE2} %{buildroot}%{_unitdir}
### 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
mv %{buildroot}%{_prefix}%{_sysconfdir}/ironic/* %{buildroot}%{_sysconfdir}/ironic/
cp -a etc/ironic/rootwrap.d/ %{buildroot}%{_sysconfdir}/ironic/
install -p -D -m 640 %{SOURCE5} %{buildroot}%{_sysconfdir}/ironic/README.config
# install sudoers file
mkdir -p %{buildroot}%{_sysconfdir}/sudoers.d
install -p -D -m 440 %{SOURCE3} %{buildroot}%{_sysconfdir}/sudoers.d/ironic
### 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
mkdir -p %{buildroot}%{_sharedstatedir}/ironic/
mkdir -p %{buildroot}%{_localstatedir}/log/ironic/
mkdir -p %{buildroot}%{_sysconfdir}/ironic/rootwrap.d
### install symlinks on SUSE
%if 0%{?suse_version}
mkdir -p %{buildroot}%{_sbindir}
ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rc%{name}-api
ln -s %{_sbindir}/service %{buildroot}%{_sbindir}/rc%{name}-conductor
%endif
#Populate the conf dir
export PYTHONPATH=.
oslo-config-generator --config-file tools/config/ironic-config-generator.conf --output-file %{buildroot}/%{_sysconfdir}/ironic/ironic.conf
oslopolicy-sample-generator --config-file tools/policy/ironic-policy-generator.conf
mv %{buildroot}%{_prefix}/etc/ironic/rootwrap.conf %{buildroot}/%{_sysconfdir}/ironic/rootwrap.conf
mv %{buildroot}%{_prefix}/etc/ironic/rootwrap.d/* %{buildroot}/%{_sysconfdir}/ironic/rootwrap.d/
# Remove duplicate config files under /usr/etc/ironic
rmdir %{buildroot}%{_prefix}/etc/ironic/rootwrap.d
rmdir %{buildroot}%{_prefix}/etc/ironic
### sudoers configuration for ironic-rootwrap:
install -D -m 440 %{SOURCE1} %{buildroot}%{_sysconfdir}/sudoers.d/openstack-ironic
# Install distribution config
install -p -D -m 640 %{SOURCE4} %{buildroot}/%{_datadir}/ironic/ironic-dist.conf
### Install logrotate
install -p -D -m 644 %{SOURCE1} %{buildroot}%{_sysconfdir}/logrotate.d/openstack-ironic
### man pages
%if 0%{?with_doc}
mkdir -p %{buildroot}%{_mandir}/man1
install -p -D -m 644 doc/build/man/*.1 %{buildroot}%{_mandir}/man1/
%endif
%check
#PYTHON=%{__python3} stestr run
export LC_ALL=en_US.UTF-8
python3 -m stestr.cli run
%files
%license LICENSE
%files -n python3-ironic
%doc README.rst
%license LICENSE
%{python3_sitelib}/ironic
%{python3_sitelib}/ironic-*.egg-info
%exclude %{python3_sitelib}/ironic/tests
%files common
%doc README.rst
%license LICENSE
%{_bindir}/ironic-dbsync
%{_bindir}/ironic-rootwrap
%{_bindir}/ironic-status
%{_sysconfdir}/sudoers.d/ironic
%config(noreplace) %{_sysconfdir}/logrotate.d/openstack-ironic
%config(noreplace) %attr(-,root,ironic) %{_sysconfdir}/ironic
%attr(-,ironic,ironic) %{_sharedstatedir}/ironic
%attr(0750,ironic,ironic) %{_localstatedir}/log/ironic
%attr(-, root, ironic) %{_datadir}/ironic/ironic-dist.conf
%pre common
getent group ironic >/dev/null || groupadd -r ironic
getent passwd ironic >/dev/null || \
useradd -r -g ironic -d %{_sharedstatedir}/ironic -s /sbin/nologin \
-c "OpenStack Ironic Daemons" ironic
%pre
%openstack_pre_user_group_create ironic ironic /sbin/nologin
exit 0
%files api
%{_bindir}/ironic-api
%{_bindir}/ironic-api-wsgi
%{_unitdir}/openstack-ironic-api.service
%post
%tmpfiles_create %{_tmpfilesdir}/ironic.conf
%post api
%systemd_post openstack-ironic-api.service
%systemd_post %{name}-api.service
%preun api
%systemd_preun openstack-ironic-api.service
%systemd_preun %{name}-api.service
%postun api
%systemd_postun_with_restart openstack-ironic-api.service
%files conductor
%{_bindir}/ironic-conductor
%{_unitdir}/openstack-ironic-conductor.service
%systemd_postun %{name}-api.service
%post conductor
%systemd_post openstack-ironic-conductor.service
%systemd_post %{name}-conductor.service
%preun conductor
%systemd_preun openstack-ironic-conductor.service
%systemd_preun %{name}-conductor.service
%postun conductor
%systemd_postun_with_restart openstack-ironic-conductor.service
%systemd_postun %{name}-conductor.service
%files -n python3-ironic-tests
%{python3_sitelib}/ironic/tests
%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) %{_sysconfdir}/sudoers.d/openstack-ironic
%config(noreplace) %attr(0640, root, ironic) %{_sysconfdir}/ironic/ironic.conf.d/010-ironic.conf
%config %{_sysconfdir}/ironic/rootwrap.conf
%dir %{_sysconfdir}/ironic/rootwrap.d
%config(noreplace) %{_sysconfdir}/ironic/rootwrap.d/ironic-utils.filters
%{_bindir}/ironic-status
%{_bindir}/ironic-rootwrap
%{_bindir}/ironic-dbsync
%if 0%{?with_doc}
%{_mandir}/man1/ironic.1.gz
%endif
%files -n python3-ironic
%license LICENSE
%{python3_sitelib}/ironic/
%{python3_sitelib}/ironic-*.egg-info
%if 0%{?with_doc}
%files doc
%license LICENSE
%doc doc/build/html
%endif
%files api
%license LICENSE
%{_unitdir}/%{name}-api.service
%if 0%{?suse_version}
%{_sbindir}/rc%{name}-api
%endif
%{_bindir}/ironic-api
%{_bindir}/ironic-api-wsgi
%files conductor
%license LICENSE
%{_unitdir}/%{name}-conductor.service
%if 0%{?suse_version}
%{_sbindir}/rc%{name}-conductor
%endif
%{_bindir}/ironic-conductor
%changelog
* Mon Nov 29 2021 lijiawei <ljw1101.vip@gmail.com> - 13.0.7-4
- Adds python3-sendfile as requires
* Thu Nov 18 2021 huangtianhua <huangtianhua@huawei.com> - 13.0.7-3
- Adds python3-wsme as buildrequires and fix build error
* Mon Nov 15 2021 huangtianhua <huangtianhua@huawei.com> - 13.0.7-2
- Adds python3-pysendfile as buildrequires
* Fri Nov 05 2021 lijiawei <ljw1101.vip@gmail.com> - 13.0.7-1
- Support OpenStack Train release
* Tue Feb 09 2021 huangtianhua <huangtianhua223@gmail.com>
- Enable with_doc to generate docs
* Mon Feb 08 2021 OpenStack rpm-packaging <huangtianhua223@gmail.com>
- Package Spec generated

View File

@ -1,2 +1,2 @@
Defaults:ironic !requiretty
Defaults:ironic syslog_goodpri=none, !pam_session
ironic ALL = (root) NOPASSWD: /usr/bin/ironic-rootwrap /etc/ironic/rootwrap.conf *

View File

@ -0,0 +1 @@
d /run/ironic 0700 ironic ironic -