diff --git a/.gitignore b/.gitignore index 3ba5330..445f0ce 100644 --- a/.gitignore +++ b/.gitignore @@ -83,3 +83,4 @@ /salt-2018.3.3.tar.gz /salt-2019.2.0.tar.gz /salt-2019.2.1rc0.tar.gz +/salt-3000.tar.gz diff --git a/salt-m2_requirements.patch b/salt-m2_requirements.patch new file mode 100644 index 0000000..1e0b460 --- /dev/null +++ b/salt-m2_requirements.patch @@ -0,0 +1,6 @@ +diff -Naur a/requirements/crypto.txt b/requirements/crypto.txt +--- a/requirements/crypto.txt 2020-02-03 21:33:35.989983615 +0000 ++++ b/requirements/crypto.txt 2020-02-03 21:33:57.651350234 +0000 +@@ -1,2 +1 @@ +-pycrypto>=2.6.1; sys.platform not in 'win32,darwin' + pycryptodomex; sys.platform == 'win32' diff --git a/salt-minion b/salt-minion index 68ee88b..1bff798 100644 --- a/salt-minion +++ b/salt-minion @@ -67,14 +67,12 @@ _su_cmd() { _get_pid() { - netstat -n $NS_NOTRIM -ap --protocol=unix 2>$ERROR_TO_DEVNULL \ - | sed -r -e "\|\s${SOCK_DIR}/minion_event_${MINION_ID_HASH}_pub\.ipc$|"'!d; s|/.*||; s/.*\s//;' \ - | uniq + cat $PID_FILE 2>/dev/null } _is_running() { - [ -n "$(_get_pid)" ] + [ -n "$(_get_pid)" ] && ps wwwaxu | grep '[s]alt-minion' | awk '{print $2}' | grep -qi "\b$(_get_pid)\b" } @@ -219,7 +217,7 @@ status() { local retval=0 local pid="$(_get_pid)" - if [ -n "$pid" ]; then + if _is_running; then # Unquote $pid here to display multiple PIDs in one line echo "$SERVICE:$MINION_USER:$MINION_ID is running:" $pid else diff --git a/salt-py3-2019.2.1-rpmsign.patch b/salt-py3-2019.2.1-rpmsign.patch new file mode 100644 index 0000000..ca5d524 --- /dev/null +++ b/salt-py3-2019.2.1-rpmsign.patch @@ -0,0 +1,214 @@ +diff -Naur a/salt/modules/rpmbuild_pkgbuild.py b/salt/modules/rpmbuild_pkgbuild.py +--- a/salt/modules/rpmbuild_pkgbuild.py 2019-07-02 10:15:07.035874718 -0600 ++++ b/salt/modules/rpmbuild_pkgbuild.py 2019-07-02 10:55:34.147934899 -0600 +@@ -140,7 +140,9 @@ + tgtattrs = tgt.split('-') + if tgtattrs[0] == 'amzn': + distset = '--define "dist .{0}1"'.format(tgtattrs[0]) +- elif tgtattrs[1] in ['6', '7']: ++ elif tgtattrs[0] == 'amzn2': ++ distset = '--define "dist .{0}"'.format(tgtattrs[0]) ++ elif tgtattrs[1] in ['6', '7', '8']: + distset = '--define "dist .el{0}"'.format(tgtattrs[1]) + else: + distset = '' +@@ -173,6 +175,19 @@ + return deps_list + + ++def _check_repo_gpg_phrase_utils(): ++ ''' ++ Check for /usr/libexec/gpg-preset-passphrase is installed ++ ''' ++ util_name = '/usr/libexec/gpg-preset-passphrase' ++ if __salt__['file.file_exists'](util_name): ++ return True ++ else: ++ raise CommandExecutionError( ++ 'utility \'{0}\' needs to be installed'.format(util_name) ++ ) ++ ++ + def make_src_pkg(dest_dir, spec, sources, env=None, template=None, saltenv='base', runas='root'): + ''' + Create a source rpm from the given spec file and sources +@@ -450,8 +465,14 @@ + + Use a passphrase with the signing key presented in ``keyid``. + Passphrase is received from Pillar data which could be passed on the +- command line with ``pillar`` parameter. For example: ++ command line with ``pillar`` parameter. + ++ .. versionadded:: 2018.2.1 ++ ++ RHEL 8 and above leverages gpg-agent and gpg-preset-passphrase for ++ caching keys, etc. ++ ++ For example: + .. code-block:: bash + + pillar='{ "gpg_passphrase" : "my_passphrase" }' +@@ -485,10 +506,27 @@ + ''' + SIGN_PROMPT_RE = re.compile(r'Enter pass phrase: ', re.M) + +- define_gpg_name = '' ++ local_keygrip_to_use = None ++ local_key_fingerprint = None + local_keyid = None + local_uids = None ++ define_gpg_name = '' + phrase = '' ++ retrc = 0 ++ use_gpg_agent = False ++ ++ res = { ++ 'retcode': 1, ++ 'stdout': '', ++ 'stderr': 'initialization value' ++ } ++ ++ if gnupghome and env is None: ++ env = {} ++ env['GNUPGHOME'] = gnupghome ++ ++ if __grains__.get('osmajorrelease') >= 7: ++ use_gpg_agent = True + + if keyid is not None: + # import_keys +@@ -517,8 +555,29 @@ + if keyid == gpg_key['keyid'][8:]: + local_uids = gpg_key['uids'] + local_keyid = gpg_key['keyid'] ++ if use_gpg_agent: ++ local_keygrip_to_use = gpg_key['fingerprint'] ++ local_key_fingerprint = gpg_key['fingerprint'] + break + ++ if use_gpg_agent: ++ cmd = 'gpg --with-keygrip --list-secret-keys' ++ local_keys2_keygrip = __salt__['cmd.run'](cmd, runas=runas, env=env) ++ local_keys2 = iter(local_keys2_keygrip.splitlines()) ++ try: ++ for line in local_keys2: ++ if line.startswith('sec'): ++ line_fingerprint = next(local_keys2).lstrip().rstrip() ++ if local_key_fingerprint == line_fingerprint: ++ lkeygrip = next(local_keys2).split('=') ++ local_keygrip_to_use = lkeygrip[1].lstrip().rstrip() ++ break ++ except StopIteration: ++ raise SaltInvocationError( ++ 'unable to find keygrip associated with fingerprint \'{0}\' for keyid \'{1}\'' ++ .format(local_key_fingerprint, local_keyid) ++ ) ++ + if local_keyid is None: + raise SaltInvocationError( + 'The key ID \'{0}\' was not found in GnuPG keyring at \'{1}\'' +@@ -527,6 +586,15 @@ + + if use_passphrase: + phrase = __salt__['pillar.get']('gpg_passphrase') ++ if use_gpg_agent: ++ _check_repo_gpg_phrase_utils() ++ cmd = '/usr/libexec/gpg-preset-passphrase --verbose --preset --passphrase "{0}" {1}'.format(phrase, local_keygrip_to_use) ++ retrc = __salt__['cmd.retcode'](cmd, runas=runas, env=env) ++ if retrc != 0: ++ raise SaltInvocationError( ++ 'Failed to preset passphrase, error {1}, ' ++ 'check logs for further details'.format(retrc) ++ ) + + if local_uids: + define_gpg_name = '--define=\'%_signature gpg\' --define=\'%_gpg_name {0}\''.format( +@@ -553,43 +621,54 @@ + number_retries = timeout / interval + times_looped = 0 + error_msg = 'Failed to sign file {0}'.format(abs_file) +- cmd = 'rpm {0} --addsign {1}'.format(define_gpg_name, abs_file) +- preexec_fn = functools.partial(salt.utils.user.chugid_and_umask, runas, None) +- try: +- stdout, stderr = None, None +- proc = salt.utils.vt.Terminal( +- cmd, +- shell=True, +- preexec_fn=preexec_fn, +- stream_stdout=True, +- stream_stderr=True +- ) +- while proc.has_unread_data: +- stdout, stderr = proc.recv() +- if stdout and SIGN_PROMPT_RE.search(stdout): +- # have the prompt for inputting the passphrase +- proc.sendline(phrase) +- else: +- times_looped += 1 ++ if use_gpg_agent: ++ cmd = 'rpmsign --verbose --key-id={0} --addsign {1}'.format(local_keyid, abs_file) ++ retrc |= __salt__['cmd.retcode'](cmd, runas=runas, cwd=repodir, use_vt=True, env=env) ++ if retrc != 0: ++ raise SaltInvocationError( ++ 'Signing encountered errors for command \'{0}\', ' ++ 'return error {1}, check logs for further details'.format( ++ cmd, ++ retrc) ++ ) ++ else: ++ cmd = 'rpm {0} --addsign {1}'.format(define_gpg_name, abs_file) ++ preexec_fn = functools.partial(salt.utils.user.chugid_and_umask, runas, None) ++ try: ++ stdout, stderr = None, None ++ proc = salt.utils.vt.Terminal( ++ cmd, ++ shell=True, ++ preexec_fn=preexec_fn, ++ stream_stdout=True, ++ stream_stderr=True ++ ) ++ while proc.has_unread_data: ++ stdout, stderr = proc.recv() ++ if stdout and SIGN_PROMPT_RE.search(stdout): ++ # have the prompt for inputting the passphrase ++ proc.sendline(phrase) ++ else: ++ times_looped += 1 ++ ++ if times_looped > number_retries: ++ raise SaltInvocationError( ++ 'Attemping to sign file {0} failed, timed out after {1} seconds' ++ .format(abs_file, int(times_looped * interval)) ++ ) ++ time.sleep(interval) + +- if times_looped > number_retries: ++ proc_exitstatus = proc.exitstatus ++ if proc_exitstatus != 0: + raise SaltInvocationError( +- 'Attemping to sign file {0} failed, timed out after {1} seconds' +- .format(abs_file, int(times_looped * interval)) ++ 'Signing file {0} failed with proc.status {1}' ++ .format(abs_file, proc_exitstatus) + ) +- time.sleep(interval) +- +- proc_exitstatus = proc.exitstatus +- if proc_exitstatus != 0: +- raise SaltInvocationError( +- 'Signing file {0} failed with proc.status {1}' +- .format(abs_file, proc_exitstatus) +- ) +- except salt.utils.vt.TerminalException as err: +- trace = traceback.format_exc() +- log.error(error_msg, err, trace) +- finally: +- proc.close(terminate=True, kill=True) ++ except salt.utils.vt.TerminalException as err: ++ trace = traceback.format_exc() ++ log.error(error_msg, err, trace) ++ finally: ++ proc.close(terminate=True, kill=True) + + cmd = 'createrepo --update {0}'.format(repodir) + return __salt__['cmd.run_all'](cmd, runas=runas) diff --git a/salt.spec b/salt.spec index af2c3e3..b497dd0 100644 --- a/salt.spec +++ b/salt.spec @@ -1,21 +1,29 @@ +## For Python 3 only RHEL 7 & 8 + +%bcond_with python2 +%bcond_without python3 %bcond_with tests %bcond_with docs +%if 0%{?rhel} > 7 +%global python3_pkgversion 3 +%else %{!?python3_pkgversion:%global python3_pkgversion 3} +%endif %global include_tests 0 # Release Candidate -%define __rc_ver rc0 +%define __rc_ver %{nil} %define fish_dir %{_datadir}/fish/vendor_functions.d Name: salt -Version: 2019.2.1%{?__rc_ver} -Release: 5%{?dist} +Version: 3000%{?__rc_ver} +Release: 2%{?dist} Summary: A parallel remote execution system - +Group: System Environment/Daemons License: ASL 2.0 URL: http://saltstack.org/ Source0: https://pypi.io/packages/source/s/%{name}/%{name}-%{version}.tar.gz @@ -41,9 +49,13 @@ Source19: salt-minion.fish Source20: salt-run.fish Source21: salt-syndic.fish -## Patch0: salt-%%{version}-tests.patch - +## %%if 0%%{?rhel} > 7 +## Patch0: salt-py3-2019.2.2-tornado4.patch +## %%endif +Patch1: salt-py3-2019.2.1-rpmsign.patch +Patch2: salt-m2_requirements.patch +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildArch: noarch %ifarch %{ix86} x86_64 @@ -53,7 +65,12 @@ Requires: dmidecode Requires: pciutils Requires: which +%if 0%{?fedora} >= 26 Requires: dnf-utils +%else +Requires: yum-utils +%endif + %if 0%{?systemd_preun:1} Requires(post): systemd-units @@ -62,32 +79,51 @@ Requires(postun): systemd-units %endif BuildRequires: systemd-units -Requires: python%{python3_pkgversion}-systemd + +%if %{with python3} BuildRequires: python%{python3_pkgversion}-devel BuildRequires: python%{python3_pkgversion}-requests BuildRequires: python%{python3_pkgversion}-mock BuildRequires: python%{python3_pkgversion}-libcloud BuildRequires: python%{python3_pkgversion}-six +%if 0%{?rhel} == 7 +BuildRequires: python%{python3_pkgversion}-PyYAML +%else BuildRequires: python%{python3_pkgversion}-pyyaml -BuildRequires: python%{python3_pkgversion}-distro +## BuildRequires: python%%{python3_pkgversion}-distro +%endif BuildRequires: git Requires: python%{python3_pkgversion}-jinja2 Requires: python%{python3_pkgversion}-msgpack >= 0.4 +## for dump requirements file ## Requires: python%%{python3_pkgversion}-crypto >= 2.6.1 -Requires: python%{python3_pkgversion}-m2crypto >= 0.31.0 +## Requires: python%%{python3_pkgversion}-m2crypto >= 0.31.0 +Requires: python%{python3_pkgversion}-pycryptodomex >= 3.7 Requires: python%{python3_pkgversion}-requests Requires: python%{python3_pkgversion}-zmq Requires: python%{python3_pkgversion}-markupsafe -Requires: python%{python3_pkgversion}-tornado >= 4.2.1 + +## Tornado removed in Neon +## %%if 0%%{?rhel} == 7 +## Requires: python%%{python3_pkgversion}-tornado >= 4.2.1, python%%{python3_pkgversion}-tornado < 5.0 +## %%else +## Requires: python%%{python3_pkgversion}-tornado4 >= 4.2.1, python%%{python3_pkgversion}-tornado4 < 5.0 +## %%endif +Requires: python%{python3_pkgversion}-pycurl + Requires: python%{python3_pkgversion}-six Requires: python%{python3_pkgversion}-psutil +%if 0%{?rhel} == 7 +Requires: python%{python3_pkgversion}-PyYAML +%else Requires: python%{python3_pkgversion}-pyyaml Requires: python%{python3_pkgversion}-distro - +%endif +%endif %description @@ -98,11 +134,17 @@ malleable. Salt accomplishes this via its ability to handle larger loads of information, and not just dozens, but hundreds or even thousands of individual servers, handle them quickly and through a simple and manageable interface. + +%if %{with python3} %package master Summary: Management component for salt, a parallel remote execution system Group: System Environment/Daemons Requires: %{name} = %{version}-%{release} -Requires: python%{python3_pkgversion}-systemd +%if 0%{?rhel} > 7 +Requires: python%{python3_pkgversion}-systemd +%else +Requires: systemd-python +%endif %description master The Salt master is the central server to which all minions connect. @@ -136,7 +178,11 @@ Supports Python 3. Summary: REST API for Salt, a parallel remote execution system Group: Applications/System Requires: %{name}-master = %{version}-%{release} -Requires: python%{python3_pkgversion}-cherrypy >= 3.2.2 +%if ( "%{python3_pkgversion}" < "35" ) +Requires: python%{python3_pkgversion}-cherrypy >= 3.2.2, python%{python3_pkgversion}-cherrypy < 18.0.0 +%else +Requires: python%{python3_pkgversion}-cherrypy >= 3.2.2 +%endif %description api salt-api provides a REST interface to the Salt master. @@ -164,30 +210,42 @@ Requires: %{name} = %{version}-%{release} The salt-ssh tool can run remote execution functions and states without the use of an agent (salt-minion) service. Supports Python 3. +%endif %prep +## %%autosetup %setup -q -c -## %%setup -q -T -D -a 1 - cd %{name}-%{version} +## %%if 0%%{?rhel} > 7 ## %%patch0 -p1 +## %%endif +%patch1 -p1 +%patch2 -p1 - +%if %{with python3} rm -rf %{py3dir} cp -a . %{py3dir} +%endif # with_python3 %build +%if %{with python3} pushd %{py3dir} -%py3_build +## %%py3_build +## py3_shbang_opts is '-s' and causing issues with pip install +## CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" LDFLAGS="${LDFLAGS:-${RPM_LD_FLAGS}}" %%{__python3} %%{py_setup} %%{?py_setup_args} build --executable="%%{__python3} %%{py3_shbang_opts}" %%{?*} +CFLAGS="${CFLAGS:-${RPM_OPT_FLAGS}}" LDFLAGS="${LDFLAGS:-${RPM_LD_FLAGS}}" %{__python3} %{py_setup} %{?py_setup_args} build --executable="%{__python3}" %{?*} +sleep 1 popd +%endif %install rm -rf %{buildroot} -cd $RPM_BUILD_DIR/%{name}-%{version}/%{name}-%{version} +cd $RPM_BUILD_DIR/%{name}-%{version} +%if %{with python3} ## rm -rf %%{buildroot} pushd %{py3dir} %py3_install @@ -247,6 +305,16 @@ install -p -m 0644 %{SOURCE20} %{buildroot}%{fish_dir}/salt-run.fish install -p -m 0644 %{SOURCE21} %{buildroot}%{fish_dir}/salt-syndic.fish popd +%endif + + +%if (%{with python2} && 0%{with tests}) +%check +## cd $RPM_BUILD_DIR/%%{name}-%%{version}/%%{name}-%%{version} +cd $RPM_BUILD_DIR/%{name}-%{version} +mkdir %{_tmppath}/salt-test-cache +PYTHONPATH=%{pythonpath} %{__python2} setup.py test --runtests-opts=-u +%endif %clean @@ -254,6 +322,7 @@ rm -rf %{buildroot} %files +%if %{with python3} %defattr(-,root,root,-) %{python3_sitelib}/%{name}/* %{python3_sitelib}/%{name}-*-py?.?.egg-info @@ -333,20 +402,11 @@ rm -rf %{buildroot} %doc %{_mandir}/man1/salt-ssh.1* %{_bindir}/salt-ssh %config(noreplace) %{_sysconfdir}/salt/roster +%endif +# assumes systemd for RHEL 7 & 8 %preun master -%if 0%{?systemd_preun:1} - %systemd_preun salt-master.service -%else - if [ $1 -eq 0 ] ; then - # Package removal, not upgrade - /bin/systemctl --no-reload disable salt-master.service > /dev/null 2>&1 || : - /bin/systemctl stop salt-master.service > /dev/null 2>&1 || : - fi -%endif - -%preun syndic %if 0%{?systemd_preun:1} %systemd_preun salt-syndic.service %else @@ -457,30 +517,73 @@ rm -rf %{buildroot} %changelog -* Thu Jan 30 2020 Fedora Release Engineering - 2019.2.1rc0-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild +* Mon Feb 24 2020 SaltStack Packaging Team - 3000-2 +- Changed dependency for crypto to pycryptodomex + +* Mon Feb 03 2020 SaltStack Packaging Team - 3000-1 +- Update to feature release 3000-1 for Python 3 +- Removed Torando since salt.ext.tornado, add dependencies for Tornado + +* Wed Jan 22 2020 SaltStack Packaging Team - 3000.0.0rc2-1 +- Update to Neon Release Candidate 2 for Python 3 +- Updated spec file to not use py3_build due to '-s' preventing pip installs +- Updated patch file to support Tornado4 + +* Wed Jan 08 2020 SaltStack Packaging Team - 2019.2.3-1 +- Update to feature release 2019.2.3-1 for Python 3 + +* Tue Oct 15 2019 SaltStack Packaging Team - 2019.2.2-1 +- Update to feature release 2019.2.2-1 for Python 3 -* Thu Oct 03 2019 Miro HronĨok - 2019.2.1rc0-4 -- Rebuilt for Python 3.8.0rc1 (#1748018) +* Thu Sep 12 2019 SaltStack Packaging Team - 2019.2.1-1 +- Update to feature release 2019.2.1-1 for Python 3 -* Fri Aug 30 2019 Fedora Release Engineering - 2019.2.1rc0-3 -- Fixed tornado requirement +* Tue Sep 10 2019 SaltStack Packaging Team - 2019.2.0-10 +- Support for point release, added distro as a requirement -* Fri Aug 30 2019 Fedora Release Engineering - 2019.2.1rc0-2 -- Added python3-distro as a requirement +* Tue Jul 02 2019 SaltStack Packaging Team - 2019.2.0-9 +- Support for point release, only rpmsign and tornado4 patches -* Thu Aug 29 2019 Fedora Release Engineering - 2019.2.1rc0-1 -- Release Candidate 0 for feature release 2019.2.1 for Python 3 with Tornado v5.x support +* Thu Jun 06 2019 SaltStack Packaging Team - 2019.2.0-8 +- Support for Redhat 7 need for PyYAML and tornado 4 patch since Tornado < v5.x -* Fri Jul 26 2019 Fedora Release Engineering - 2019.2.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild +* Thu May 23 2019 SaltStack Packaging Team - 2019.2.0-7 +- Patching in support for gpg-agent and passphrase preset + +* Wed May 22 2019 SaltStack Packaging Team - 2019.2.0-6 +- Patching in fix for rpmsign + +* Thu May 16 2019 SaltStack Packaging Team - 2019.2.0-5 +- Patching in fix for gpg str/bytes to to_unicode/to_bytes + +* Tue May 14 2019 SaltStack Packaging Team - 2019.2.0-4 +- Patching in support for Tornado 4 + +* Mon May 13 2019 SaltStack Packaging Team - 2019.2.0-3 +- Added support for Redhat 8, and removed support for Python 2 packages + +* Mon Apr 08 2019 SaltStack Packaging Team - 2019.2.0-2 +- Update to support Python 3.6 + +* Mon Apr 08 2019 SaltStack Packaging Team - 2018.3.4-2 +- Update to allow for Python 3.6 * Mon Mar 04 2019 Fedora Release Engineering - 2019.2.0-1 - Update to feature release 2019.2.0-1 for Python 2 +* Sat Feb 16 2019 SaltStack Packaging Team - 2019.2.0-1 +- Update to feature release 2019.2.0-1 for Python 3 + +* Sat Feb 16 2019 SaltStack Packaging Team - 2018.3.4-1 +- Update to feature release 2018.3.4-1 for Python 3 + * Sat Feb 02 2019 Fedora Release Engineering - 2018.3.3-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild +* Wed Jan 09 2019 SaltStack Packaging Team - 2019.2.0-0 +- Update to feature release branch 2019.2.0-0 for Python 2 +- Revised acceptable versions of cherrypy, futures + * Thu Nov 29 2018 SaltStack Packaging Team - 2018.3.3-2 - Revised BuildRequires and Requires to use python2 versions of packages - Cleaned up spec file to apply to Fedora 28 and above @@ -489,6 +592,10 @@ rm -rf %{buildroot} - Update to feature release 2018.3.3-1 for Python 2 - Revised versions of cherrypy acceptable +* Tue Oct 09 2018 SaltStack Packaging Team - 2018.3.3-1 +- Update to feature release 2018.3.3-1 for Python 3 +- Revised versions of cherrypy acceptable + * Tue Jul 24 2018 SaltStack Packaging Team - 2018.3.2-5 - Fix version of python used, multiple addition of 2.7 @@ -504,10 +611,17 @@ rm -rf %{buildroot} * Thu Jun 21 2018 SaltStack Packaging Team - 2018.3.2-1 - Update to feature release 2018.3.2-1 for Python 2 +* Mon Jun 11 2018 SaltStack Packaging Team - 2018.3.1-1 +- Update to feature release 2018.3.1-1 for Python 3 +- Revised minimum msgpack version >= 0.4 + * Fri Jun 08 2018 SaltStack Packaging Team - 2018.3.1-1 - Update to feature release 2018.3.1-1 for Python 2 - Revised minimum msgpack version >= 0.4 +* Mon Apr 02 2018 SaltStack Packaging Team - 2018.3.0-1 +- Development build for Python 3 support + * Fri Mar 30 2018 SaltStack Packaging Team - 2018.3.0-1 - Update to feature release 2018.3.0-1 @@ -518,7 +632,7 @@ rm -rf %{buildroot} - Update to feature release 2017.7.4-1 - Limit to Tornado use to between versions 4.2.1 and less than 5.0 -* Tue Jan 30 2018 SaltStack Packaging Team - 2017.7.3-1 +* Tue Jan 30 2018 SaltStack Packaging Team - 2017.7.3-1 - Update to feature release 2017.7.3-1 * Mon Sep 18 2017 SaltStack Packaging Team - 2017.7.2-1 diff --git a/sources b/sources index 8f7674b..7310a3f 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (salt-2019.2.1rc0.tar.gz) = 541071683d4878b86ac61a912396732cb24d8886e98e66c980e4a06af4262df68a5822f6f6a766e309bd43de6e824a2952a57198cf97a9c9818b08fca97a6072 +SHA512 (salt-3000.tar.gz) = 978c5dcfb78df7d1671fd791f8ebb6b33af6bb2d504460de4ea11ea1715cf29fba0805e9784f482d9a4ece165dc28f5572ef649c97ac79766f1aa36366c93ae6