Hello community, here is the log from the commit of package salt for openSUSE:Factory checked in at 2017-03-12 20:00:14 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/salt (Old) and /work/SRC/openSUSE:Factory/.salt.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "salt" Sun Mar 12 20:00:14 2017 rev:63 rq:476766 version:2016.11.3 Changes: -------- --- /work/SRC/openSUSE:Factory/salt/salt.changes 2016-11-10 13:19:08.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.salt.new/salt.changes 2017-03-12 20:00:16.421393326 +0100 @@ -1,0 +2,91 @@ +Fri Mar 3 09:36:17 UTC 2017 - [email protected] + +- Update to 2016.11.3 + See https://docs.saltstack.com/en/develop/topics/releases/2016.11.3.html + for full changelog + +- Use correct package names for PyYAML and MarkupSafe ([email protected]) + +- Changed: + * add-ssh-option-to-salt-ssh.patch + +- Added: + * add-options-for-dockerng.patch + * fix-case-in-os_family-for-suse.patch + * fix-regression-in-file.get_managed-add-unit-tests.patch + * translate-variable-arguments-if-they-contain-hidden-.patch + +- Removed: + * add-buildargs-option-to-dockerng.build.patch + * docker-buildargs-require-minimal-dockerpy-1.6.0-and-.patch + * fix-a-typo-for-master-comments.patch + * fix-error-parsing.patch + * fix-leading-dots-on-sanitized-hostname.patch + * fix-timezone-handling-for-rpm-installtime-bsc-101707.patch + * increasing-timeouts-for-running-integrations-tests.patch + * prevent-crash-on-unknown-to-the-repo-package.patch + * prevents-oserror-exception-in-case-path-doesn-t-exis.patch + * snapper-module-improvements.patch + * support-dryrun-for-dockerng.sls_build.patch + +------------------------------------------------------------------- +Thu Feb 16 14:41:48 UTC 2017 - [email protected] + +- Update to 2016.11.2 + See https://docs.saltstack.com/en/develop/topics/releases/2016.11.2.html + for full changelog + +- Bugfixes: + * keep fix for migrating salt home directory (bsc#1022562) + * Fix salt-minion update on RHEL (bsc#1022841) + * Prevents 'OSError' exception in case certain job cache path + doesn't exist (bsc#1023535) + +- Added: + * add-a-salt-minion-service-control-file.patch + * add-buildargs-option-to-dockerng.build.patch + * add-ssh-option-to-salt-ssh.patch + * add-yum-plugin.patch + * avoid-failures-on-sles-12-sp2-because-of-new-systemd.patch + * change-travis-configuration-file-to-use-salt-toaster.patch + * docker-buildargs-require-minimal-dockerpy-1.6.0-and-.patch + * fix-a-typo-for-master-comments.patch + * fix-error-parsing.patch + * fix-leading-dots-on-sanitized-hostname.patch + * fix-timezone-handling-for-rpm-installtime-bsc-101707.patch + * increasing-timeouts-for-running-integrations-tests.patch + * prevent-crash-on-unknown-to-the-repo-package.patch + * prevents-oserror-exception-in-case-path-doesn-t-exis.patch + * snapper-module-improvements.patch + * support-dryrun-for-dockerng.sls_build.patch + +- Renamed: + * 0001-tserong-suse.com-We-don-t-have-python-systemd-so-not.patch -> + tserong-suse.com-we-don-t-have-python-systemd-so-not.patch + * 0002-Run-salt-master-as-dedicated-salt-user.patch -> + run-salt-master-as-dedicated-salt-user.patch + * 0003-Check-if-byte-strings-are-properly-encoded-in-UTF-8.patch -> + check-if-byte-strings-are-properly-encoded-in-utf-8.patch + * 0004-do-not-generate-a-date-in-a-comment-to-prevent-rebui.patch -> + do-not-generate-a-date-in-a-comment-to-prevent-rebui.patch + * 0007-Add-zypp-notify-plugin.patch -> + add-zypp-notify-plugin.patch + * 0009-fix-salt-summary-to-count-not-responding-minions-cor.patch -> + fix-salt-summary-to-count-not-responding-minions-cor.patch + * 0010-Run-salt-api-as-user-salt-bsc-990029.patch -> + run-salt-api-as-user-salt-bsc-990029.patch + * 0013-Setting-up-OS-grains-for-SLES-Expanded-Support-SUSE-.patch -> + setting-up-os-grains-for-sles-expanded-support-suse-.patch + +- Removed: + * 0005-Use-SHA256-hash-type-by-default.patch + * 0006-Create-salt-proxy-instantiated-service-file.patch + * 0008-snapper-execution-module.patch + * 0011-Fix-snapper_test-for-python26.patch + * 0012-Fix-pkg.upgrade-for-zypper.patch + * 0014-acl.delfacl-fix-position-of-X-option-to-setfacl.patch + * 0015-Change-travis-configuration-file-to-use-salt-toaster.patch + * 0016-Fix-pkg.latest_version-when-latest-already-installed.patch + * 0017-Including-resolver-params-for-Zypper-debug-solver.patch + +------------------------------------------------------------------- Old: ---- 0001-tserong-suse.com-We-don-t-have-python-systemd-so-not.patch 0002-Run-salt-master-as-dedicated-salt-user.patch 0003-Check-if-byte-strings-are-properly-encoded-in-UTF-8.patch 0004-do-not-generate-a-date-in-a-comment-to-prevent-rebui.patch 0005-Use-SHA256-hash-type-by-default.patch 0006-Create-salt-proxy-instantiated-service-file.patch 0007-Add-zypp-notify-plugin.patch 0008-snapper-execution-module.patch 0009-fix-salt-summary-to-count-not-responding-minions-cor.patch 0010-Run-salt-api-as-user-salt-bsc-990029.patch 0011-Fix-snapper_test-for-python26.patch 0012-Fix-pkg.upgrade-for-zypper.patch 0013-Setting-up-OS-grains-for-SLES-Expanded-Support-SUSE-.patch 0014-acl.delfacl-fix-position-of-X-option-to-setfacl.patch 0015-Change-travis-configuration-file-to-use-salt-toaster.patch 0016-Fix-pkg.latest_version-when-latest-already-installed.patch 0017-Including-resolver-params-for-Zypper-debug-solver.patch salt-2016.3.4.tar.gz New: ---- add-a-salt-minion-service-control-file.patch add-options-for-dockerng.patch add-ssh-option-to-salt-ssh.patch add-yum-plugin.patch add-zypp-notify-plugin.patch avoid-failures-on-sles-12-sp2-because-of-new-systemd.patch change-travis-configuration-file-to-use-salt-toaster.patch check-if-byte-strings-are-properly-encoded-in-utf-8.patch do-not-generate-a-date-in-a-comment-to-prevent-rebui.patch fix-case-in-os_family-for-suse.patch fix-regression-in-file.get_managed-add-unit-tests.patch fix-salt-summary-to-count-not-responding-minions-cor.patch run-salt-api-as-user-salt-bsc-990029.patch run-salt-master-as-dedicated-salt-user.patch salt-2016.11.3.tar.gz setting-up-os-grains-for-sles-expanded-support-suse-.patch translate-variable-arguments-if-they-contain-hidden-.patch tserong-suse.com-we-don-t-have-python-systemd-so-not.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ salt.spec ++++++ --- /var/tmp/diff_new_pack.ofsSts/_old 2017-03-12 20:00:17.913182241 +0100 +++ /var/tmp/diff_new_pack.ofsSts/_new 2017-03-12 20:00:17.917181675 +0100 @@ -1,7 +1,7 @@ # # spec file for package salt # -# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -37,11 +37,11 @@ %bcond_with builddocs Name: salt -Version: 2016.3.4 +Version: 2016.11.3 Release: 0 Summary: A parallel remote execution system License: Apache-2.0 -Group: System/Monitoring +Group: System/Management Url: http://saltstack.org/ # Git: https://github.com/openSUSE/salt.git Source0: https://pypi.io/packages/source/s/%{name}/%{name}-%{version}.tar.gz @@ -53,61 +53,62 @@ # PATCH-FIX-OPENSUSE use-forking-daemon.patch [email protected] -- We don't have python-systemd, so notify can't work # We do not upstream this patch because this is something that we have to fix on our side -Patch1: 0001-tserong-suse.com-We-don-t-have-python-systemd-so-not.patch +Patch1: tserong-suse.com-we-don-t-have-python-systemd-so-not.patch # PATCH-FIX-OPENSUSE use-salt-user-for-master.patch -- Run salt master as dedicated salt user # We do not upstream this patch because this is suse custom configuration -Patch2: 0002-Run-salt-master-as-dedicated-salt-user.patch +Patch2: run-salt-master-as-dedicated-salt-user.patch # PATCH-FIX-OPENSUSE https://github.com/saltstack/salt/pull/30424 # We do not upstream this patch because it has been fixed upstream # (see: https://trello.com/c/wh96lCD4/1528-get-rid-of-0003-check-if-byte-strings-are-properly-encoded-in-utf-8-patch-in-the-salt-package) -Patch3: 0003-Check-if-byte-strings-are-properly-encoded-in-UTF-8.patch +Patch3: check-if-byte-strings-are-properly-encoded-in-utf-8.patch # PATCH-FIX-OPENSUSE prevent rebuilds in OBS # We do not upstream this patch because the issue is on our side -Patch4: 0004-do-not-generate-a-date-in-a-comment-to-prevent-rebui.patch -# PATCH-FIX-OPENSUSE - Upstream default hash type is set to MD5, while we require SHA256 (bsc#955373) -# PR https://github.com/saltstack/salt/pull/35341 (15.08.2016 - not merged yet) -Patch5: 0005-Use-SHA256-hash-type-by-default.patch -# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/31798 -# PR already merged. This will be gone in the next version -Patch6: 0006-Create-salt-proxy-instantiated-service-file.patch +Patch4: do-not-generate-a-date-in-a-comment-to-prevent-rebui.patch # PATCH-FIX-OPENSUSE Generate events from the Salt minion, -# if Zypper has been used outside the Salt infrastructure -# We do not upstream this because this is for SUSE only (15.08.2016) -Patch7: 0007-Add-zypp-notify-plugin.patch -# PATCH-FIX_UPSTREAM -Patch8: 0008-snapper-execution-module.patch -# PATCH-FIX_UPSTREAM -Patch9: 0009-fix-salt-summary-to-count-not-responding-minions-cor.patch +# We do not upstream this because this is for SUSE only (15.08.2016) if Zypper has been used outside the Salt infrastructure +Patch5: add-zypp-notify-plugin.patch +# PATCH-FIX_OPENSUSE +Patch6: run-salt-api-as-user-salt-bsc-990029.patch +# PATCH-FIX_OPENSUSE +Patch7: change-travis-configuration-file-to-use-salt-toaster.patch +# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/37856 (pending to include in 2016.11) +Patch8: setting-up-os-grains-for-sles-expanded-support-suse-.patch +# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/34165 +Patch9: fix-salt-summary-to-count-not-responding-minions-cor.patch +# PATCH-FIX_OPENSUSE +Patch10: avoid-failures-on-sles-12-sp2-because-of-new-systemd.patch +# PATCH-FIX_OPENSUSE +Patch11: add-yum-plugin.patch # PATCH-FIX_OPENSUSE -Patch10: 0010-Run-salt-api-as-user-salt-bsc-990029.patch -# PATCH-FIX_UPSTREAM -Patch11: 0011-Fix-snapper_test-for-python26.patch -# PATCH-FIX_UPSTREAM -Patch12: 0012-Fix-pkg.upgrade-for-zypper.patch -# PATCH-FIX_UPSTREAM -Patch13: 0013-Setting-up-OS-grains-for-SLES-Expanded-Support-SUSE-.patch -# PATCH-FIX_UPSTREAM -Patch14: 0014-acl.delfacl-fix-position-of-X-option-to-setfacl.patch +Patch12: add-ssh-option-to-salt-ssh.patch +# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/38806 +Patch13: add-a-salt-minion-service-control-file.patch +# PATCH-FIX-OPENSUSE +Patch14: add-options-for-dockerng.patch +# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/39591 +Patch15: fix-case-in-os_family-for-suse.patch # PATCH-FIX_OPENSUSE -Patch15: 0015-Change-travis-configuration-file-to-use-salt-toaster.patch -# PATCH-FIX_UPSTREAM -Patch16: 0016-Fix-pkg.latest_version-when-latest-already-installed.patch -# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/37430 -Patch17: 0017-Including-resolver-params-for-Zypper-debug-solver.patch +Patch16: translate-variable-arguments-if-they-contain-hidden-.patch +# PATCH-FIX_UPSTREAM https://github.com/saltstack/salt/pull/39762 +Patch17: fix-regression-in-file.get_managed-add-unit-tests.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: logrotate BuildRequires: python BuildRequires: python-devel # requirements/base.txt +%if 0%{?rhel} +BuildRequires: python-jinja2 +%else BuildRequires: python-Jinja2 +%endif +BuildRequires: python-MarkupSafe +BuildRequires: python-PyYAML BuildRequires: python-futures >= 2.0 -BuildRequires: python-markupsafe BuildRequires: python-msgpack-python > 0.3 BuildRequires: python-psutil BuildRequires: python-requests >= 1.0.0 BuildRequires: python-tornado >= 4.2.1 -BuildRequires: python-yaml # requirements/opt.txt (not all) # BuildRequires: python-MySQL-python # BuildRequires: python-timelib @@ -160,14 +161,19 @@ Requires: python-certifi %endif # requirements/base.txt +%if 0%{?rhel} +Requires: python-jinja2 +Requires: yum +%else Requires: python-Jinja2 +%endif +Requires: python-MarkupSafe +Requires: python-PyYAML Requires: python-futures >= 2.0 -Requires: python-markupsafe Requires: python-msgpack-python > 0.3 Requires: python-psutil Requires: python-requests >= 1.0.0 Requires: python-tornado >= 4.2.1 -Requires: python-yaml %if 0%{?suse_version} # required for zypper.py Requires: rpm-python @@ -217,6 +223,10 @@ BuildRequires: zsh %endif +%if 0%{?rhel} +BuildRequires: yum +%endif + %description Salt is a distributed remote execution system used to execute commands and query data. It was developed in order to bring the best solutions found in @@ -227,7 +237,7 @@ %package api Summary: The api for Salt a parallel remote execution system -Group: System/Monitoring +Group: System/Management Requires: %{name} = %{version}-%{release} Requires: %{name}-master = %{version}-%{release} Requires: python-CherryPy >= 3.2.2 @@ -237,7 +247,7 @@ %package cloud Summary: Generic cloud provisioning tool for Saltstack -Group: System/Monitoring +Group: System/Management Requires: %{name} = %{version}-%{release} Requires: %{name}-master = %{version}-%{release} Requires: python-apache-libcloud @@ -263,7 +273,7 @@ %package master Summary: The management component of Saltstack both protocols zmq and raet supported -Group: System/Monitoring +Group: System/Management Requires: %{name} = %{version}-%{release} %if 0%{?suse_version} Recommends: python-pygit2 >= 0.20.3 @@ -295,8 +305,9 @@ %package minion Summary: The client component for Saltstack -Group: System/Monitoring -Requires: %{name} = %{version}-%{release} +Group: System/Management +Requires(pre): %{name} = %{version}-%{release} + %if %{with systemd} %{?systemd_requires} %else @@ -314,7 +325,7 @@ %package raet Summary: Raet Support for Saltstack -Group: System/Monitoring +Group: System/Management Requires: %{name} = %{version}-%{release} Requires: python-enum34 Requires: python-ioflo >= 1.1.7 @@ -336,7 +347,7 @@ %package proxy Summary: Component for salt that enables controlling arbitrary devices -Group: System/Monitoring +Group: System/Management Requires: %{name} = %{version}-%{release} %if %{with systemd} %{?systemd_requires} @@ -359,7 +370,7 @@ %package syndic Summary: The syndic component for saltstack -Group: System/Monitoring +Group: System/Management Requires: %{name} = %{version}-%{release} Requires: %{name}-master = %{version}-%{release} %if %{with systemd} @@ -380,7 +391,7 @@ %package ssh Summary: Management component for Saltstack with ssh protocol -Group: System/Monitoring +Group: System/Management Requires: %{name} = %{version}-%{release} Requires: %{name}-master = %{version}-%{release} %if 0%{?suse_version} @@ -453,13 +464,14 @@ %patch2 -p1 %patch3 -p1 %patch4 -p1 -%patch5 -p1 -%patch6 -p1 # This is SUSE-only patch %if 0%{?suse_version} -%patch7 -p1 +%patch5 -p1 %endif + +%patch6 -p1 +%patch7 -p1 %patch8 -p1 %patch9 -p1 %patch10 -p1 @@ -507,6 +519,7 @@ install -Dd -m 0750 %{buildroot}%{_localstatedir}/cache/salt/master/roots install -Dd -m 0750 %{buildroot}%{_localstatedir}/cache/salt/master/syndics install -Dd -m 0750 %{buildroot}%{_localstatedir}/cache/salt/master/tokens +install -Dd -m 0750 %{buildroot}/var/lib/salt install -Dd -m 0750 %{buildroot}/srv/salt install -Dd -m 0750 %{buildroot}/srv/pillar install -Dd -m 0750 %{buildroot}/srv/spm @@ -532,10 +545,18 @@ %{__install} scripts/zypper/plugins/commit/zyppnotify %{buildroot}%{_prefix}/lib/zypp/plugins/commit/zyppnotify %endif +# Install Yum plugins only on RH machines +%if 0%{?fedora} || 0%{?rhel} +install -Dd %{buildroot}%{_prefix}/share/yum-plugins +install -Dd %{buildroot}/etc/yum/pluginconf.d +%{__install} scripts/yum/plugins/yumnotify.py %{buildroot}%{_prefix}/share/yum-plugins +%{__install} scripts/yum/plugins/yumnotify.conf %{buildroot}/etc/yum/pluginconf.d +%endif + ## install init and systemd scripts %if %{with systemd} install -Dpm 0644 pkg/salt-master.service %{buildroot}%{_unitdir}/salt-master.service -install -Dpm 0644 pkg/salt-minion.service %{buildroot}%{_unitdir}/salt-minion.service +install -Dpm 0644 pkg/suse/salt-minion.service %{buildroot}%{_unitdir}/salt-minion.service install -Dpm 0644 pkg/salt-syndic.service %{buildroot}%{_unitdir}/salt-syndic.service install -Dpm 0644 pkg/salt-api.service %{buildroot}%{_unitdir}/salt-api.service install -Dpm 0644 pkg/[email protected] %{buildroot}%{_unitdir}/[email protected] @@ -601,8 +622,9 @@ %endif %pre +getent passwd salt | grep srv\/salt >/dev/null && usermod -d /var/lib/salt salt getent group salt >/dev/null || %{_sbindir}/groupadd -r salt -getent passwd salt >/dev/null || %{_sbindir}/useradd -r -g salt -d /srv/salt -s /bin/false -c "salt-master daemon" salt +getent passwd salt >/dev/null || %{_sbindir}/useradd -r -g salt -d /var/lib/salt -s /bin/false -c "salt-master daemon" salt %post %if %{with systemd} @@ -617,11 +639,6 @@ %else %if 0%{?suse_version} %stop_on_removal salt-proxy -%else - if [ $1 -eq 0 ] ; then - /sbin/service salt-proxy stop >/dev/null 2>&1 - /sbin/chkconfig --del salt-proxy - fi %endif %endif @@ -879,6 +896,12 @@ %{_prefix}/lib/zypp/plugins/commit/zyppnotify %endif +# Install Yum plugins only on RH machines +%if 0%{?fedora} || 0%{?rhel} +%{_prefix}/share/yum-plugins/ +/etc/yum/pluginconf.d/yumnotify.conf +%endif + %if %{with systemd} %{_unitdir}/salt-minion.service %else @@ -922,6 +945,7 @@ %dir %attr(0750, salt, salt) %{_sysconfdir}/salt/pki/master/minions_denied/ %dir %attr(0750, salt, salt) %{_sysconfdir}/salt/pki/master/minions_pre/ %dir %attr(0750, salt, salt) %{_sysconfdir}/salt/pki/master/minions_rejected/ +%dir %attr(0755, salt, salt) /var/lib/salt %dir %attr(0755, root, salt) /srv/salt %dir %attr(0755, root, salt) /srv/pillar %dir %attr(0750, salt, salt) %{_localstatedir}/cache/salt/master/ @@ -961,6 +985,7 @@ %if %{with systemd} /usr/lib/tmpfiles.d/salt.conf %endif +%{_mandir}/man1/salt.1.* %if %{with docs} %files doc ++++++ add-a-salt-minion-service-control-file.patch ++++++ >From 69eeaf17252a2912ed33f2160c14282c2ff703bc Mon Sep 17 00:00:00 2001 From: Bo Maryniuk <[email protected]> Date: Wed, 18 Jan 2017 15:38:53 +0100 Subject: [PATCH] Add a salt-minion service control file --- pkg/suse/salt-minion.service | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 pkg/suse/salt-minion.service diff --git a/pkg/suse/salt-minion.service b/pkg/suse/salt-minion.service new file mode 100644 index 0000000000..1dbaa77755 --- /dev/null +++ b/pkg/suse/salt-minion.service @@ -0,0 +1,15 @@ +[Unit] +Description=The Salt Minion +After=network.target + +[Service] +Type=notify +NotifyAccess=all +LimitNOFILE=8192 +ExecStart=/usr/bin/salt-minion +KillMode=process +Restart=on-failure +RestartSec=15 + +[Install] +WantedBy=multi-user.target -- 2.11.0 ++++++ add-options-for-dockerng.patch ++++++ >From 95d547d3e6c98f927eaad77346b84b2ccef95627 Mon Sep 17 00:00:00 2001 From: Michael Calmer <[email protected]> Date: Thu, 19 Jan 2017 15:39:10 +0100 Subject: [PATCH] add options for dockerng * add buildargs option to dockerng.build * docker buildargs require minimal dockerpy 1.6.0 and docker version 1.9.0 * update version in the docs * support dryrun for dockerng.sls_build provide the possibility to put extra modules into the thin added unit test for dockerng.sls_build dryrun option --- salt/modules/dockerng.py | 51 ++++++++++++++++++----- tests/unit/modules/dockerng_test.py | 82 +++++++++++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+), 11 deletions(-) diff --git a/salt/modules/dockerng.py b/salt/modules/dockerng.py index 29af703ffa..c199fede1e 100644 --- a/salt/modules/dockerng.py +++ b/salt/modules/dockerng.py @@ -28,13 +28,13 @@ to replace references to ``dockerng`` with ``docker``. Installation Prerequisites -------------------------- -This execution module requires at least version 1.4.0 of both docker-py_ and -Docker_. docker-py can easily be installed using :py:func:`pip.install -<salt.modules.pip.install>`: +This execution module requires at least version 1.6.0 of docker-py_ and +version 1.9.0 of Docker_. docker-py can easily be installed using +:py:func:`pip.install <salt.modules.pip.install>`: .. code-block:: bash - salt myminion pip.install docker-py>=1.4.0 + salt myminion pip.install docker-py>=1.6.0 .. _docker-py: https://pypi.python.org/pypi/docker-py .. _Docker: https://www.docker.com/ @@ -332,8 +332,8 @@ __func_alias__ = { } # Minimum supported versions -MIN_DOCKER = (1, 6, 0) -MIN_DOCKER_PY = (1, 4, 0) +MIN_DOCKER = (1, 9, 0) +MIN_DOCKER_PY = (1, 6, 0) VERSION_RE = r'([\d.]+)' @@ -3557,7 +3557,8 @@ def build(path=None, rm=True, api_response=False, fileobj=None, - dockerfile=None): + dockerfile=None, + buildargs=None): ''' Builds a docker image from a Dockerfile or a URL @@ -3591,6 +3592,10 @@ def build(path=None, .. versionadded:: develop + buildargs + A dictionary of build arguments provided to the docker build process. + + **RETURN DATA** A dictionary containing one or more of the following keys: @@ -3637,7 +3642,8 @@ def build(path=None, fileobj=fileobj, rm=rm, nocache=not cache, - dockerfile=dockerfile) + dockerfile=dockerfile, + buildargs=buildargs) ret = {'Time_Elapsed': time.time() - time_started} _clear_context() @@ -5755,7 +5761,9 @@ def call(name, function, *args, **kwargs): raise CommandExecutionError('Missing function parameter') # move salt into the container - thin_path = salt.utils.thin.gen_thin(__opts__['cachedir']) + thin_path = salt.utils.thin.gen_thin(__opts__['cachedir'], + extra_mods=__salt__['config.option']("thin_extra_mods", ''), + so_mods=__salt__['config.option']("thin_so_mods", '')) with io.open(thin_path, 'rb') as file: _client_wrapper('put_archive', name, thin_dest_path, file) try: @@ -5865,7 +5873,7 @@ def sls(name, mods=None, saltenv='base', **kwargs): def sls_build(name, base='opensuse/python', mods=None, saltenv='base', - **kwargs): + dryrun=False, **kwargs): ''' Build a docker image using the specified sls modules and base image. @@ -5873,6 +5881,24 @@ def sls_build(name, base='opensuse/python', mods=None, saltenv='base', can build a docker image inside myminion that results of applying those states by doing: + base + the base image + + mods + the state modules to execute during build + + saltenv + the salt environment to use + + dryrun: False + when set to True the container will not be commited at the end of + the build. The dryrun succeed also when the state contains errors. + + **RETURN DATA** + + A dictionary with the ID of the new container. In case of a dryrun, + the state result is returned and the container gets removed. + CLI Example: .. code-block:: bash @@ -5905,9 +5931,12 @@ def sls_build(name, base='opensuse/python', mods=None, saltenv='base', # Now execute the state into the container ret = __salt__['dockerng.sls'](id_, mods, saltenv, **kwargs) # fail if the state was not successful - if not salt.utils.check_state_result(ret): + if not dryrun and not salt.utils.check_state_result(ret): raise CommandExecutionError(ret) finally: __salt__['dockerng.stop'](id_) + if dryrun: + __salt__['dockerng.rm'](id_) + return ret return __salt__['dockerng.commit'](id_, name) diff --git a/tests/unit/modules/dockerng_test.py b/tests/unit/modules/dockerng_test.py index ec4901e275..546635577a 100644 --- a/tests/unit/modules/dockerng_test.py +++ b/tests/unit/modules/dockerng_test.py @@ -680,6 +680,84 @@ class DockerngTestCase(TestCase): self.assertEqual( {'Id': 'ID2', 'Image': 'foo', 'Time_Elapsed': 42}, ret) + def test_sls_build_dryrun(self, *args): + ''' + test build sls image in dryrun mode. + ''' + docker_start_mock = MagicMock( + return_value={}) + docker_create_mock = MagicMock( + return_value={'Id': 'ID', 'Name': 'NAME'}) + docker_stop_mock = MagicMock( + return_value={'state': {'old': 'running', 'new': 'stopped'}, + 'result': True}) + docker_rm_mock = MagicMock( + return_value={}) + + docker_sls_mock = MagicMock( + return_value={ + "file_|-/etc/test.sh_|-/etc/test.sh_|-managed": { + "comment": "File /etc/test.sh is in the correct state", + "name": "/etc/test.sh", + "start_time": "07:04:26.834792", + "result": True, + "duration": 13.492, + "__run_num__": 0, + "changes": {} + }, + "test_|-always-passes_|-foo_|-succeed_without_changes": { + "comment": "Success!", + "name": "foo", + "start_time": "07:04:26.848915", + "result": True, + "duration": 0.363, + "__run_num__": 1, + "changes": {} + } + }) + + ret = None + with patch.dict(dockerng_mod.__salt__, { + 'dockerng.start': docker_start_mock, + 'dockerng.create': docker_create_mock, + 'dockerng.stop': docker_stop_mock, + 'dockerng.rm': docker_rm_mock, + 'dockerng.sls': docker_sls_mock}): + ret = dockerng_mod.sls_build( + 'foo', + mods='foo', + dryrun=True + ) + docker_create_mock.assert_called_once_with( + cmd='sleep infinity', + image='opensuse/python', interactive=True, name='foo', tty=True) + docker_start_mock.assert_called_once_with('ID') + docker_sls_mock.assert_called_once_with('ID', 'foo', 'base') + docker_stop_mock.assert_called_once_with('ID') + docker_rm_mock.assert_called_once_with('ID') + self.assertEqual( + { + "file_|-/etc/test.sh_|-/etc/test.sh_|-managed": { + "comment": "File /etc/test.sh is in the correct state", + "name": "/etc/test.sh", + "start_time": "07:04:26.834792", + "result": True, + "duration": 13.492, + "__run_num__": 0, + "changes": {} + }, + "test_|-always-passes_|-foo_|-succeed_without_changes": { + "comment": "Success!", + "name": "foo", + "start_time": "07:04:26.848915", + "result": True, + "duration": 0.363, + "__run_num__": 1, + "changes": {} + } + }, + ret) + def test_call_success(self): ''' test module calling inside containers @@ -694,6 +772,9 @@ class DockerngTestCase(TestCase): return_value={ 'retcode': 0 }) + docker_config_mock = MagicMock( + return_value='' + ) client = Mock() client.put_archive = Mock() @@ -704,6 +785,7 @@ class DockerngTestCase(TestCase): dockerng_mod.__salt__, { 'dockerng.run_all': docker_run_all_mock, 'dockerng.copy_to': docker_copy_to_mock, + 'config.option': docker_config_mock }), patch.dict( dockerng_mod.__context__, { -- 2.11.0 ++++++ add-ssh-option-to-salt-ssh.patch ++++++ >From c4c6610bf7314cc4c6ecf656bef341e2d1ca1587 Mon Sep 17 00:00:00 2001 From: Matei Albu <[email protected]> Date: Mon, 19 Dec 2016 16:54:52 +0100 Subject: [PATCH] Add --ssh-option to salt-ssh --ssh-option can be used to pass -o options to the ssh client. (cherry picked from commit 16f21e5) Add spaces around = Fix salt-ssh err when -ssh-option is missing --- salt/client/ssh/__init__.py | 7 ++++++- salt/client/ssh/shell.py | 19 ++++++++++++++++--- salt/utils/parsers.py | 18 +++++++++++++----- 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/salt/client/ssh/__init__.py b/salt/client/ssh/__init__.py index 23ec948fe0..bbef9d8de1 100644 --- a/salt/client/ssh/__init__.py +++ b/salt/client/ssh/__init__.py @@ -295,6 +295,9 @@ class SSH(object): 'remote_port_forwards': self.opts.get( 'ssh_remote_port_forwards' ), + 'ssh_options': self.opts.get( + 'ssh_options' + ) } if self.opts.get('rand_thin_dir'): self.defaults['thin_dir'] = os.path.join( @@ -693,6 +696,7 @@ class Single(object): identities_only=False, sudo_user=None, remote_port_forwards=None, + ssh_options=None, **kwargs): # Get mine setting and mine_functions if defined in kwargs (from roster) self.mine = mine @@ -749,7 +753,8 @@ class Single(object): 'mods': self.mods, 'identities_only': identities_only, 'sudo_user': sudo_user, - 'remote_port_forwards': remote_port_forwards} + 'remote_port_forwards': remote_port_forwards, + 'ssh_options': ssh_options} # Pre apply changeable defaults self.minion_opts = { 'grains_cache': True, diff --git a/salt/client/ssh/shell.py b/salt/client/ssh/shell.py index f78cb623e1..613660fe34 100644 --- a/salt/client/ssh/shell.py +++ b/salt/client/ssh/shell.py @@ -64,7 +64,8 @@ class Shell(object): mods=None, identities_only=False, sudo_user=None, - remote_port_forwards=None): + remote_port_forwards=None, + ssh_options=None): self.opts = opts # ssh <ipv6>, but scp [<ipv6]:/path self.host = host.strip('[]') @@ -78,6 +79,7 @@ class Shell(object): self.mods = mods self.identities_only = identities_only self.remote_port_forwards = remote_port_forwards + self.ssh_options = ssh_options def get_error(self, errstr): ''' @@ -169,6 +171,12 @@ class Shell(object): ret.append('-o {0} '.format(option)) return ''.join(ret) + def _ssh_opts(self): + if self.ssh_options: + return ' '.join(['-o {0}'.format(opt) + for opt in self.ssh_options]) + return '' + def _copy_id_str_old(self): ''' Return the string to execute ssh-copy-id @@ -176,11 +184,12 @@ class Shell(object): if self.passwd: # Using single quotes prevents shell expansion and # passwords containing '$' - return "{0} {1} '{2} -p {3} {4}@{5}'".format( + return "{0} {1} '{2} -p {3} {4} {5}@{6}'".format( 'ssh-copy-id', '-i {0}.pub'.format(self.priv), self._passwd_opts(), self.port, + self._ssh_opts(), self.user, self.host) return None @@ -193,11 +202,12 @@ class Shell(object): if self.passwd: # Using single quotes prevents shell expansion and # passwords containing '$' - return "{0} {1} {2} -p {3} {4}@{5}".format( + return "{0} {1} {2} -p {3} {4} {5}@{6}".format( 'ssh-copy-id', '-i {0}.pub'.format(self.priv), self._passwd_opts(), self.port, + self._ssh_opts(), self.user, self.host) return None @@ -229,6 +239,9 @@ class Shell(object): if ssh != 'scp' and self.remote_port_forwards: command.append(' '.join(['-R {0}'.format(item) for item in self.remote_port_forwards.split(',')])) + if self.ssh_options: + command.append(self._ssh_opts()) + command.append(cmd) return ' '.join(command) diff --git a/salt/utils/parsers.py b/salt/utils/parsers.py index 6330ed6596..c38506f3c5 100644 --- a/salt/utils/parsers.py +++ b/salt/utils/parsers.py @@ -2828,11 +2828,11 @@ class SaltSSHOptionParser(six.with_metaclass(OptionParserMeta, help='Pass a JID to be used instead of generating one.' ) - ports_group = optparse.OptionGroup( - self, 'Port Forwarding Options', - 'Parameters for setting up SSH port forwarding.' + ssh_group = optparse.OptionGroup( + self, 'SSH Options', + 'Parameters for the SSH client.' ) - ports_group.add_option( + ssh_group.add_option( '--remote-port-forwards', dest='ssh_remote_port_forwards', help='Setup remote port forwarding using the same syntax as with ' @@ -2840,7 +2840,15 @@ class SaltSSHOptionParser(six.with_metaclass(OptionParserMeta, 'forwarding definitions will be translated into multiple ' '-R parameters.' ) - self.add_option_group(ports_group) + ssh_group.add_option( + '--ssh-option', + dest='ssh_options', + action='append', + help='Equivalent to the -o ssh command option. Passes options to ' + 'the SSH client in the format used in the client configuration file. ' + 'Can be used multiple times.' + ) + self.add_option_group(ssh_group) auth_group = optparse.OptionGroup( self, 'Authentication Options', -- 2.11.0 ++++++ add-yum-plugin.patch ++++++ >From a0523ac82a1dcca7a7c77f9b3816f237f211b94e Mon Sep 17 00:00:00 2001 From: Bo Maryniuk <[email protected]> Date: Thu, 29 Sep 2016 17:00:14 +0200 Subject: [PATCH] Add YUM plugin * Add plugin for Yum-Salt integration * Add configuration for the yumnotify plugin * Fixes wrong 'enabled' opts for yumnotify plugin --- scripts/yum/plugins/README.md | 20 ++++++++++++++ scripts/yum/plugins/yumnotify.conf | 2 ++ scripts/yum/plugins/yumnotify.py | 55 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 scripts/yum/plugins/README.md create mode 100644 scripts/yum/plugins/yumnotify.conf create mode 100644 scripts/yum/plugins/yumnotify.py diff --git a/scripts/yum/plugins/README.md b/scripts/yum/plugins/README.md new file mode 100644 index 0000000000..cb3abd2260 --- /dev/null +++ b/scripts/yum/plugins/README.md @@ -0,0 +1,20 @@ +## What it is + +Plugin which provides a notification mechanism to Salt, if Yum is +used outside of it. + +## Installation + +Configuration files are going to: + + `/etc/yum/pluginconf.d/[name].conf` + +Plugin itself goes to: + + `/usr/share/yum-plugins/[name].conf` + +## Permissions + +User: root +Group: root +Mode: 644 diff --git a/scripts/yum/plugins/yumnotify.conf b/scripts/yum/plugins/yumnotify.conf new file mode 100644 index 0000000000..8e4d76c728 --- /dev/null +++ b/scripts/yum/plugins/yumnotify.conf @@ -0,0 +1,2 @@ +[main] +enabled=1 diff --git a/scripts/yum/plugins/yumnotify.py b/scripts/yum/plugins/yumnotify.py new file mode 100644 index 0000000000..268e1e9531 --- /dev/null +++ b/scripts/yum/plugins/yumnotify.py @@ -0,0 +1,55 @@ +# Copyright (c) 2016 SUSE Linux LLC +# All Rights Reserved. +# +# Author: Bo Maryniuk <[email protected]> + +from yum.plugins import TYPE_CORE +from yum import config +import os +import hashlib + +CK_PATH = "/var/cache/salt/minion/rpmdb.cookie" +RPM_PATH = "/var/lib/rpm/Packages" + +requires_api_version = '2.5' +plugin_type = TYPE_CORE + + +def _get_mtime(): + """ + Get the modified time of the RPM Database. + + Returns: + Unix ticks + """ + return os.path.exists(RPM_PATH) and int(os.path.getmtime(RPM_PATH)) or 0 + + +def _get_checksum(): + """ + Get the checksum of the RPM Database. + + Returns: + hexdigest + """ + digest = hashlib.md5() + with open(RPM_PATH, "rb") as rpm_db_fh: + while True: + buff = rpm_db_fh.read(0x1000) + if not buff: + break + digest.update(buff) + return digest.hexdigest() + + +def posttrans_hook(conduit): + """ + Hook after the package installation transaction. + + :param conduit: + :return: + """ + # Integrate Yum with Salt + if 'SALT_RUNNING' not in os.environ: + with open(CK_PATH, 'w') as ck_fh: + ck_fh.write('{chksum} {mtime}\n'.format(chksum=_get_checksum(), mtime=_get_mtime())) -- 2.11.0 ++++++ 0007-Add-zypp-notify-plugin.patch -> add-zypp-notify-plugin.patch ++++++ --- /work/SRC/openSUSE:Factory/salt/0007-Add-zypp-notify-plugin.patch 2016-11-10 13:19:07.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.salt.new/add-zypp-notify-plugin.patch 2017-03-12 20:00:15.945460670 +0100 @@ -1,7 +1,7 @@ -From 484b0fa0250b4adc0da34d033ebc5e019e3e1240 Mon Sep 17 00:00:00 2001 +From 2616f36c3a1131a73546449d33d917783f6f1f7b Mon Sep 17 00:00:00 2001 From: Bo Maryniuk <[email protected]> Date: Mon, 9 May 2016 10:33:44 +0200 -Subject: [PATCH 07/17] Add zypp-notify plugin +Subject: [PATCH] Add zypp-notify plugin * Add unit test to the libzypp drift detector plugin --- @@ -17,7 +17,7 @@ diff --git a/scripts/zypper/plugins/commit/README.md b/scripts/zypper/plugins/commit/README.md new file mode 100644 -index 0000000..01c8917 +index 0000000000..01c8917c8e --- /dev/null +++ b/scripts/zypper/plugins/commit/README.md @@ -0,0 +1,3 @@ @@ -26,7 +26,7 @@ +Plugins here are required to interact with SUSE Manager in conjunction of SaltStack and Zypper. diff --git a/scripts/zypper/plugins/commit/zyppnotify b/scripts/zypper/plugins/commit/zyppnotify new file mode 100755 -index 0000000..268298b +index 0000000000..268298b108 --- /dev/null +++ b/scripts/zypper/plugins/commit/zyppnotify @@ -0,0 +1,59 @@ @@ -91,7 +91,7 @@ +DriftDetector().main() diff --git a/tests/unit/zypp_plugins_test.py b/tests/unit/zypp_plugins_test.py new file mode 100644 -index 0000000..550403c +index 0000000000..550403cc24 --- /dev/null +++ b/tests/unit/zypp_plugins_test.py @@ -0,0 +1,51 @@ @@ -148,7 +148,7 @@ + run_tests(ZyppPluginsTestCase, needs_daemon=False) diff --git a/tests/zypp_plugin.py b/tests/zypp_plugin.py new file mode 100644 -index 0000000..218f703 +index 0000000000..218f703811 --- /dev/null +++ b/tests/zypp_plugin.py @@ -0,0 +1,64 @@ @@ -217,5 +217,6 @@ + ''' + self.closed = True -- -2.10.1 +2.11.0 + ++++++ avoid-failures-on-sles-12-sp2-because-of-new-systemd.patch ++++++ >From b338b21fe340ee4efa0045894315fcf20be1dc49 Mon Sep 17 00:00:00 2001 From: Silvio Moioli <[email protected]> Date: Wed, 14 Dec 2016 10:33:39 +0100 Subject: [PATCH] Avoid failures on SLES 12 SP2 because of new systemd TaskMax limit (bsc#985112) --- pkg/salt-master.service | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/salt-master.service b/pkg/salt-master.service index 59be50301a..ecd3edd467 100644 --- a/pkg/salt-master.service +++ b/pkg/salt-master.service @@ -6,6 +6,7 @@ After=network.target LimitNOFILE=16384 Type=simple ExecStart=/usr/bin/salt-master +TasksMax=infinity [Install] WantedBy=multi-user.target -- 2.11.0 ++++++ change-travis-configuration-file-to-use-salt-toaster.patch ++++++ >From 79f9f4c06813d70cd03ad32c6c8ef8fec1656e88 Mon Sep 17 00:00:00 2001 From: Mihai Dinca <[email protected]> Date: Fri, 14 Oct 2016 09:04:47 +0200 Subject: [PATCH] Change travis configuration file to use salt-toaster --- .travis.yml | 47 +++++++++++++++++++---------------------------- 1 file changed, 19 insertions(+), 28 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7b4c8ce0e5..3101efb372 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,35 +1,26 @@ language: python python: - - '2.6' - - '2.7' + - 2.7 -before_install: - - sudo apt-get update - - sudo apt-get install --fix-broken --ignore-missing -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" swig rabbitmq-server ruby python-apt mysql-server libmysqlclient-dev - - (git describe && git fetch --tags) || (git remote add upstream git://github.com/saltstack/salt.git && git fetch --tags upstream) - - pip install mock - - pip install --allow-external http://dl.dropbox.com/u/174789/m2crypto-0.20.1.tar.gz - - pip install --upgrade pep8 'pylint<=1.2.0' - - pip install --upgrade coveralls - - "if [[ $TRAVIS_PYTHON_VERSION == '2.6' ]]; then pip install unittest2 ordereddict; fi" - - pip install git+https://github.com/saltstack/salt-testing.git#egg=SaltTesting - -install: - - pip install -r requirements/zeromq.txt -r requirements/cloud.txt - - pip install --allow-all-external -r requirements/opt.txt +services: + - docker -before_script: - - "/home/travis/virtualenv/python${TRAVIS_PYTHON_VERSION}/bin/pylint --rcfile=.testing.pylintrc salt/ && echo 'Finished Pylint Check Cleanly' || echo 'Finished Pylint Check With Errors'" - - "/home/travis/virtualenv/python${TRAVIS_PYTHON_VERSION}/bin/pep8 --ignore=E501,E12 salt/ && echo 'Finished PEP-8 Check Cleanly' || echo 'Finished PEP-8 Check With Errors'" +env: + global: + - VERSION=leap42sp1 FLAVOR=devel NOPULL=true SALT_REPO=.. + matrix: + - TARGET=suse.tests PYTEST_CFG=./configs/$TARGET/$VERSION/$FLAVOR.cfg + - TARGET=saltstack.unit PYTEST_CFG=./configs/$TARGET/$VERSION/default.cfg + - TARGET=saltstack.integration PYTEST_CFG=./configs/$TARGET/$VERSION/default.cfg -script: "sudo -E /home/travis/virtualenv/python${TRAVIS_PYTHON_VERSION}/bin/python setup.py test --runtests-opts='--run-destructive --sysinfo -v --coverage'" - -after_success: - - coveralls +before_install: +- git clone --depth 1 https://github.com/openSUSE/salt-toaster.git +- cd salt-toaster +- echo "*" > .gitignore +- tar xfz sandbox.tar.gz +- sandbox/bin/pip install -r requirements.txt --exists-action w --upgrade +- VERSION=leap42sp1 FLAVOR=default NOPULL=true make build_image +- make build_image -notifications: - irc: - channels: "irc.freenode.org#salt-devel" - on_success: change - on_failure: change +script: make $TARGET PYTEST_CFG=$PYTEST_CFG -- 2.11.0 ++++++ check-if-byte-strings-are-properly-encoded-in-utf-8.patch ++++++ >From df521307c4bff21ab7891e0086fc4dc8b7c2207c Mon Sep 17 00:00:00 2001 From: Bo Maryniuk <[email protected]> Date: Mon, 18 Jan 2016 16:28:48 +0100 Subject: [PATCH] Check if byte strings are properly encoded in UTF-8 Rename keywords arguments variable to a default name. --- salt/modules/zypper.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/salt/modules/zypper.py b/salt/modules/zypper.py index 53837e5e73..75e529c3f9 100644 --- a/salt/modules/zypper.py +++ b/salt/modules/zypper.py @@ -366,9 +366,9 @@ def info_installed(*names, **kwargs): summary, description. :param errors: - Handle RPM field errors (true|false). By default, various mistakes in the textual fields are simply ignored and - omitted from the data. Otherwise a field with a mistake is not returned, instead a 'N/A (bad UTF-8)' - (not available, broken) text is returned. + Handle RPM field errors. If 'ignore' is chosen, then various mistakes are simply ignored and omitted + from the texts or strings. If 'report' is chonen, then a field with a mistake is not returned, instead + a 'N/A (broken)' (not available, broken) text is placed. Valid attributes are: ignore, report @@ -381,7 +381,8 @@ def info_installed(*names, **kwargs): salt '*' pkg.info_installed <package1> <package2> <package3> ... salt '*' pkg.info_installed <package1> attr=version,vendor salt '*' pkg.info_installed <package1> <package2> <package3> ... attr=version,vendor - salt '*' pkg.info_installed <package1> <package2> <package3> ... attr=version,vendor errors=true + salt '*' pkg.info_installed <package1> <package2> <package3> ... attr=version,vendor errors=ignore + salt '*' pkg.info_installed <package1> <package2> <package3> ... attr=version,vendor errors=report ''' ret = dict() for pkg_name, pkg_nfo in __salt__['lowpkg.info'](*names, **kwargs).items(): @@ -395,7 +396,7 @@ def info_installed(*names, **kwargs): else: value_ = value.decode('UTF-8', 'ignore').encode('UTF-8', 'ignore') if value != value_: - value = kwargs.get('errors') and value_ or 'N/A (invalid UTF-8)' + value = kwargs.get('errors', 'ignore') == 'ignore' and value_ or 'N/A (invalid UTF-8)' log.error('Package {0} has bad UTF-8 code in {1}: {2}'.format(pkg_name, key, value)) if key == 'source_rpm': t_nfo['source'] = value -- 2.11.0 ++++++ do-not-generate-a-date-in-a-comment-to-prevent-rebui.patch ++++++ >From 7eeddadbf5ad309045b77762ac9f2f526af83b03 Mon Sep 17 00:00:00 2001 From: Michael Calmer <[email protected]> Date: Fri, 4 Mar 2016 09:51:22 +0100 Subject: [PATCH] do not generate a date in a comment to prevent rebuilds (bsc#969407) --- setup.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/setup.py b/setup.py index f9e9437e71..2356b2ada1 100755 --- a/setup.py +++ b/setup.py @@ -667,8 +667,7 @@ class Clean(clean): INSTALL_VERSION_TEMPLATE = '''\ -# This file was auto-generated by salt's setup on \ -{date:%A, %d %B %Y @ %H:%m:%S UTC}. +# This file was auto-generated by salt's setup from salt.version import SaltStackVersion -- 2.11.0 ++++++ fix-case-in-os_family-for-suse.patch ++++++ >From 036be5f7300bbf6c5ef3967b5cc935fd678cd1e1 Mon Sep 17 00:00:00 2001 From: Michael Calmer <[email protected]> Date: Thu, 23 Feb 2017 12:01:05 +0100 Subject: [PATCH] fix case in os_family for Suse --- salt/modules/service.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/salt/modules/service.py b/salt/modules/service.py index bb7133ee99..49186e4c9d 100644 --- a/salt/modules/service.py +++ b/salt/modules/service.py @@ -53,7 +53,7 @@ def __virtual__(): if __grains__['kernel'] != 'Linux': return (False, 'Non Linux OSes are not supported') # SUSE >=12.0 uses systemd - if __grains__.get('os_family', '') == 'SUSE': + if __grains__.get('os_family', '') == 'Suse': try: # osrelease might be in decimal format (e.g. "12.1"), or for # SLES might include service pack (e.g. "11 SP3"), so split on -- 2.11.0 ++++++ fix-regression-in-file.get_managed-add-unit-tests.patch ++++++ >From 89fd1a83d282a10728077a08466627271a052733 Mon Sep 17 00:00:00 2001 From: Erik Johnson <[email protected]> Date: Wed, 1 Mar 2017 10:19:33 -0600 Subject: [PATCH] Fix regression in file.get_managed, add unit tests This is no longer needed since we're invoking the state module directly and not via the state compiler. * Fix regression in file.get_managed when skip_verify=True * Add integration tests for remote file sources * Remove next(iter()) extraction --- salt/modules/file.py | 6 +-- salt/states/archive.py | 11 ---- tests/integration/states/file.py | 105 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+), 14 deletions(-) diff --git a/salt/modules/file.py b/salt/modules/file.py index 8f0c6914b6..381800bc1a 100644 --- a/salt/modules/file.py +++ b/salt/modules/file.py @@ -3745,13 +3745,13 @@ def get_managed( if cached_dest and (source_hash or skip_verify): htype = source_sum.get('hash_type', 'sha256') cached_sum = get_hash(cached_dest, form=htype) - if cached_sum != source_sum['hsum']: - cache_refetch = True - elif skip_verify: + if skip_verify: # prev: if skip_verify or cached_sum == source_sum['hsum']: # but `cached_sum == source_sum['hsum']` is elliptical as prev if sfn = cached_dest source_sum = {'hsum': cached_sum, 'hash_type': htype} + elif cached_sum != source_sum['hsum']: + cache_refetch = True # If we didn't have the template or remote file, let's get it # Similarly when the file has been updated and the cache has to be refreshed diff --git a/salt/states/archive.py b/salt/states/archive.py index c5df213620..46146e971e 100644 --- a/salt/states/archive.py +++ b/salt/states/archive.py @@ -897,17 +897,6 @@ def extracted(name, ret['comment'] = '\n'.join([str(x) for x in file_result]) return ret - # Get actual state result. The state.single return is a single-element - # dictionary with the state's unique ID at the top level, and its value - # being the state's return dictionary. next(iter(dict_name)) will give - # us the value of the first key, so - # file_result[next(iter(file_result))] will give us the results of the - # state.single we just ran. - try: - file_result = file_result[next(iter(file_result))] - except AttributeError: - pass - try: if not file_result['result']: log.debug('failed to download {0}'.format(source_match)) diff --git a/tests/integration/states/file.py b/tests/integration/states/file.py index d63f318064..faa83d00e8 100644 --- a/tests/integration/states/file.py +++ b/tests/integration/states/file.py @@ -9,15 +9,22 @@ from __future__ import absolute_import from distutils.version import LooseVersion import errno import glob +import logging import os import re import sys import shutil +import socket import stat import tempfile import textwrap +import threading +import tornado.ioloop +import tornado.web import filecmp +log = logging.getLogger(__name__) + # Import 3rd-party libs from salt.ext.six.moves import range # pylint: disable=import-error,redefined-builtin @@ -2392,6 +2399,104 @@ class FileTest(integration.ModuleCase, integration.SaltReturnAssertsMixIn): if check_file: self.run_function('file.remove', [file]) + +PORT = 9999 +FILE_SOURCE = 'http://localhost:{0}/grail/scene33'.format(PORT) +FILE_HASH = 'd2feb3beb323c79fc7a0f44f1408b4a3' +STATE_DIR = os.path.join(integration.FILES, 'file', 'base') + + +class RemoteFileTest(integration.ModuleCase, integration.SaltReturnAssertsMixIn): + ''' + Uses a local tornado webserver to test http(s) file.managed states with and + without skip_verify + ''' + @classmethod + def webserver(cls): + ''' + method to start tornado static web app + ''' + application = tornado.web.Application([ + (r'/(.*)', tornado.web.StaticFileHandler, {'path': STATE_DIR}) + ]) + application.listen(PORT) + tornado.ioloop.IOLoop.instance().start() + + @classmethod + def setUpClass(cls): + ''' + start tornado app on thread and wait until it is running + ''' + cls.server_thread = threading.Thread(target=cls.webserver) + cls.server_thread.daemon = True + cls.server_thread.start() + # check if tornado app is up + port_closed = True + while port_closed: + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + result = sock.connect_ex(('127.0.0.1', PORT)) + if result == 0: + port_closed = False + + @classmethod + def tearDownClass(cls): + tornado.ioloop.IOLoop.instance().stop() + cls.server_thread.join() + + def setUp(self): + fd_, self.name = tempfile.mkstemp(dir=integration.TMP) + try: + os.close(fd_) + except OSError as exc: + if exc.errno != errno.EBADF: + raise exc + # Remove the file that mkstemp just created so that the states can test + # creating a new file instead of a diff from a zero-length file. + self.tearDown() + + def tearDown(self): + try: + os.remove(self.name) + except OSError as exc: + if exc.errno != errno.ENOENT: + raise exc + + def test_file_managed_http_source_no_hash(self): + ''' + Test a remote file with no hash + ''' + ret = self.run_state('file.managed', + name=self.name, + source=FILE_SOURCE, + skip_verify=False) + log.debug('ret = %s', ret) + # This should fail because no hash was provided + self.assertSaltFalseReturn(ret) + + def test_file_managed_http_source(self): + ''' + Test a remote file with no hash + ''' + ret = self.run_state('file.managed', + name=self.name, + source=FILE_SOURCE, + source_hash=FILE_HASH, + skip_verify=False) + log.debug('ret = %s', ret) + self.assertSaltTrueReturn(ret) + + def test_file_managed_http_source_skip_verify(self): + ''' + Test a remote file using skip_verify + ''' + ret = self.run_state('file.managed', + name=self.name, + source=FILE_SOURCE, + skip_verify=True) + log.debug('ret = %s', ret) + self.assertSaltTrueReturn(ret) + + if __name__ == '__main__': from integration import run_tests run_tests(FileTest) -- 2.11.0 ++++++ fix-salt-summary-to-count-not-responding-minions-cor.patch ++++++ >From 54fa5d2b6d47d242e98e9a7f4cc597e03084d4d2 Mon Sep 17 00:00:00 2001 From: Michael Calmer <[email protected]> Date: Tue, 21 Jun 2016 13:12:48 +0200 Subject: [PATCH] fix salt --summary to count not responding minions correctly (bsc#972311) In case a minion is not responding a dict is returned instead of a string. --- salt/cli/salt.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/salt/cli/salt.py b/salt/cli/salt.py index 1fc9a83508..88ac65e7c2 100644 --- a/salt/cli/salt.py +++ b/salt/cli/salt.py @@ -281,7 +281,9 @@ class SaltCMD(parsers.SaltCMDOptionParser): not_connected_minions = [] failed_minions = [] for each_minion in ret: - minion_ret = ret[each_minion].get('ret') + minion_ret = ret[each_minion] + if (isinstance(minion_ret, dict) and 'ret' in minion_ret): + minion_ret = ret[each_minion].get('ret') if ( isinstance(minion_ret, string_types) and minion_ret.startswith("Minion did not return") -- 2.11.0 ++++++ run-salt-api-as-user-salt-bsc-990029.patch ++++++ >From 7bbbd3b6ebaf3988a4f97b905040b56be065f201 Mon Sep 17 00:00:00 2001 From: Michael Calmer <[email protected]> Date: Fri, 29 Jul 2016 10:50:21 +0200 Subject: [PATCH] Run salt-api as user salt (bsc#990029) --- pkg/salt-api.service | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/salt-api.service b/pkg/salt-api.service index c3e67d510c..9be2cb8ee6 100644 --- a/pkg/salt-api.service +++ b/pkg/salt-api.service @@ -3,8 +3,8 @@ Description=The Salt API After=network.target [Service] -Type=notify -NotifyAccess=all +User=salt +Type=simple LimitNOFILE=8192 ExecStart=/usr/bin/salt-api TimeoutStopSec=3 -- 2.11.0 ++++++ run-salt-master-as-dedicated-salt-user.patch ++++++ >From d1d0fec1dd0fbf6a67c313718975ceb72c10cd2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Klaus=20K=C3=A4mpf?= <[email protected]> Date: Wed, 20 Jan 2016 11:01:06 +0100 Subject: [PATCH] Run salt master as dedicated salt user --- conf/master | 3 ++- pkg/salt-common.logrotate | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/conf/master b/conf/master index 3930c9832d..f58eb496bf 100644 --- a/conf/master +++ b/conf/master @@ -25,7 +25,8 @@ # permissions to allow the specified user to run the master. The exception is # the job cache, which must be deleted if this user is changed. If the # modified files cause conflicts, set verify_env to False. -#user: root +user: salt +syndic_user: salt # The port used by the communication interface. The ret (return) port is the # interface used for the file server, authentication, job returns, etc. diff --git a/pkg/salt-common.logrotate b/pkg/salt-common.logrotate index 3cd002308e..8d970c0a64 100644 --- a/pkg/salt-common.logrotate +++ b/pkg/salt-common.logrotate @@ -1,4 +1,5 @@ /var/log/salt/master { + su salt salt weekly missingok rotate 7 @@ -7,6 +8,7 @@ } /var/log/salt/minion { + su salt salt weekly missingok rotate 7 @@ -15,6 +17,7 @@ } /var/log/salt/key { + su salt salt weekly missingok rotate 7 -- 2.11.0 ++++++ salt-2016.3.4.tar.gz -> salt-2016.11.3.tar.gz ++++++ /work/SRC/openSUSE:Factory/salt/salt-2016.3.4.tar.gz /work/SRC/openSUSE:Factory/.salt.new/salt-2016.11.3.tar.gz differ: char 5, line 1 ++++++ setting-up-os-grains-for-sles-expanded-support-suse-.patch ++++++ >From 5a07f204d45b2b86d8bc0279527723e030cc4e21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20Su=C3=A1rez=20Hern=C3=A1ndez?= <[email protected]> Date: Fri, 30 Sep 2016 13:06:52 +0100 Subject: [PATCH] Setting up OS grains for SLES Expanded Support (SUSE's Red Hat compatible platform) core.py: quote style fixed --- salt/grains/core.py | 1 + 1 file changed, 1 insertion(+) diff --git a/salt/grains/core.py b/salt/grains/core.py index 6a42cc734f..fce35cb313 100644 --- a/salt/grains/core.py +++ b/salt/grains/core.py @@ -1049,6 +1049,7 @@ _OS_NAME_MAP = { 'sles': 'SUSE', 'slesexpand': 'RES', 'void': 'Void', + 'slesexpand': 'RES', 'linuxmint': 'Mint', } -- 2.11.0 ++++++ translate-variable-arguments-if-they-contain-hidden-.patch ++++++ >From 7313bf5574a72557a6389b9a991316d0b2c6f848 Mon Sep 17 00:00:00 2001 From: Michael Calmer <[email protected]> Date: Wed, 1 Mar 2017 15:37:04 +0100 Subject: [PATCH] translate variable arguments if they contain hidden keywords (bsc#1025896) - includes a test --- salt/states/module.py | 30 ++++++++++++++++++++++-------- tests/unit/states/module_test.py | 14 ++++++++++++++ 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/salt/states/module.py b/salt/states/module.py index 686546832f..adc6e12c9d 100644 --- a/salt/states/module.py +++ b/salt/states/module.py @@ -218,16 +218,30 @@ def run(name, **kwargs): ret['result'] = False return ret - if aspec.varargs and aspec.varargs in kwargs: - varargs = kwargs.pop(aspec.varargs) + if aspec.varargs: + if aspec.varargs == 'name': + rarg = 'm_name' + elif aspec.varargs == 'fun': + rarg = 'm_fun' + elif aspec.varargs == 'names': + rarg = 'm_names' + elif aspec.varargs == 'state': + rarg = 'm_state' + elif aspec.varargs == 'saltenv': + rarg = 'm_saltenv' + else: + rarg = aspec.varargs - if not isinstance(varargs, list): - msg = "'{0}' must be a list." - ret['comment'] = msg.format(aspec.varargs) - ret['result'] = False - return ret + if rarg in kwargs: + varargs = kwargs.pop(rarg) + + if not isinstance(varargs, list): + msg = "'{0}' must be a list." + ret['comment'] = msg.format(aspec.varargs) + ret['result'] = False + return ret - args.extend(varargs) + args.extend(varargs) nkwargs = {} if aspec.keywords and aspec.keywords in kwargs: diff --git a/tests/unit/states/module_test.py b/tests/unit/states/module_test.py index 0c025e3861..20dda73938 100644 --- a/tests/unit/states/module_test.py +++ b/tests/unit/states/module_test.py @@ -38,6 +38,10 @@ class ModuleStateTest(TestCase): varargs=None, keywords=None, defaults=False) + bspec = ArgSpec(args=[], + varargs='names', + keywords='kwargs', + defaults=None) def test_module_run_module_not_available(self): ''' @@ -69,6 +73,16 @@ class ModuleStateTest(TestCase): comment = 'The following arguments are missing: world hello' self.assertEqual(ret['comment'], comment) + @patch('salt.utils.args.get_function_argspec', MagicMock(return_value=bspec)) + def test_module_run_hidden_varargs(self): + ''' + Tests the return of module.run state when hidden varargs are used with + wrong type. + ''' + ret = module.run(CMD, m_names = 'anyname') + comment = "'names' must be a list." + self.assertEqual(ret['comment'], comment) + if __name__ == '__main__': from integration import run_tests -- 2.11.0 ++++++ tserong-suse.com-we-don-t-have-python-systemd-so-not.patch ++++++ >From a9f1be35b0c158fcdd460dcc8c501fe039d97258 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Klaus=20K=C3=A4mpf?= <[email protected]> Date: Wed, 20 Jan 2016 11:00:15 +0100 Subject: [PATCH] [email protected] -- We don't have python-systemd, so notify can't work --- pkg/salt-master.service | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/salt-master.service b/pkg/salt-master.service index 1f4650f872..59be50301a 100644 --- a/pkg/salt-master.service +++ b/pkg/salt-master.service @@ -4,8 +4,7 @@ After=network.target [Service] LimitNOFILE=16384 -Type=notify -NotifyAccess=all +Type=simple ExecStart=/usr/bin/salt-master [Install] -- 2.11.0
