diff --git a/glance-21.0.0.tar.gz b/glance-21.0.0.tar.gz new file mode 100644 index 0000000..5c288c7 Binary files /dev/null and b/glance-21.0.0.tar.gz differ diff --git a/openstack-glance-api.service b/openstack-glance-api.service new file mode 100644 index 0000000..a56dce2 --- /dev/null +++ b/openstack-glance-api.service @@ -0,0 +1,19 @@ +[Unit] +Description=OpenStack Image Service API server +After=syslog.target network.target +After=mariadb.service postgresql.service rabbitmq-server.service + +[Service] +Type=simple +User=glance +Group=glance +LimitNOFILE=131072 +LimitNPROC=131072 +WorkingDirectory=/var/lib/glance +PrivateTmp=yes +# the connection parameter might be stored in the glance-api related config files +ExecStartPre=-/usr/bin/glance-manage --config-dir=/etc/glance/glance.conf.d/ --config-dir=/etc/glance/glance-api.conf.d/ db sync +ExecStart=/usr/bin/glance-api + +[Install] +WantedBy=multi-user.target diff --git a/openstack-glance.README.config b/openstack-glance.README.config new file mode 100644 index 0000000..d4733d9 --- /dev/null +++ b/openstack-glance.README.config @@ -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 . diff --git a/openstack-glance.conf b/openstack-glance.conf new file mode 100644 index 0000000..20ef37b --- /dev/null +++ b/openstack-glance.conf @@ -0,0 +1 @@ +d /run/glance 0755 glance glance - diff --git a/openstack-glance.defaultconf b/openstack-glance.defaultconf new file mode 100644 index 0000000..9f9045d --- /dev/null +++ b/openstack-glance.defaultconf @@ -0,0 +1,6 @@ +[DEFAULT] +log_dir=/var/log/glance +lock_path=/run/glance + +[paste_deploy] +flavor=keystone \ No newline at end of file diff --git a/openstack-glance.logrotate b/openstack-glance.logrotate new file mode 100644 index 0000000..595aa1a --- /dev/null +++ b/openstack-glance.logrotate @@ -0,0 +1,11 @@ +/var/log/glance/*.log { + weekly + dateext + rotate 10 + size 1M + missingok + compress + notifempty + su glance glance + minsize 100k +} diff --git a/openstack-glance.spec b/openstack-glance.spec new file mode 100644 index 0000000..2e32c5a --- /dev/null +++ b/openstack-glance.spec @@ -0,0 +1,364 @@ +%if 0%{?rhel} || 0%{?fedora} +%global rdo 1 +%endif +%if 0%{?rhel} == 7 +%global skip_python3 1 +%endif +%global with_doc 1 +%if 0%{?rhel} || 0%{?fedora} +%global rdo 1 +%endif +%global with_check 0 + +Name: openstack-glance +Version: 21.0.0 +Release: 1%{?dist} +Epoch: 0 +Summary: OpenStack Image Service (Glance) +License: ASL 2.0 +URL: https://docs.openstack.org/glance +Source0: glance-%{version}.tar.gz +Source1: openstack-glance.logrotate +Source2: openstack-glance.conf +Source3: openstack-glance-api.service +Source6: openstack-glance.defaultconf +Source7: openstack-glance.README.config +BuildRequires: openstack-macros +BuildRequires: python3-paste +BuildRequires: python3-paste-deploy +BuildRequires: python3-routes +BuildRequires: python3-wsme +BuildRequires: python3-webob +BuildRequires: python3-cursive +BuildRequires: python3-ddt +BuildRequires: python3-debtcollector +BuildRequires: python3-defusedxml +BuildRequires: python3-eventlet +BuildRequires: python3-futurist +BuildRequires: python3-glance-store +BuildRequires: python3-httplib2 +BuildRequires: python3-keystoneclient +BuildRequires: python3-keystonemiddleware +BuildRequires: python3-oslo-concurrency +BuildRequires: python3-oslo-config +BuildRequires: python3-oslo-context +BuildRequires: python3-oslo-db +BuildRequires: python3-oslo-log +BuildRequires: python3-oslo-messaging +BuildRequires: python3-oslo-middleware +BuildRequires: python3-oslo-policy +BuildRequires: python3-oslo-reports +BuildRequires: python3-oslo-upgradecheck +BuildRequires: python3-oslo-utils +BuildRequires: python3-oslotest +BuildRequires: python3-osprofiler +BuildRequires: python3-pyOpenSSL +BuildRequires: python3-retrying +BuildRequires: python3-sqlparse +BuildRequires: python3-stestr +BuildRequires: python3-stevedore +BuildRequires: python3-taskflow +BuildRequires: python3-pyxattr +Requires: logrotate +Requires: python3-glance = %{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(preun): systemd +%endif +%if 0%{?suse_version} +BuildRequires: qemu-tools +Requires(pre): pwdutils +%endif +%if 0%{?rdo} +Requires(pre): shadow-utils +%endif + +%description +The Glance project provides a service where users can upload and discover +data assets that are meant to be used with other services. This currently +includes images and metadata definitions. +Glance image services include discovering, registering, and retrieving +virtual machine images. Glance has a RESTful API that allows querying of +VM image metadata as well as retrieval of the actual image. +VM images made available through Glance can be stored in a variety of +locations from simple filesystems to object-storage systems like the +OpenStack Swift project. + +%package -n python3-glance +Summary: OpenStack Image Service (Glance) - Python module +Group: Applications/System +Requires: python3-paste +Requires: python3-paste-deploy +Requires: python3-prettytable +Requires: python3-routes +Requires: python3-sqlalchemy +Requires: python3-wsme +Requires: python3-webob +Requires: python3-alembic +Requires: python3-cryptography +Requires: python3-cursive +Requires: python3-debtcollector +Requires: python3-defusedxml +Requires: python3-eventlet +Requires: python3-futurist +Requires: python3-glance-store +Requires: python3-httplib2 +Requires: python3-iso8601 +Requires: python3-jsonschema +Requires: python3-keystoneauth1 +Requires: python3-keystoneclient +Requires: python3-keystonemiddleware +Requires: python3-monotonic +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-upgradecheck +Requires: python3-oslo-utils +Requires: python3-osprofiler +Requires: python3-pbr +Requires: python3-pyOpenSSL +Requires: python3-retrying +Requires: python3-six +Requires: python3-migrate +Requires: python3-sqlparse +Requires: python3-stevedore +Requires: python3-taskflow + +%description -n python3-glance +The Glance project provides a service where users can upload and discover +data assets that are meant to be used with other services. This currently +includes images and metadata definitions. +Glance image services include discovering, registering, and retrieving +virtual machine images. Glance has a RESTful API that allows querying of +VM image metadata as well as retrieval of the actual image. +VM images made available through Glance can be stored in a variety of +locations from simple filesystems to object-storage systems like the +OpenStack Swift project. + +This package contains the Glance Python library. + +%package -n python3-glance-tests +Summary: Glance tests +Requires: openstack-glance = %{epoch}:%{version}-%{release} +Provides: python-glance-tests = %{epoch}:%{version}-%{release} + +%description -n python3-glance-tests +The Glance project provides a service where users can upload and discover +data assets that are meant to be used with other services. This currently +includes images and metadata definitions. +Glance image services include discovering, registering, and retrieving +virtual machine images. Glance has a RESTful API that allows querying of +VM image metadata as well as retrieval of the actual image. +VM images made available through Glance can be stored in a variety of +locations from simple filesystems to object-storage systems like the +OpenStack Swift project. + +This package contains the Glance test files. + +%if 0%{?with_doc} +%package doc +Summary: Documentation for OpenStack Image Service +Group: Documentation +BuildRequires: python3-sphinx +BuildRequires: python3-openstackdocstheme +BuildRequires: python3-sphinxcontrib-apidoc + +%description doc +The Glance project provides a service where users can upload and discover +data assets that are meant to be used with other services. This currently +includes images and metadata definitions. +Glance image services include discovering, registering, and retrieving +virtual machine images. Glance has a RESTful API that allows querying of +VM image metadata as well as retrieval of the actual image. +VM images made available through Glance can be stored in a variety of +locations from simple filesystems to object-storage systems like the +OpenStack Swift project. + +This package contains the documentation. +%endif + +%package api +Summary: OpenStack Image service (Glance) - API +Group: Development/Languages/Python +Requires: %{name} = %{epoch}:%{version}-%{release} + +%description api +The Glance project provides a service where users can upload and discover +data assets that are meant to be used with other services. This currently +includes images and metadata definitions. +Glance image services include discovering, registering, and retrieving +virtual machine images. Glance has a RESTful API that allows querying of +VM image metadata as well as retrieval of the actual image. +VM images made available through Glance can be stored in a variety of +locations from simple filesystems to object-storage systems like the +OpenStack Swift project. + +This package contains the %{name} API server. + +%prep +%autosetup -p1 -n glance-%{version} +%py_req_cleanup + +%build +%{py3_build} +# build documentation +%if 0%{?with_doc} +PBR_VERSION=%{version}-%{release} sphinx-build -b html doc/source doc/build/html +PBR_VERSION=%{version}-%{release} sphinx-build -b man doc/source doc/build/man +rm -rf doc/build/html/.{doctrees,buildinfo} +rm -rf doc/build/man/.{doctrees,buildinfo} +%endif +# regenerate the sample config files +for service in api scrubber cache manage image-import; do + PYTHONPATH=. oslo-config-generator --config-file etc/oslo-config-generator/glance-$service.conf +done +# generate the sample policy +PYTHONPATH=. oslopolicy-sample-generator --config-file=etc/glance-policy-generator.conf --output etc/policy.json +rm -f etc/glance-policy-generator.conf + +%install +%{py3_install} +# directories +install -d -m 755 %{buildroot}%{_sysconfdir}/glance +install -d -m 755 %{buildroot}%{_sysconfdir}/glance/glance.conf.d/ +install -d -m 755 %{buildroot}%{_sysconfdir}/glance/glance-api.conf.d/ +install -d -m 755 %{buildroot}%{_localstatedir}/lib/glance +install -d -m 755 %{buildroot}%{_localstatedir}/lib/glance/images +install -d -m 750 %{buildroot}%{_localstatedir}/log/glance +install -d -m 750 %{buildroot}%{_localstatedir}/cache/glance +install -d -m 700 %{buildroot}%{_rundir}/glance +# tmpfile generator +install -D -m 644 %{SOURCE2} %{buildroot}/%{_tmpfilesdir}/glance.conf +# install sample configs +cp -pr etc/* %{buildroot}%{_sysconfdir}/glance +for service in api scrubber cache manage swift image-import; do + mv %{buildroot}%{_sysconfdir}/glance/glance-$service.conf{.sample,} +done +install -p -D -m 640 %{SOURCE6} %{buildroot}%{_sysconfdir}/glance/README.config +rm -rf %{buildroot}%{_sysconfdir}/glance/oslo-config-generator +# default config +install -D -m 640 %{SOURCE6} %{buildroot}/%{_sysconfdir}/glance/glance.conf.d/010-glance.conf +# systemd +install -p -D -m 444 %{SOURCE3} %{buildroot}%{_unitdir}/openstack-glance-api.service +# logrotate +install -p -D -m 644 %{SOURCE1} %{buildroot}%{_sysconfdir}/logrotate.d/openstack-glance +# move metadefs +mv %{buildroot}%{_prefix}%{_sysconfdir}/glance/metadefs/* %{buildroot}%{_sysconfdir}/glance/metadefs +# Remove duplicate files under /usr/etc +rm -rf %{buildroot}%{_prefix}%{_sysconfdir}/glance + +# man pages +%if 0%{?with_doc} +mkdir -p %{buildroot}%{_mandir}/man1 +install -p -D -m 644 doc/build/man/*.1 %{buildroot}%{_mandir}/man1/ +%endif + +%pre +%openstack_pre_user_group_create glance glance /sbin/nologin + +%check +%if 0%{?with_check} +%if 0%{?rdo} +# Skip qemu-tools related tests, those fail on RDO due to missing VDI support +rm -v glance/tests/unit/common/test_format_inspector.py +%endif +PYTHONPATH=. python3 -m stestr.cli --test-path glance/tests/unit run +%endif + +%post +%tmpfiles_create %{_tmpfilesdir}/glance.conf + +%post api +%systemd_post %{name}-api.service + +%preun api +%systemd_preun %{name}-api.service + +%postun api +%systemd_postun_with_restart %{name}-api.service + +%files +%license LICENSE +%_tmpfilesdir/glance.conf +%dir %attr(0750, root, glance) %{_sysconfdir}/glance +%dir %attr(0750, root, glance) %{_sysconfdir}/glance/glance.conf.d/ +%dir %attr(0750, root, glance) %{_sysconfdir}/glance/glance-api.conf.d/ +%config(noreplace) %attr(0640, root, glance) %{_sysconfdir}/glance/glance.conf.d/010-glance.conf +%{_sysconfdir}/glance/README.config +%config(noreplace) %attr(0640, root, glance) %{_sysconfdir}/glance/glance-api.conf +%config(noreplace) %attr(0640, root, glance) %{_sysconfdir}/glance/glance-cache.conf +%config(noreplace) %attr(0640, root, glance) %{_sysconfdir}/glance/glance-image-import.conf +%config(noreplace) %attr(0640, root, glance) %{_sysconfdir}/glance/glance-scrubber.conf +%config(noreplace) %attr(0640, root, glance) %{_sysconfdir}/glance/glance-swift.conf +%config(noreplace) %attr(0640, root, glance) %{_sysconfdir}/glance/glance-manage.conf +%config %{_sysconfdir}/glance/glance-api-paste.ini +%config %{_sysconfdir}/glance/policy.json +%config %{_sysconfdir}/glance/property-protections-policies.conf.sample +%config %{_sysconfdir}/glance/property-protections-roles.conf.sample +%config %{_sysconfdir}/glance/ovf-metadata.json.sample +%config %{_sysconfdir}/glance/schema-image.json +%dir %config %{_sysconfdir}/glance/metadefs +%{_sysconfdir}/glance/metadefs/README +%config %{_sysconfdir}/glance/metadefs/*.json +%config(noreplace) %{_sysconfdir}/logrotate.d/%{name} +%dir %attr(0755, glance, glance) %{_localstatedir}/lib/glance +%dir %attr(0755, glance, glance) %{_localstatedir}/lib/glance/images +%dir %attr(0750, glance, glance) %{_localstatedir}/log/glance +%dir %attr(0750, glance, glance) %{_localstatedir}/cache/glance +%{_bindir}/glance-cache-cleaner +%{_bindir}/glance-cache-manage +%{_bindir}/glance-cache-prefetcher +%{_bindir}/glance-cache-pruner +%{_bindir}/glance-control +%{_bindir}/glance-manage +%{_bindir}/glance-replicator +%{_bindir}/glance-scrubber +%{_bindir}/glance-status +%if 0%{?with_doc} +%{_mandir}/man1/glance-cache-cleaner.1.gz +%{_mandir}/man1/glance-cache-manage.1.gz +%{_mandir}/man1/glance-cache-prefetcher.1.gz +%{_mandir}/man1/glance-cache-pruner.1.gz +%{_mandir}/man1/glance-control.1.gz +%{_mandir}/man1/glance-manage.1.gz +%{_mandir}/man1/glance-replicator.1.gz +%{_mandir}/man1/glance-scrubber.1.gz +%endif + +%files -n python3-glance +%license LICENSE +%{python3_sitelib}/glance* +%exclude %{python3_sitelib}/glance/tests + +%files -n python3-glance-tests +%license LICENSE +%{python3_sitelib}/glance/tests + +%if 0%{?with_doc} +%files doc +%license LICENSE +%doc doc/build/html +%endif + +%files api +%{_unitdir}/openstack-glance-api.service +%{_bindir}/glance-api +%{_bindir}/glance-wsgi-api +%if 0%{?with_doc} +%{_mandir}/man1/glance-api.1.gz +%endif + +%changelog