diff --git a/openstack-placement-4.0.0.tar.gz b/openstack-placement-4.0.0.tar.gz
deleted file mode 100644
index e82d7a3..0000000
Binary files a/openstack-placement-4.0.0.tar.gz and /dev/null differ
diff --git a/openstack-placement-5.0.1.tar.gz b/openstack-placement-5.0.1.tar.gz
new file mode 100644
index 0000000..cb1e2f2
Binary files /dev/null and b/openstack-placement-5.0.1.tar.gz differ
diff --git a/openstack-placement-api.conf b/openstack-placement-api.conf
deleted file mode 100644
index ec3ce99..0000000
--- a/openstack-placement-api.conf
+++ /dev/null
@@ -1,26 +0,0 @@
-# OpenStack placement-api Apache2 configuration
-Listen 8778
-
-
- WSGIDaemonProcess openstack-placement-api processes=2 threads=1 user=placement group=placement
- WSGIProcessGroup openstack-placement-api
- WSGIApplicationGroup %{GLOBAL}
- WSGIScriptAlias / /usr/bin/placement-api
- WSGIPassAuthorization On
- LimitRequestBody 114688
- = 2.4>
- ErrorLogFormat "%{cu}t %M"
-
- ErrorLog /var/log/placement/placement-api.log
- CustomLog /var/log/placement/placement-api.log combined
-
-
- = 2.4>
- Require all granted
-
-
- Order allow,deny
- Allow from all
-
-
-
diff --git a/openstack-placement.logrotate b/openstack-placement.logrotate
deleted file mode 100644
index 640bd07..0000000
--- a/openstack-placement.logrotate
+++ /dev/null
@@ -1,13 +0,0 @@
-/var/log/placement/*.log {
- compress
- copytruncate
- dateext
- minsize 100k
- missingok
- notifempty
- rotate 10
- sharedscripts
- size 1M
- su placement placement
- weekly
-}
\ No newline at end of file
diff --git a/openstack-placement.spec b/openstack-placement.spec
index 1696860..7cbd246 100644
--- a/openstack-placement.spec
+++ b/openstack-placement.spec
@@ -1,180 +1,257 @@
%{!?upstream_version: %global upstream_version %{version}%{?milestone}}
+%global with_doc 1
+
+%global common_desc \
+OpenStack Placement provides an HTTP service for managing, selecting, and \
+claiming providers of classes of inventory representing available resources \
+in a cloud.
Name: openstack-placement
-Version: 4.0.0
-Release: 2
+Version: 5.0.1
+Release: 1
Summary: OpenStack Placement
-
License: ASL 2.0
-Group: System/Management
-URL: https://docs.openstack.org/placement/
-Source0: openstack-placement-%{upstream_version}.tar.gz
-Source1: openstack-placement.logrotate
-Source2: openstack-placement-api.conf
+URL: http://git.openstack.org/cgit/openstack/placement/
+Source0: https://tarballs.openstack.org/placement/%{name}-%{upstream_version}.tar.gz
+Source1: placement-dist.conf
+Source2: placement.logrotate
+Source3: placement-api.conf
+Source4: policy.json
BuildArch: noarch
BuildRequires: openstack-macros
-BuildRequires: python3-routes
-BuildRequires: python3-webob
-BuildRequires: python3-jsonschema
-BuildRequires: python3-keystonemiddleware
-BuildRequires: python3-microversion-parse
-BuildRequires: python3-mock
-BuildRequires: python3-os-resource-classes
+BuildRequires: intltool
+BuildRequires: python3-devel
+BuildRequires: git-core
BuildRequires: python3-os-traits
+BuildRequires: python3-setuptools
+BuildRequires: python3-pbr
+BuildRequires: python3-six
+BuildRequires: python3-oslo-policy
+BuildRequires: python3-ddt
+BuildRequires: python3-oslo-rootwrap
+BuildRequires: python3-oslo-log
BuildRequires: python3-oslo-concurrency
BuildRequires: python3-oslo-config
+BuildRequires: python3-oslo-context
BuildRequires: python3-oslo-db
-BuildRequires: python3-oslo-log
BuildRequires: python3-oslo-middleware
+BuildRequires: python3-oslo-serialization
BuildRequires: python3-oslo-policy
+BuildRequires: python3-oslo-upgradecheck
+BuildRequires: python3-oslo-utils
BuildRequires: python3-oslotest
-BuildRequires: python3-paramiko
-BuildRequires: python3-pbr
+BuildRequires: python3-osprofiler
+BuildRequires: python3-subunit
+BuildRequires: python3-tooz
+BuildRequires: python3-oslo-vmware
+BuildRequires: python3-cursive
+BuildRequires: python3-os-service-types
+BuildRequires: python3-os-resource-classes
+BuildRequires: python3-microversion-parse
+BuildRequires: python3-jsonschema
+BuildRequires: python3-sqlalchemy
+BuildRequires: python3-routes
+BuildRequires: python3-webob
+BuildRequires: python3-keystonemiddleware
+BuildRequires: python3-requests
BuildRequires: python3-stestr
-
-Requires: logrotate
-Requires: python3-openstack-placement = %{version}-%{release}
-
-BuildRequires: systemd
-Requires(post): systemd
-Requires(postun): systemd
-Requires(pre): shadow-utils
-Requires(preun): systemd
-
-
+Requires: openstack-placement-api
%description
-OpenStack Placement provides an HTTP service for managing, selecting,
-and claiming providers of classes of inventory representing available
-resources in a cloud.
+%{common_desc}
-%package -n python3-openstack-placement
-Summary: OpenStack Placement - Python module
-Group: Development/Languages/Python
-Requires: python3-routes
-Requires: python3-sqlalchemy
-Requires: python3-webob
-Requires: python3-jsonschema
-Requires: python3-keystonemiddleware
-Requires: python3-microversion-parse
-Requires: python3-os-resource-classes
-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-middleware
-Requires: python3-oslo-policy
-Requires: python3-oslo-serialization
-Requires: python3-oslo-upgradecheck
-Requires: python3-oslo-utils
-Requires: python3-pbr
-Requires: python3-requests
-Requires: python3-six
-Requires: python3-sqlalchemy
-Requires: python3-wsgi_intercept
+%package common
+Summary: Components common to all OpenStack Placement services
+Requires: python3-placement = %{version}-%{release}
-%description -n python3-openstack-placement
-This package contains the core Python module of OpenStack Placement.
+%description common
+%{common_desc}
+
+This package contains scripts, config and dependencies shared
+between all the OpenStack Placement services.
%package api
-Summary: OpenStack Compute (Placement) - API
-# prereq for creating the right openstack-placement user/group
-Group: System/Management
-Requires: %{name} = %{version}
-Requires(pre): %{name} = %{version}
-BuildRequires: python3-mod_wsgi
+Summary: OpenStack Placement API service
+
+Requires: openstack-placement-common = %{version}-%{release}
+Requires: httpd
Requires: python3-mod_wsgi
%description api
-This package contains the OpenStack Placement API.
+%{common_desc}
+
+This package contains the Placement service, which will initially
+allow for the management of resource providers.
+
+%package -n python3-placement
+Summary: Placement Python libraries
+%{?python_provide:%python_provide python3-placement}
+
+Requires: python3-sqlalchemy >= 1.2.19
+Requires: python3-routes >= 2.3.1
+Requires: python3-webob >= 1.8.2
+Requires: python3-keystonemiddleware >= 4.18.0
+Requires: python3-jsonschema >= 3.2.0
+Requires: python3-microversion-parse >= 0.2.1
+Requires: python3-os-traits >= 2.5.0
+Requires: python3-os-resource-classes >= 0.5.0
+Requires: python3-oslo-concurrency >= 3.26.0
+Requires: python3-oslo-config >= 6.7.0
+Requires: python3-oslo-context >= 2.22.0
+Requires: python3-oslo-db >= 4.40.0
+Requires: python3-oslo-log >= 4.3.0
+Requires: python3-oslo-middleware >= 3.31.0
+Requires: python3-oslo-serialization >= 2.25.0
+Requires: python3-oslo-upgradecheck >= 1.3.0
+Requires: python3-oslo-utils >= 4.5.0
+Requires: python3-oslo-policy >= 3.6.0
+Requires: python3-pbr >= 3.1.1
+Requires: python3-requests >= 2.25.0
+
+%description -n python3-placement
+%{common_desc}
+
+This package contains the Placement Python library.
+
+%package -n python3-placement-tests
+Summary: Placement tests
+%{?python_provide:%python_provide python3-placement-tests}
+Requires: openstack-placement-common = %{version}-%{release}
+Requires: python3-hacking >= 0.12.0
+Requires: python3-coverage >= 4.0
+Requires: python3-fixtures >= 3.0.0
+Requires: python3-mock >= 2.0.0
+Requires: python3-PyMySQL >= 0.7.6
+Requires: python3-oslotest >= 3.4.0
+Requires: python3-stestr >= 1.0.0
+Requires: python3-testtools >= 1.8.0
+Requires: python3-gabbi >= 1.35.0
+Requires: python3-wsgi_intercept >= 1.2.2
+
+%description -n python3-placement-tests
+%{common_desc}
+
+This package contains the Placement Python library tests.
+
+%if 0%{?with_doc}
+%package doc
+Summary: Documentation for OpenStack Placement
+
+BuildRequires: graphviz
+BuildRequires: python3-openstackdocstheme
+BuildRequires: python3-oslo-config
+BuildRequires: python3-oslo-log
+BuildRequires: python3-oslo-messaging
+BuildRequires: python3-oslo-utils
+BuildRequires: python3-routes
+BuildRequires: python3-sphinx
+BuildRequires: python3-sphinxcontrib-actdiag
+BuildRequires: python3-sphinxcontrib-seqdiag
+BuildRequires: python3-sphinx-feature-classification
+BuildRequires: python3-sqlalchemy
+BuildRequires: python3-webob
+
+%description doc
+%{common_desc}
+
+This package contains documentation files for Placement.
+%endif
%prep
-%autosetup -p1 -n openstack-placement-%{upstream_version}
+# "-S git" is necessary to run build
+%autosetup -n openstack-placement-%{upstream_version} -S git
+
+find . \( -name .gitignore -o -name .placeholder \) -delete
+
+find placement -name \*.py -exec sed -i '/\/usr\/bin\/env python/{d;q}' {} +
+
%py_req_cleanup
%build
-python3 setup.py build
-
-# sample config
PYTHONPATH=. oslo-config-generator --config-file=etc/placement/config-generator.conf
-# sample policy
PYTHONPATH=. oslopolicy-sample-generator --config-file=etc/placement/policy-generator.conf
+%{py3_build}
+
%install
-python3 setup.py install --root %{buildroot} --prefix %{_prefix}
+%{py3_install}
+
+export PYTHONPATH=.
+%if 0%{?with_doc}
+sphinx-build -W -b html -d doc/build/doctrees doc/source doc/build/html
+rm -rf doc/build/html/.{doctrees,buildinfo}
+%endif
-### directories
-install -d -m 755 %{buildroot}%{_localstatedir}/lib/placement
-install -d -m 755 %{buildroot}%{_localstatedir}/lib/placement/images
-install -d -m 755 %{buildroot}%{_localstatedir}/lib/placement/instances
-install -d -m 755 %{buildroot}%{_localstatedir}/lib/placement/keys
-install -d -m 755 %{buildroot}%{_localstatedir}/lib/placement/networks
-install -d -m 755 %{buildroot}%{_localstatedir}/lib/placement/tmp
install -d -m 750 %{buildroot}%{_localstatedir}/log/placement
-install -d -m 700 %{buildroot}%{_rundir}/placement
-install -d -m 700 %{buildroot}%{_localstatedir}/cache/placement
-install -d %{buildroot}%apache_site_dir
-# apache vhost sample configs
-install -p -D -m 644 %{SOURCE2} %{buildroot}%apache_site_dir
+install -d -m 755 %{buildroot}%{_sysconfdir}/placement
+install -p -D -m 640 etc/placement/placement.conf.sample %{buildroot}%{_sysconfdir}/placement/placement.conf
+install -p -D -m 640 %{SOURCE1} %{buildroot}%{_datarootdir}/placement/placement-dist.conf
+install -p -D -m 640 %{SOURCE3} %{buildroot}%{_sysconfdir}/httpd/conf.d/00-placement-api.conf
+install -p -D -m 640 %{SOURCE4} %{buildroot}%{_sysconfdir}/placement/policy.json
-### configuration files
-install -d -m 755 %{buildroot}%{_sysconfdir}/placement/
-#mv %{buildroot}/usr/etc/placement/* %{buildroot}%{_sysconfdir}/placement/
-install -d -m 755 %{buildroot}%{_sysconfdir}/placement/placement.conf.d
-install -p -D -m 640 etc/placement/placement.conf.sample %{buildroot}%{_sysconfdir}/placement/placement.conf
-install -p -D -m 640 etc/placement/policy.yaml.sample %{buildroot}%{_sysconfdir}/placement/policy.yaml
-# bash-completion/logrotate/etc.
-install -p -D -m 644 %{SOURCE1} %{buildroot}%{_sysconfdir}/logrotate.d/%{name}
+install -p -D -m 644 %{SOURCE2} %{buildroot}%{_sysconfdir}/logrotate.d/openstack-placement
-%pre
-%openstack_pre_user_group_create placement placement
+install -d -m 755 %{buildroot}%{_datarootdir}/placement
+install -p -D -m 755 tools/mysql-migrate-db.sh %{buildroot}%{_datarootdir}/placement/mysql-migrate-db.sh
+install -p -D -m 755 tools/postgresql-migrate-db.sh %{buildroot}%{_datarootdir}/placement/postgresql-migrate-db.sh
-%post api
-%systemd_post openstack-placement-api.service
+%check
+export PYTHON=%{__python3}
+OS_TEST_PATH=./placement/tests/unit stestr run
-%preun api
-%systemd_preun openstack-placement-api.service
-
-%postun api
-%systemd_postun_with_restart openstack-placement-api.service
+%pre common
+getent group placement >/dev/null || groupadd -r placement
+getent passwd placement >/dev/null || \
+ useradd -r -g placement -d / -s /bin/bash -c "OpenStack Placement" placement
+exit 0
%files
+%files common
%license LICENSE
-%doc README.rst
-%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
-%dir %{_sysconfdir}/placement
-%dir %{_sysconfdir}/placement/placement.conf.d/
-%dir %attr(0750, placement, placement) %{_localstatedir}/cache/placement
-%config(noreplace) %attr(0640, root, placement) %{_sysconfdir}/placement/placement.conf
-%config %attr(0640, root, placement) %{_sysconfdir}/placement/policy.yaml
-%dir %attr(0755, placement, placement) %{_localstatedir}/lib/placement
-%dir %attr(0750, placement, placement) %{_localstatedir}/log/placement
+%doc etc/placement/policy.yaml.sample
%{_bindir}/placement-manage
%{_bindir}/placement-status
-%dir %attr(0755, root, root) %{_localstatedir}/lib/placement/images
-%dir %attr(0755, placement, root) %{_localstatedir}/lib/placement/instances
-%dir %attr(0755, root, root) %{_localstatedir}/lib/placement/keys
-%dir %attr(0755, root, root) %{_localstatedir}/lib/placement/networks
-%dir %attr(0755, root, root) %{_localstatedir}/lib/placement/tmp
-
-%files -n python3-openstack-placement
-%license LICENSE
-%{python3_sitelib}/placement/
-%{python3_sitelib}/placement_db_tools/
-%{python3_sitelib}/openstack_placement*egg-info
+%dir %{_datarootdir}/placement
+%attr(-, root, placement) %{_datarootdir}/placement/placement-dist.conf
+%{_datarootdir}/placement/mysql-migrate-db.sh
+%{_datarootdir}/placement/postgresql-migrate-db.sh
+%dir %{_sysconfdir}/placement
+%config(noreplace) %attr(-, root, placement) %{_sysconfdir}/placement/placement.conf
+%config(noreplace) %attr(-, root, placement) %{_sysconfdir}/placement/policy.json
+%config(noreplace) %{_sysconfdir}/logrotate.d/openstack-placement
+%dir %attr(0750, placement, root) %{_localstatedir}/log/placement
%files api
%license LICENSE
+%config(noreplace) %{_sysconfdir}/httpd/conf.d/00-placement-api.conf
%{_bindir}/placement-api
-%{apache_site_dir}/openstack-placement-api.conf
+
+%files -n python3-placement
+%license LICENSE
+%{python3_sitelib}/placement
+%{python3_sitelib}/placement_db_tools
+%{python3_sitelib}/openstack_placement-*.egg-info
+%exclude %{python3_sitelib}/placement/tests
+
+%files -n python3-placement-tests
+%license LICENSE
+%{python3_sitelib}/placement/tests
+
+%if 0%{?with_doc}
+%files doc
+%license LICENSE
+%doc doc/build/html
+%endif
%changelog
+* Wed Aug 11 2021 openstack-sig
+- Update to 5.0.1
+
* Thu Feb 25 2021 wangxiyuan
- Fix httpd config error and remove useless files
* Wed Feb 03 2021 ZhengZhenyu
- Update init
+
diff --git a/placement-api.conf b/placement-api.conf
new file mode 100644
index 0000000..42cb6e7
--- /dev/null
+++ b/placement-api.conf
@@ -0,0 +1,25 @@
+Listen 8778
+
+
+ WSGIProcessGroup placement-api
+ WSGIApplicationGroup %{GLOBAL}
+ WSGIPassAuthorization On
+ WSGIDaemonProcess placement-api processes=3 threads=1 user=placement group=placement
+ WSGIScriptAlias / /usr/bin/placement-api
+ = 2.4>
+ ErrorLogFormat "%M"
+
+ ErrorLog /var/log/placement/placement-api.log
+ #SSLEngine On
+ #SSLCertificateFile ...
+ #SSLCertificateKeyFile ...
+
+
+Alias /placement-api /usr/bin/placement-api
+
+ SetHandler wsgi-script
+ Options +ExecCGI
+ WSGIProcessGroup placement-api
+ WSGIApplicationGroup %{GLOBAL}
+ WSGIPassAuthorization On
+
diff --git a/placement-dist.conf b/placement-dist.conf
new file mode 100644
index 0000000..9a20ec7
--- /dev/null
+++ b/placement-dist.conf
@@ -0,0 +1,10 @@
+[DEFAULT]
+
+[database]
+connection = mysql://placement:placement@localhost/placement
+max_retries = -1
+
+[keystone_authtoken]
+auth_host = 127.0.0.1
+auth_port = 35357
+auth_protocol = http
diff --git a/placement.logrotate b/placement.logrotate
new file mode 100644
index 0000000..6694383
--- /dev/null
+++ b/placement.logrotate
@@ -0,0 +1,7 @@
+/var/log/placement/*.log {
+ rotate 14
+ size 10M
+ missingok
+ compress
+ copytruncate
+}
diff --git a/policy.json b/policy.json
new file mode 100644
index 0000000..2c63c08
--- /dev/null
+++ b/policy.json
@@ -0,0 +1,2 @@
+{
+}