# # spec file for package cloud-init # # Copyright (c) 2023 SUSE LLC # # 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/ # # change this whenever config changes incompatible %global configver 0.7 %global docdir %{_defaultdocdir}/%{name} Name: cloud-init Version: 23.1.2 Release: 0 Summary: Cloud node initialization tool License: GPL-3.0-only Group: System/Management URL: https://github.com/canonical/cloud-init Source0: https://github.com/canonical/cloud-init/archive/refs/tags/%{version}.tar.gz#/%{name}-%{version}.tar.gz Source1: rsyslog-cloud-init.cfg Source2: hidesensitivedata Patch1: datasourceLocalDisk.patch # FIXME (lp#1849296) Patch2: cloud-init-break-resolv-symlink.patch # FIXME no proposed solution Patch3: cloud-init-sysconf-path.patch # FIXME (lp#1860164) Patch4: cloud-init-no-tempnet-oci.patch # FIXME https://github.com/canonical/cloud-init/pull/2036 Patch5: cloud-init-fix-ca-test.patch # FIXME (lp#1812117) Patch6: cloud-init-write-routes.patch # FIXME https://github.com/canonical/cloud-init/pull/2148 Patch8: cloud-init-power-rhel-only.patch BuildRequires: fdupes # pkg-config is needed to find correct systemd unit dir BuildRequires: pkgconfig BuildRequires: python-rpm-macros # Test requirements BuildRequires: python3-Jinja2 BuildRequires: python3-PyYAML BuildRequires: python3-configobj >= 5.0.2 BuildRequires: python3-devel BuildRequires: python3-httpretty BuildRequires: python3-jsonpatch BuildRequires: python3-jsonschema BuildRequires: python3-netifaces BuildRequires: python3-oauthlib BuildRequires: python3-pytest BuildRequires: python3-pytest-cov BuildRequires: python3-pytest-mock BuildRequires: python3-requests BuildRequires: python3-responses BuildRequires: python3-serial BuildRequires: python3-setuptools BuildRequires: system-user-nobody BuildRequires: util-linux BuildRequires: pkgconfig(systemd) # needed for /lib/udev BuildRequires: pkgconfig(udev) Requires: bash Requires: cloud-init-config = %{configver} Requires: dhcp-client Requires: e2fsprogs Requires: file Requires: growpart Requires: net-tools Requires: openssh Requires: python3-Jinja2 Requires: python3-PyYAML Requires: python3-configobj >= 5.0.2 Requires: python3-jsonpatch Requires: python3-jsonschema Requires: python3-netifaces Requires: python3-oauthlib Requires: python3-pyserial Requires: python3-requests Requires: python3-serial Requires: python3-setuptools Requires: python3-xml Requires: sudo Requires: util-linux Requires: wget %{?systemd_requires} %if 0%{?is_opensuse} BuildRequires: openSUSE-release %else BuildRequires: sles-release %endif %if 0%{?suse_version} && 0%{?suse_version} <= 1500 Requires: wicked-service %endif %ifarch %{ix86} x86_64 Requires: dmidecode %endif %description Cloud-init is an init script that initializes a cloud node (VM) according to the fetched configuration data from the admin node. %package config-suse Summary: Configuration file for Cloud node initialization tool Group: System/Management Conflicts: cloud-init-config Provides: cloud-init-config = %{configver} %description config-suse This package contains the product specific configuration file for cloud-init. %package doc Summary: Cloud node initialization tool - Documentation Group: System/Management Recommends: cloud-init = %{version} %description doc Cloud-init is an init script that initializes a cloud node (VM) according to the fetched configuration data from the admin node. Documentation and examples for cloud-init tools %prep %setup -q %patch1 %patch2 %patch3 %patch4 %patch5 %patch6 %patch8 # patch in the full version to version.py version_pys=$(find . -name version.py -type f) [ -n "$version_pys" ] || { echo "failed to find 'version.py' to patch with version." 1>&2; exit 1; } sed -i "s,@@PACKAGED_VERSION@@,%{version}-%{release}," $version_pys %build python3 setup.py build %check %make_build unittest %install python3 setup.py install --root=%{buildroot} --prefix=%{_prefix} --install-lib=%{python3_sitelib} --init-system=systemd find %{buildroot} \( -name .gitignore -o -name .placeholder \) -delete # from debian install script for x in "%{buildroot}%{_bindir}/"*.py; do [ -f "${x}" ] && mv "${x}" "${x%.py}" done mkdir -p %{buildroot}%{_localstatedir}/lib/cloud # move documentation mkdir -p %{buildroot}%{_defaultdocdir} mv %{buildroot}%{_datadir}/doc/%{name} %{buildroot}%{_defaultdocdir} # man pages mkdir -p %{buildroot}%{_mandir}/man1 mv doc/man/* %{buildroot}%{_mandir}/man1 # Set the distribution indicator %if 0%{?suse_version} %if 0%{?is_opensuse} sed -i s/suse/opensuse/ %{buildroot}/%{_sysconfdir}/cloud/cloud.cfg %else sed -i s/suse/sles/ %{buildroot}/%{_sysconfdir}/cloud/cloud.cfg %endif %endif install -D -m 644 %{SOURCE1} %{buildroot}/%{_sysconfdir}/rsyslog.d/21-cloudinit.conf mkdir -p %{buildroot}%{_prefix}/lib/udev/rules.d/ mv %{buildroot}/lib/udev/rules.d/66-azure-ephemeral.rules %{buildroot}%{_prefix}/lib/udev/rules.d/ install -D -m 755 %{SOURCE2} %{buildroot}%{_sbindir}/hidesensitivedata # remove debian/ubuntu specific profile.d file (bnc#779553) rm -f %{buildroot}%{_sysconfdir}/profile.d/Z99-cloud-locale-test.sh # Remove non-SUSE templates rm %{buildroot}/%{_sysconfdir}/cloud/templates/*.debian.* rm %{buildroot}/%{_sysconfdir}/cloud/templates/*.redhat.* rm %{buildroot}/%{_sysconfdir}/cloud/templates/*.ubuntu.* # remove duplicate files %if 0%{?suse_version} %fdupes %{buildroot}%{python3_sitelib} %endif %post %{_sbindir}/hidesensitivedata %files %license LICENSE LICENSE-GPLv3 %{_bindir}/cloud-id %{_bindir}/cloud-init %{_bindir}/cloud-init-per %{_sbindir}/hidesensitivedata %dir %{_sysconfdir}/cloud %dir %{_sysconfdir}/cloud/clean.d %{_sysconfdir}/cloud/clean.d/README %config(noreplace) %{_sysconfdir}/cloud/cloud.cfg.d %config(noreplace) %{_sysconfdir}/cloud/templates %{_sysconfdir}/dhcp/dhclient-exit-hooks.d/hook-dhclient %{_sysconfdir}/NetworkManager/dispatcher.d/hook-network-manager %{_sysconfdir}/systemd/system/sshd-keygen@.service.d/disable-sshd-keygen-if-cloud-init-active.conf %{_mandir}/man*/* %if 0%{?suse_version} && 0%{?suse_version} < 1500 %dir %{_datadir}/bash-completion %dir %{_datadir}/bash-completion/completions %endif %{_datadir}/bash-completion/completions/cloud-init %{python3_sitelib}/cloudinit %{python3_sitelib}/cloud_init-%{version}*.egg-info %{_prefix}/lib/cloud-init %{_prefix}/lib/systemd/system-generators/cloud-init-generator %{_prefix}/lib/systemd/system/cloud-config.service %{_prefix}/lib/systemd/system/cloud-config.target %{_prefix}/lib/systemd/system/cloud-init-local.service %{_prefix}/lib/systemd/system/cloud-init.service %{_prefix}/lib/systemd/system/cloud-init.target %{_prefix}/lib/systemd/system/cloud-final.service %dir %{_sysconfdir}/rsyslog.d %{_sysconfdir}/rsyslog.d/21-cloudinit.conf %{_prefix}/lib/udev/rules.d/66-azure-ephemeral.rules # We use cloud-netconfig to handle new interfaces added to the instance %exclude %{_prefix}/lib/systemd/system/cloud-init-hotplugd.service %exclude %{_prefix}/lib/systemd/system/cloud-init-hotplugd.socket %dir %attr(0755, root, root) %{_localstatedir}/lib/cloud %dir %docdir %dir %{_sysconfdir}/NetworkManager %dir %{_sysconfdir}/NetworkManager/dispatcher.d %dir %{_sysconfdir}/dhcp %dir %{_sysconfdir}/dhcp/dhclient-exit-hooks.d %dir %{_sysconfdir}/systemd/system/sshd-keygen@.service.d %files config-suse %config(noreplace) %{_sysconfdir}/cloud/cloud.cfg %files doc %docdir/examples/* %docdir/*.txt %dir %docdir/examples %changelog