mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Merge v3006.4 into 3006.x
This commit is contained in:
commit
16dce0b4cc
71 changed files with 1118 additions and 450 deletions
14
CHANGELOG.md
14
CHANGELOG.md
|
@ -19,6 +19,20 @@ Versions are `MAJOR.PATCH`.
|
||||||
- Update to `gitpython>=3.1.35` due to https://github.com/advisories/GHSA-wfm5-v35h-vwf4 and https://github.com/advisories/GHSA-cwvm-v4w8-q58c (#65167)
|
- Update to `gitpython>=3.1.35` due to https://github.com/advisories/GHSA-wfm5-v35h-vwf4 and https://github.com/advisories/GHSA-cwvm-v4w8-q58c (#65167)
|
||||||
|
|
||||||
|
|
||||||
|
## 3006.4 (2023-10-16)
|
||||||
|
|
||||||
|
|
||||||
|
### Security
|
||||||
|
|
||||||
|
- Fix CVE-2023-34049 by ensuring we do not use a predictable name for the script and correctly check returncode of scp command.
|
||||||
|
This only impacts salt-ssh users using the pre-flight option. [#cve-2023-34049](https://github.com/saltstack/salt/issues/cve-2023-34049)
|
||||||
|
- Update to `gitpython>=3.1.35` due to https://github.com/advisories/GHSA-wfm5-v35h-vwf4 and https://github.com/advisories/GHSA-cwvm-v4w8-q58c [#65163](https://github.com/saltstack/salt/issues/65163)
|
||||||
|
- Bump to `cryptography==41.0.4` due to https://github.com/advisories/GHSA-v8gr-m533-ghj9 [#65268](https://github.com/saltstack/salt/issues/65268)
|
||||||
|
- Upgrade relenv to 0.13.12 to address CVE-2023-4807 [#65316](https://github.com/saltstack/salt/issues/65316)
|
||||||
|
- Bump to `urllib3==1.26.17` or `urllib3==2.0.6` due to https://github.com/advisories/GHSA-v845-jxx5-vc9f [#65334](https://github.com/saltstack/salt/issues/65334)
|
||||||
|
- Bump to `gitpython==3.1.37` due to https://github.com/advisories/GHSA-cwvm-v4w8-q58c [#65383](https://github.com/saltstack/salt/issues/65383)
|
||||||
|
|
||||||
|
|
||||||
## 3006.3 (2023-09-06)
|
## 3006.3 (2023-09-06)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||||
..
|
..
|
||||||
.TH "SALT-API" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt"
|
.TH "SALT-API" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
salt-api \- salt-api Command
|
salt-api \- salt-api Command
|
||||||
.sp
|
.sp
|
||||||
|
|
|
@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||||
..
|
..
|
||||||
.TH "SALT-CALL" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt"
|
.TH "SALT-CALL" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
salt-call \- salt-call Documentation
|
salt-call \- salt-call Documentation
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
|
|
|
@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||||
..
|
..
|
||||||
.TH "SALT-CLOUD" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt"
|
.TH "SALT-CLOUD" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
salt-cloud \- Salt Cloud Command
|
salt-cloud \- Salt Cloud Command
|
||||||
.sp
|
.sp
|
||||||
|
|
|
@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||||
..
|
..
|
||||||
.TH "SALT-CP" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt"
|
.TH "SALT-CP" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
salt-cp \- salt-cp Documentation
|
salt-cp \- salt-cp Documentation
|
||||||
.sp
|
.sp
|
||||||
|
|
|
@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||||
..
|
..
|
||||||
.TH "SALT-KEY" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt"
|
.TH "SALT-KEY" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
salt-key \- salt-key Documentation
|
salt-key \- salt-key Documentation
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
|
|
|
@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||||
..
|
..
|
||||||
.TH "SALT-MASTER" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt"
|
.TH "SALT-MASTER" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
salt-master \- salt-master Documentation
|
salt-master \- salt-master Documentation
|
||||||
.sp
|
.sp
|
||||||
|
|
|
@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||||
..
|
..
|
||||||
.TH "SALT-MINION" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt"
|
.TH "SALT-MINION" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
salt-minion \- salt-minion Documentation
|
salt-minion \- salt-minion Documentation
|
||||||
.sp
|
.sp
|
||||||
|
|
|
@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||||
..
|
..
|
||||||
.TH "SALT-PROXY" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt"
|
.TH "SALT-PROXY" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
salt-proxy \- salt-proxy Documentation
|
salt-proxy \- salt-proxy Documentation
|
||||||
.sp
|
.sp
|
||||||
|
|
|
@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||||
..
|
..
|
||||||
.TH "SALT-RUN" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt"
|
.TH "SALT-RUN" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
salt-run \- salt-run Documentation
|
salt-run \- salt-run Documentation
|
||||||
.sp
|
.sp
|
||||||
|
|
|
@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||||
..
|
..
|
||||||
.TH "SALT-SSH" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt"
|
.TH "SALT-SSH" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
salt-ssh \- salt-ssh Documentation
|
salt-ssh \- salt-ssh Documentation
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
|
|
|
@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||||
..
|
..
|
||||||
.TH "SALT-SYNDIC" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt"
|
.TH "SALT-SYNDIC" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
salt-syndic \- salt-syndic Documentation
|
salt-syndic \- salt-syndic Documentation
|
||||||
.sp
|
.sp
|
||||||
|
|
|
@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||||
..
|
..
|
||||||
.TH "SALT" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt"
|
.TH "SALT" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
salt \- salt
|
salt \- salt
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
|
|
|
@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||||
..
|
..
|
||||||
.TH "SALT" "7" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt"
|
.TH "SALT" "7" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
salt \- Salt Documentation
|
salt \- Salt Documentation
|
||||||
.SH SALT PROJECT
|
.SH SALT PROJECT
|
||||||
|
@ -194128,7 +194128,7 @@ Passes through all the parameters described in the
|
||||||
\fI\%utils.http.query function\fP:
|
\fI\%utils.http.query function\fP:
|
||||||
.INDENT 7.0
|
.INDENT 7.0
|
||||||
.TP
|
.TP
|
||||||
.B salt.utils.http.query(url, method=\(aqGET\(aq, params=None, data=None, data_file=None, header_dict=None, header_list=None, header_file=None, username=None, password=None, auth=None, decode=False, decode_type=\(aqauto\(aq, status=False, headers=False, text=False, cookies=None, cookie_jar=None, cookie_format=\(aqlwp\(aq, persist_session=False, session_cookie_jar=None, data_render=False, data_renderer=None, header_render=False, header_renderer=None, template_dict=None, test=False, test_url=None, node=\(aqminion\(aq, port=80, opts=None, backend=None, ca_bundle=None, verify_ssl=None, cert=None, text_out=None, headers_out=None, decode_out=None, stream=False, streaming_callback=None, header_callback=None, handle=False, agent=\(aqSalt/3006.3\(aq, hide_fields=None, raise_error=True, formdata=False, formdata_fieldname=None, formdata_filename=None, decode_body=True, **kwargs)
|
.B salt.utils.http.query(url, method=\(aqGET\(aq, params=None, data=None, data_file=None, header_dict=None, header_list=None, header_file=None, username=None, password=None, auth=None, decode=False, decode_type=\(aqauto\(aq, status=False, headers=False, text=False, cookies=None, cookie_jar=None, cookie_format=\(aqlwp\(aq, persist_session=False, session_cookie_jar=None, data_render=False, data_renderer=None, header_render=False, header_renderer=None, template_dict=None, test=False, test_url=None, node=\(aqminion\(aq, port=80, opts=None, backend=None, ca_bundle=None, verify_ssl=None, cert=None, text_out=None, headers_out=None, decode_out=None, stream=False, streaming_callback=None, header_callback=None, handle=False, agent=\(aqSalt/3006.4\(aq, hide_fields=None, raise_error=True, formdata=False, formdata_fieldname=None, formdata_filename=None, decode_body=True, **kwargs)
|
||||||
Query a resource, and decode the return data
|
Query a resource, and decode the return data
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 7.0
|
.INDENT 7.0
|
||||||
|
@ -457626,7 +457626,7 @@ installed2
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
.INDENT 0.0
|
.INDENT 0.0
|
||||||
.TP
|
.TP
|
||||||
.B salt.states.zcbuildout.installed(name, config=\(aqbuildout.cfg\(aq, quiet=False, parts=None, user=None, env=(), buildout_ver=None, test_release=False, distribute=None, new_st=None, offline=False, newest=False, python=\(aq/opt/actions\-runner/_work/salt/salt/.tools\-venvs/py3.10/docs/bin/python\(aq, debug=False, verbose=False, unless=None, onlyif=None, use_vt=False, loglevel=\(aqdebug\(aq, **kwargs)
|
.B salt.states.zcbuildout.installed(name, config=\(aqbuildout.cfg\(aq, quiet=False, parts=None, user=None, env=(), buildout_ver=None, test_release=False, distribute=None, new_st=None, offline=False, newest=False, python=\(aq/opt/actions\-runner/_work/salt\-priv/salt\-priv/.tools\-venvs/py3.10/docs/bin/python\(aq, debug=False, verbose=False, unless=None, onlyif=None, use_vt=False, loglevel=\(aqdebug\(aq, **kwargs)
|
||||||
Install buildout in a specific directory
|
Install buildout in a specific directory
|
||||||
.sp
|
.sp
|
||||||
It is a thin wrapper to modules.buildout.buildout
|
It is a thin wrapper to modules.buildout.buildout
|
||||||
|
@ -477556,6 +477556,25 @@ Addresses multiple CVEs in Python\(aqs dependencies: \fI\%https://docs.python.or
|
||||||
.IP \(bu 2
|
.IP \(bu 2
|
||||||
Update to \fBgitpython>=3.1.32\fP due to \fI\%https://github.com/advisories/GHSA\-pr76\-5cm5\-w9cj\fP \fI\%#64988\fP
|
Update to \fBgitpython>=3.1.32\fP due to \fI\%https://github.com/advisories/GHSA\-pr76\-5cm5\-w9cj\fP \fI\%#64988\fP
|
||||||
.UNINDENT
|
.UNINDENT
|
||||||
|
(release\-3006.4)=
|
||||||
|
.SS Salt 3006.4 release notes
|
||||||
|
.SS Changelog
|
||||||
|
.SS Security
|
||||||
|
.INDENT 0.0
|
||||||
|
.IP \(bu 2
|
||||||
|
Fix CVE\-2023\-34049 by ensuring we do not use a predictable name for the script and correctly check returncode of scp command.
|
||||||
|
This only impacts salt\-ssh users using the pre\-flight option. \fI\%#cve\-2023\-34049\fP
|
||||||
|
.IP \(bu 2
|
||||||
|
Update to \fBgitpython>=3.1.35\fP due to \fI\%https://github.com/advisories/GHSA\-wfm5\-v35h\-vwf4\fP and \fI\%https://github.com/advisories/GHSA\-cwvm\-v4w8\-q58c\fP \fI\%#65163\fP
|
||||||
|
.IP \(bu 2
|
||||||
|
Bump to \fBcryptography==41.0.4\fP due to \fI\%https://github.com/advisories/GHSA\-v8gr\-m533\-ghj9\fP \fI\%#65268\fP
|
||||||
|
.IP \(bu 2
|
||||||
|
Upgrade relenv to 0.13.12 to address CVE\-2023\-4807 \fI\%#65316\fP
|
||||||
|
.IP \(bu 2
|
||||||
|
Bump to \fBurllib3==1.26.17\fP or \fBurllib3==2.0.6\fP due to \fI\%https://github.com/advisories/GHSA\-v845\-jxx5\-vc9f\fP \fI\%#65334\fP
|
||||||
|
.IP \(bu 2
|
||||||
|
Bump to \fBgitpython==3.1.37\fP due to \fI\%https://github.com/advisories/GHSA\-cwvm\-v4w8\-q58c\fP \fI\%#65383\fP
|
||||||
|
.UNINDENT
|
||||||
.sp
|
.sp
|
||||||
See \fI\%Install a release candidate\fP
|
See \fI\%Install a release candidate\fP
|
||||||
for more information about installing an RC when one is available.
|
for more information about installing an RC when one is available.
|
||||||
|
|
|
@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
||||||
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
||||||
..
|
..
|
||||||
.TH "SPM" "1" "Generated on September 06, 2023 at 04:52:57 PM UTC." "3006.3" "Salt"
|
.TH "SPM" "1" "Generated on October 16, 2023 at 05:24:47 PM UTC." "3006.4" "Salt"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
spm \- Salt Package Manager Command
|
spm \- Salt Package Manager Command
|
||||||
.sp
|
.sp
|
||||||
|
|
29
doc/topics/releases/3006.4.md
Normal file
29
doc/topics/releases/3006.4.md
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
(release-3006.4)=
|
||||||
|
# Salt 3006.4 release notes
|
||||||
|
|
||||||
|
<!---
|
||||||
|
Do not edit this file. This is auto generated.
|
||||||
|
Edit the templates in doc/topics/releases/templates/
|
||||||
|
for a given release.
|
||||||
|
-->
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Add release specific details below
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Do not edit the changelog below.
|
||||||
|
This is auto generated.
|
||||||
|
-->
|
||||||
|
## Changelog
|
||||||
|
|
||||||
|
### Security
|
||||||
|
|
||||||
|
- Fix CVE-2023-34049 by ensuring we do not use a predictable name for the script and correctly check returncode of scp command.
|
||||||
|
This only impacts salt-ssh users using the pre-flight option. [#cve-2023-34049](https://github.com/saltstack/salt/issues/cve-2023-34049)
|
||||||
|
- Update to `gitpython>=3.1.35` due to https://github.com/advisories/GHSA-wfm5-v35h-vwf4 and https://github.com/advisories/GHSA-cwvm-v4w8-q58c [#65163](https://github.com/saltstack/salt/issues/65163)
|
||||||
|
- Bump to `cryptography==41.0.4` due to https://github.com/advisories/GHSA-v8gr-m533-ghj9 [#65268](https://github.com/saltstack/salt/issues/65268)
|
||||||
|
- Upgrade relenv to 0.13.12 to address CVE-2023-4807 [#65316](https://github.com/saltstack/salt/issues/65316)
|
||||||
|
- Bump to `urllib3==1.26.17` or `urllib3==2.0.6` due to https://github.com/advisories/GHSA-v845-jxx5-vc9f [#65334](https://github.com/saltstack/salt/issues/65334)
|
||||||
|
- Bump to `gitpython==3.1.37` due to https://github.com/advisories/GHSA-cwvm-v4w8-q58c [#65383](https://github.com/saltstack/salt/issues/65383)
|
14
doc/topics/releases/templates/3006.4.md.template
Normal file
14
doc/topics/releases/templates/3006.4.md.template
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
(release-3006.4)=
|
||||||
|
# Salt 3006.4 release notes{{ unreleased }}
|
||||||
|
{{ warning }}
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Add release specific details below
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Do not edit the changelog below.
|
||||||
|
This is auto generated.
|
||||||
|
-->
|
||||||
|
## Changelog
|
||||||
|
{{ changelog }}
|
|
@ -1,3 +1,19 @@
|
||||||
|
salt (3006.4) stable; urgency=medium
|
||||||
|
|
||||||
|
|
||||||
|
# Security
|
||||||
|
|
||||||
|
* Fix CVE-2023-34049 by ensuring we do not use a predictable name for the script and correctly check returncode of scp command.
|
||||||
|
This only impacts salt*ssh users using the pre-flight option. [#cve-2023-34049](https://github.com/saltstack/salt/issues/cve-2023-34049)
|
||||||
|
* Update to `gitpython>=3.1.35` due to https://github.com/advisories/GHSA-wfm5-v35h-vwf4 and https://github.com/advisories/GHSA-cwvm-v4w8-q58c [#65163](https://github.com/saltstack/salt/issues/65163)
|
||||||
|
* Bump to `cryptography==41.0.4` due to https://github.com/advisories/GHSA-v8gr-m533-ghj9 [#65268](https://github.com/saltstack/salt/issues/65268)
|
||||||
|
* Upgrade relenv to 0.13.12 to address CVE-2023-4807 [#65316](https://github.com/saltstack/salt/issues/65316)
|
||||||
|
* Bump to `urllib3==1.26.17` or `urllib3==2.0.6` due to https://github.com/advisories/GHSA-v845-jxx5-vc9f [#65334](https://github.com/saltstack/salt/issues/65334)
|
||||||
|
* Bump to `gitpython==3.1.37` due to https://github.com/advisories/GHSA-cwvm-v4w8-q58c [#65383](https://github.com/saltstack/salt/issues/65383)
|
||||||
|
|
||||||
|
|
||||||
|
-- Salt Project Packaging <saltproject-packaging@vmware.com> Mon, 16 Oct 2023 17:22:41 +0000
|
||||||
|
|
||||||
salt (3006.3) stable; urgency=medium
|
salt (3006.3) stable; urgency=medium
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
%define fish_dir %{_datadir}/fish/vendor_functions.d
|
%define fish_dir %{_datadir}/fish/vendor_functions.d
|
||||||
|
|
||||||
Name: salt
|
Name: salt
|
||||||
Version: 3006.3
|
Version: 3006.4
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: A parallel remote execution system
|
Summary: A parallel remote execution system
|
||||||
Group: System Environment/Daemons
|
Group: System Environment/Daemons
|
||||||
|
@ -563,6 +563,19 @@ fi
|
||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Oct 16 2023 Salt Project Packaging <saltproject-packaging@vmware.com> - 3006.4
|
||||||
|
|
||||||
|
# Security
|
||||||
|
|
||||||
|
- Fix CVE-2023-34049 by ensuring we do not use a predictable name for the script and correctly check returncode of scp command.
|
||||||
|
This only impacts salt-ssh users using the pre-flight option. [#cve-2023-34049](https://github.com/saltstack/salt/issues/cve-2023-34049)
|
||||||
|
- Update to `gitpython>=3.1.35` due to https://github.com/advisories/GHSA-wfm5-v35h-vwf4 and https://github.com/advisories/GHSA-cwvm-v4w8-q58c [#65163](https://github.com/saltstack/salt/issues/65163)
|
||||||
|
- Bump to `cryptography==41.0.4` due to https://github.com/advisories/GHSA-v8gr-m533-ghj9 [#65268](https://github.com/saltstack/salt/issues/65268)
|
||||||
|
- Upgrade relenv to 0.13.12 to address CVE-2023-4807 [#65316](https://github.com/saltstack/salt/issues/65316)
|
||||||
|
- Bump to `urllib3==1.26.17` or `urllib3==2.0.6` due to https://github.com/advisories/GHSA-v845-jxx5-vc9f [#65334](https://github.com/saltstack/salt/issues/65334)
|
||||||
|
- Bump to `gitpython==3.1.37` due to https://github.com/advisories/GHSA-cwvm-v4w8-q58c [#65383](https://github.com/saltstack/salt/issues/65383)
|
||||||
|
|
||||||
|
|
||||||
* Wed Sep 06 2023 Salt Project Packaging <saltproject-packaging@vmware.com> - 3006.3
|
* Wed Sep 06 2023 Salt Project Packaging <saltproject-packaging@vmware.com> - 3006.3
|
||||||
|
|
||||||
# Removed
|
# Removed
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
apache-libcloud>=2.4.0
|
apache-libcloud>=2.4.0
|
||||||
cherrypy>=17.4.1
|
cherrypy>=17.4.1
|
||||||
cryptography>=41.0.3
|
cryptography>=41.0.3
|
||||||
gitpython>=3.1.30
|
gitpython>=3.1.37
|
||||||
idna>=2.8
|
idna>=2.8
|
||||||
linode-python>=1.1.1
|
linode-python>=1.1.1
|
||||||
pyasn1>=0.4.8
|
pyasn1>=0.4.8
|
||||||
|
|
|
@ -14,8 +14,9 @@ cherrypy>=17.4.1
|
||||||
clustershell
|
clustershell
|
||||||
croniter>=0.3.0,!=0.3.22"; sys_platform != 'win32'
|
croniter>=0.3.0,!=0.3.22"; sys_platform != 'win32'
|
||||||
dnspython
|
dnspython
|
||||||
|
docker
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
gitpython>=3.1.30
|
gitpython>=3.1.37
|
||||||
jmespath
|
jmespath
|
||||||
jsonschema
|
jsonschema
|
||||||
junos-eznc; sys_platform != 'win32' and python_version <= '3.10'
|
junos-eznc; sys_platform != 'win32' and python_version <= '3.10'
|
||||||
|
|
|
@ -630,6 +630,7 @@ docker==6.1.3
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# -r requirements/pytest.txt
|
# -r requirements/pytest.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
|
@ -659,19 +660,19 @@ geomet==0.1.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# cassandra-driver
|
# cassandra-driver
|
||||||
gitdb==4.0.5
|
gitdb==4.0.7
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# gitpython
|
# gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# kubernetes
|
# kubernetes
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.10/linux.txt
|
# -c requirements/static/ci/../pkg/py3.10/linux.txt
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
|
@ -1207,7 +1208,6 @@ six==1.16.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# isodate
|
# isodate
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -1230,7 +1230,7 @@ smbprotocol==1.10.1
|
||||||
# via
|
# via
|
||||||
# -r requirements/static/ci/cloud.in
|
# -r requirements/static/ci/cloud.in
|
||||||
# pypsexec
|
# pypsexec
|
||||||
smmap==3.0.4
|
smmap==4.0.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# gitdb
|
# gitdb
|
||||||
|
@ -1260,7 +1260,7 @@ tomli==2.0.1
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# pytest
|
# pytest
|
||||||
transitions==0.8.1
|
transitions==0.8.9
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -1269,7 +1269,7 @@ typing-extensions==4.2.0
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# pytest-shell-utilities
|
# pytest-shell-utilities
|
||||||
# pytest-system-statistics
|
# pytest-system-statistics
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.10/linux.txt
|
# -c requirements/static/ci/../pkg/py3.10/linux.txt
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
|
|
|
@ -420,7 +420,9 @@ dnspython==1.16.0
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
# python-etcd
|
# python-etcd
|
||||||
docker==6.1.3
|
docker==6.1.3
|
||||||
# via -r requirements/pytest.txt
|
# via
|
||||||
|
# -r requirements/pytest.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
exceptiongroup==1.0.4
|
exceptiongroup==1.0.4
|
||||||
|
@ -437,20 +439,20 @@ genshi==0.7.5
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
geomet==0.1.2
|
geomet==0.1.2
|
||||||
# via cassandra-driver
|
# via cassandra-driver
|
||||||
gitdb==4.0.5
|
gitdb==4.0.7
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.10/darwin.txt
|
# -c requirements/static/ci/../pkg/py3.10/darwin.txt
|
||||||
# gitpython
|
# gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.10/darwin.txt
|
# -c requirements/static/ci/../pkg/py3.10/darwin.txt
|
||||||
# -r requirements/darwin.txt
|
# -r requirements/darwin.txt
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via kubernetes
|
# via kubernetes
|
||||||
hglib==2.6.1
|
hglib==2.6.1
|
||||||
# via -r requirements/static/ci/darwin.in
|
# via -r requirements/static/ci/darwin.in
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.10/darwin.txt
|
# -c requirements/static/ci/../pkg/py3.10/darwin.txt
|
||||||
# -r requirements/darwin.txt
|
# -r requirements/darwin.txt
|
||||||
|
@ -851,7 +853,6 @@ six==1.16.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# isodate
|
# isodate
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -866,7 +867,7 @@ six==1.16.0
|
||||||
# vcert
|
# vcert
|
||||||
# virtualenv
|
# virtualenv
|
||||||
# websocket-client
|
# websocket-client
|
||||||
smmap==3.0.2
|
smmap==4.0.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.10/darwin.txt
|
# -c requirements/static/ci/../pkg/py3.10/darwin.txt
|
||||||
# gitdb
|
# gitdb
|
||||||
|
@ -886,13 +887,13 @@ toml==0.10.2
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
tomli==2.0.1
|
tomli==2.0.1
|
||||||
# via pytest
|
# via pytest
|
||||||
transitions==0.8.1
|
transitions==0.8.9
|
||||||
# via junos-eznc
|
# via junos-eznc
|
||||||
typing-extensions==4.2.0
|
typing-extensions==4.2.0
|
||||||
# via
|
# via
|
||||||
# pytest-shell-utilities
|
# pytest-shell-utilities
|
||||||
# pytest-system-statistics
|
# pytest-system-statistics
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.10/darwin.txt
|
# -c requirements/static/ci/../pkg/py3.10/darwin.txt
|
||||||
# botocore
|
# botocore
|
||||||
|
|
|
@ -34,7 +34,7 @@ distro==1.5.0
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
docutils==0.19
|
docutils==0.19
|
||||||
# via sphinx
|
# via sphinx
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# requests
|
# requests
|
||||||
|
@ -183,7 +183,7 @@ typing-extensions==4.2.0
|
||||||
# myst-docutils
|
# myst-docutils
|
||||||
uc-micro-py==1.0.1
|
uc-micro-py==1.0.1
|
||||||
# via linkify-it-py
|
# via linkify-it-py
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# requests
|
# requests
|
||||||
|
|
|
@ -418,7 +418,9 @@ dnspython==1.16.0
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
# python-etcd
|
# python-etcd
|
||||||
docker==6.1.3
|
docker==6.1.3
|
||||||
# via -r requirements/pytest.txt
|
# via
|
||||||
|
# -r requirements/pytest.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
exceptiongroup==1.0.4
|
exceptiongroup==1.0.4
|
||||||
|
@ -435,15 +437,15 @@ genshi==0.7.5
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
geomet==0.2.1.post1
|
geomet==0.2.1.post1
|
||||||
# via cassandra-driver
|
# via cassandra-driver
|
||||||
gitdb==4.0.5
|
gitdb==4.0.7
|
||||||
# via gitpython
|
# via gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via kubernetes
|
# via kubernetes
|
||||||
hglib==2.6.1
|
hglib==2.6.1
|
||||||
# via -r requirements/static/ci/freebsd.in
|
# via -r requirements/static/ci/freebsd.in
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.10/freebsd.txt
|
# -c requirements/static/ci/../pkg/py3.10/freebsd.txt
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
|
@ -843,7 +845,6 @@ six==1.16.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# isodate
|
# isodate
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -860,7 +861,7 @@ six==1.16.0
|
||||||
# vcert
|
# vcert
|
||||||
# virtualenv
|
# virtualenv
|
||||||
# websocket-client
|
# websocket-client
|
||||||
smmap==3.0.4
|
smmap==4.0.0
|
||||||
# via gitdb
|
# via gitdb
|
||||||
sqlparse==0.4.4
|
sqlparse==0.4.4
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
|
@ -878,13 +879,13 @@ toml==0.10.2
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
tomli==2.0.1
|
tomli==2.0.1
|
||||||
# via pytest
|
# via pytest
|
||||||
transitions==0.8.1
|
transitions==0.8.9
|
||||||
# via junos-eznc
|
# via junos-eznc
|
||||||
typing-extensions==4.2.0
|
typing-extensions==4.2.0
|
||||||
# via
|
# via
|
||||||
# pytest-shell-utilities
|
# pytest-shell-utilities
|
||||||
# pytest-system-statistics
|
# pytest-system-statistics
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.10/freebsd.txt
|
# -c requirements/static/ci/../pkg/py3.10/freebsd.txt
|
||||||
# botocore
|
# botocore
|
||||||
|
|
|
@ -637,6 +637,7 @@ dnspython==1.16.0
|
||||||
docker==6.1.3
|
docker==6.1.3
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
# -r requirements/static/ci/lint.in
|
# -r requirements/static/ci/lint.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via
|
# via
|
||||||
|
@ -659,15 +660,15 @@ geomet==0.1.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# cassandra-driver
|
# cassandra-driver
|
||||||
gitdb==4.0.5
|
gitdb==4.0.7
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# gitpython
|
# gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# kubernetes
|
# kubernetes
|
||||||
|
@ -675,7 +676,7 @@ hglib==2.6.1
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# -r requirements/static/ci/linux.in
|
# -r requirements/static/ci/linux.in
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.10/linux.txt
|
# -c requirements/static/ci/../pkg/py3.10/linux.txt
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
|
@ -1080,7 +1081,6 @@ pytz==2022.1
|
||||||
# python-telegram-bot
|
# python-telegram-bot
|
||||||
# tempora
|
# tempora
|
||||||
# twilio
|
# twilio
|
||||||
# tzlocal
|
|
||||||
pyvmomi==6.7.1.2018.12
|
pyvmomi==6.7.1.2018.12
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
|
@ -1190,7 +1190,6 @@ six==1.16.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# isodate
|
# isodate
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -1215,7 +1214,7 @@ slack-sdk==3.19.5
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# slack-bolt
|
# slack-bolt
|
||||||
smmap==3.0.4
|
smmap==4.0.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# gitdb
|
# gitdb
|
||||||
|
@ -1246,7 +1245,7 @@ tornado==6.1
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# python-telegram-bot
|
# python-telegram-bot
|
||||||
transitions==0.8.1
|
transitions==0.8.9
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -1254,11 +1253,11 @@ twilio==7.9.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# -r requirements/static/ci/linux.in
|
# -r requirements/static/ci/linux.in
|
||||||
tzlocal==2.1
|
tzlocal==3.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
# apscheduler
|
# apscheduler
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.10/linux.txt
|
# -c requirements/static/ci/../pkg/py3.10/linux.txt
|
||||||
# -c requirements/static/ci/py3.10/linux.txt
|
# -c requirements/static/ci/py3.10/linux.txt
|
||||||
|
|
|
@ -432,7 +432,9 @@ dnspython==1.16.0
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
# python-etcd
|
# python-etcd
|
||||||
docker==6.1.3
|
docker==6.1.3
|
||||||
# via -r requirements/pytest.txt
|
# via
|
||||||
|
# -r requirements/pytest.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
exceptiongroup==1.0.4
|
exceptiongroup==1.0.4
|
||||||
|
@ -449,15 +451,15 @@ genshi==0.7.5
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
geomet==0.1.2
|
geomet==0.1.2
|
||||||
# via cassandra-driver
|
# via cassandra-driver
|
||||||
gitdb==4.0.5
|
gitdb==4.0.7
|
||||||
# via gitpython
|
# via gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via kubernetes
|
# via kubernetes
|
||||||
hglib==2.6.1
|
hglib==2.6.1
|
||||||
# via -r requirements/static/ci/linux.in
|
# via -r requirements/static/ci/linux.in
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.10/linux.txt
|
# -c requirements/static/ci/../pkg/py3.10/linux.txt
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
|
@ -803,7 +805,6 @@ pytz==2022.1
|
||||||
# python-telegram-bot
|
# python-telegram-bot
|
||||||
# tempora
|
# tempora
|
||||||
# twilio
|
# twilio
|
||||||
# tzlocal
|
|
||||||
pyvmomi==6.7.1.2018.12
|
pyvmomi==6.7.1.2018.12
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
pyyaml==6.0.1
|
pyyaml==6.0.1
|
||||||
|
@ -884,7 +885,6 @@ six==1.16.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# isodate
|
# isodate
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -905,7 +905,7 @@ slack-bolt==1.15.5
|
||||||
# via -r requirements/static/ci/linux.in
|
# via -r requirements/static/ci/linux.in
|
||||||
slack-sdk==3.19.5
|
slack-sdk==3.19.5
|
||||||
# via slack-bolt
|
# via slack-bolt
|
||||||
smmap==3.0.4
|
smmap==4.0.0
|
||||||
# via gitdb
|
# via gitdb
|
||||||
sqlparse==0.4.4
|
sqlparse==0.4.4
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
|
@ -925,7 +925,7 @@ tomli==2.0.1
|
||||||
# via pytest
|
# via pytest
|
||||||
tornado==6.1
|
tornado==6.1
|
||||||
# via python-telegram-bot
|
# via python-telegram-bot
|
||||||
transitions==0.8.1
|
transitions==0.8.9
|
||||||
# via junos-eznc
|
# via junos-eznc
|
||||||
twilio==7.9.2
|
twilio==7.9.2
|
||||||
# via -r requirements/static/ci/linux.in
|
# via -r requirements/static/ci/linux.in
|
||||||
|
@ -933,9 +933,9 @@ typing-extensions==4.2.0
|
||||||
# via
|
# via
|
||||||
# pytest-shell-utilities
|
# pytest-shell-utilities
|
||||||
# pytest-system-statistics
|
# pytest-system-statistics
|
||||||
tzlocal==2.1
|
tzlocal==3.0
|
||||||
# via apscheduler
|
# via apscheduler
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.10/linux.txt
|
# -c requirements/static/ci/../pkg/py3.10/linux.txt
|
||||||
# botocore
|
# botocore
|
||||||
|
|
|
@ -20,7 +20,7 @@ charset-normalizer==3.0.1
|
||||||
# via requests
|
# via requests
|
||||||
commonmark==0.9.1
|
commonmark==0.9.1
|
||||||
# via rich
|
# via rich
|
||||||
idna==3.4
|
idna==3.2
|
||||||
# via requests
|
# via requests
|
||||||
jinja2==3.1.2
|
jinja2==3.1.2
|
||||||
# via -r requirements/static/ci/tools.in
|
# via -r requirements/static/ci/tools.in
|
||||||
|
@ -52,7 +52,7 @@ six==1.16.0
|
||||||
# via python-dateutil
|
# via python-dateutil
|
||||||
typing-extensions==4.4.0
|
typing-extensions==4.4.0
|
||||||
# via python-tools-scripts
|
# via python-tools-scripts
|
||||||
urllib3==1.26.12
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# botocore
|
# botocore
|
||||||
# requests
|
# requests
|
||||||
|
|
|
@ -104,7 +104,9 @@ dnspython==1.16.0
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
# python-etcd
|
# python-etcd
|
||||||
docker==6.1.3
|
docker==6.1.3
|
||||||
# via -r requirements/pytest.txt
|
# via
|
||||||
|
# -r requirements/pytest.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
exceptiongroup==1.0.4
|
exceptiongroup==1.0.4
|
||||||
|
@ -125,14 +127,14 @@ gitdb==4.0.7
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.10/windows.txt
|
# -c requirements/static/ci/../pkg/py3.10/windows.txt
|
||||||
# gitpython
|
# gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.10/windows.txt
|
# -c requirements/static/ci/../pkg/py3.10/windows.txt
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
# -r requirements/windows.txt
|
# -r requirements/windows.txt
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via kubernetes
|
# via kubernetes
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.10/windows.txt
|
# -c requirements/static/ci/../pkg/py3.10/windows.txt
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
|
@ -418,7 +420,6 @@ six==1.15.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# kubernetes
|
# kubernetes
|
||||||
# python-dateutil
|
# python-dateutil
|
||||||
|
@ -450,7 +451,7 @@ typing-extensions==4.4.0
|
||||||
# via
|
# via
|
||||||
# pytest-shell-utilities
|
# pytest-shell-utilities
|
||||||
# pytest-system-statistics
|
# pytest-system-statistics
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.10/windows.txt
|
# -c requirements/static/ci/../pkg/py3.10/windows.txt
|
||||||
# -r requirements/windows.txt
|
# -r requirements/windows.txt
|
||||||
|
|
|
@ -20,7 +20,7 @@ charset-normalizer==3.0.1
|
||||||
# via requests
|
# via requests
|
||||||
commonmark==0.9.1
|
commonmark==0.9.1
|
||||||
# via rich
|
# via rich
|
||||||
idna==3.4
|
idna==3.2
|
||||||
# via requests
|
# via requests
|
||||||
jinja2==3.1.2
|
jinja2==3.1.2
|
||||||
# via -r requirements/static/ci/tools.in
|
# via -r requirements/static/ci/tools.in
|
||||||
|
@ -50,7 +50,7 @@ s3transfer==0.5.2
|
||||||
# via boto3
|
# via boto3
|
||||||
six==1.16.0
|
six==1.16.0
|
||||||
# via python-dateutil
|
# via python-dateutil
|
||||||
urllib3==1.26.12
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# botocore
|
# botocore
|
||||||
# requests
|
# requests
|
||||||
|
|
|
@ -644,6 +644,7 @@ docker==6.1.3
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
# -r requirements/pytest.txt
|
# -r requirements/pytest.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
|
@ -678,19 +679,19 @@ geomet==0.1.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
# cassandra-driver
|
# cassandra-driver
|
||||||
gitdb==4.0.5
|
gitdb==4.0.7
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
# gitpython
|
# gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
# kubernetes
|
# kubernetes
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.7/linux.txt
|
# -c requirements/static/ci/../pkg/py3.7/linux.txt
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
|
@ -1261,7 +1262,6 @@ six==1.16.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# isodate
|
# isodate
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -1285,7 +1285,7 @@ smbprotocol==1.10.1
|
||||||
# via
|
# via
|
||||||
# -r requirements/static/ci/cloud.in
|
# -r requirements/static/ci/cloud.in
|
||||||
# pypsexec
|
# pypsexec
|
||||||
smmap==3.0.4
|
smmap==4.0.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
# gitdb
|
# gitdb
|
||||||
|
@ -1325,7 +1325,7 @@ tomli==2.0.1
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
# pytest
|
# pytest
|
||||||
transitions==0.8.1
|
transitions==0.8.9
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -1340,7 +1340,7 @@ typing-extensions==3.10.0.0
|
||||||
# pytest-shell-utilities
|
# pytest-shell-utilities
|
||||||
# pytest-system-statistics
|
# pytest-system-statistics
|
||||||
# yarl
|
# yarl
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.7/linux.txt
|
# -c requirements/static/ci/../pkg/py3.7/linux.txt
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
|
|
|
@ -34,7 +34,7 @@ distro==1.5.0
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
docutils==0.16
|
docutils==0.16
|
||||||
# via sphinx
|
# via sphinx
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
# requests
|
# requests
|
||||||
|
@ -189,7 +189,7 @@ typing-extensions==3.10.0.0
|
||||||
# myst-docutils
|
# myst-docutils
|
||||||
uc-micro-py==1.0.1
|
uc-micro-py==1.0.1
|
||||||
# via linkify-it-py
|
# via linkify-it-py
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
# requests
|
# requests
|
||||||
|
|
|
@ -426,7 +426,9 @@ dnspython==1.16.0
|
||||||
# ciscoconfparse
|
# ciscoconfparse
|
||||||
# python-etcd
|
# python-etcd
|
||||||
docker==6.1.3
|
docker==6.1.3
|
||||||
# via -r requirements/pytest.txt
|
# via
|
||||||
|
# -r requirements/pytest.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
exceptiongroup==1.0.4
|
exceptiongroup==1.0.4
|
||||||
|
@ -447,15 +449,15 @@ genshi==0.7.5
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
geomet==0.2.1.post1
|
geomet==0.2.1.post1
|
||||||
# via cassandra-driver
|
# via cassandra-driver
|
||||||
gitdb==4.0.5
|
gitdb==4.0.7
|
||||||
# via gitpython
|
# via gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via kubernetes
|
# via kubernetes
|
||||||
hglib==2.6.1
|
hglib==2.6.1
|
||||||
# via -r requirements/static/ci/freebsd.in
|
# via -r requirements/static/ci/freebsd.in
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.7/freebsd.txt
|
# -c requirements/static/ci/../pkg/py3.7/freebsd.txt
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
|
@ -887,7 +889,6 @@ six==1.16.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# isodate
|
# isodate
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -905,7 +906,7 @@ six==1.16.0
|
||||||
# vcert
|
# vcert
|
||||||
# virtualenv
|
# virtualenv
|
||||||
# websocket-client
|
# websocket-client
|
||||||
smmap==3.0.4
|
smmap==4.0.0
|
||||||
# via gitdb
|
# via gitdb
|
||||||
sqlparse==0.4.4
|
sqlparse==0.4.4
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
|
@ -930,7 +931,7 @@ toml==0.10.2
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
tomli==2.0.1
|
tomli==2.0.1
|
||||||
# via pytest
|
# via pytest
|
||||||
transitions==0.8.1
|
transitions==0.8.9
|
||||||
# via junos-eznc
|
# via junos-eznc
|
||||||
typing-extensions==3.10.0.0
|
typing-extensions==3.10.0.0
|
||||||
# via
|
# via
|
||||||
|
@ -942,7 +943,7 @@ typing-extensions==3.10.0.0
|
||||||
# pytest-shell-utilities
|
# pytest-shell-utilities
|
||||||
# pytest-system-statistics
|
# pytest-system-statistics
|
||||||
# yarl
|
# yarl
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.7/freebsd.txt
|
# -c requirements/static/ci/../pkg/py3.7/freebsd.txt
|
||||||
# botocore
|
# botocore
|
||||||
|
|
|
@ -519,6 +519,10 @@ backports.entry-points-selectable==1.1.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
# virtualenv
|
# virtualenv
|
||||||
|
backports.zoneinfo==0.2.1
|
||||||
|
# via
|
||||||
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
|
# tzlocal
|
||||||
bcrypt==3.1.6
|
bcrypt==3.1.6
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
|
@ -651,6 +655,7 @@ dnspython==1.16.0
|
||||||
docker==6.1.3
|
docker==6.1.3
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
# -r requirements/static/ci/lint.in
|
# -r requirements/static/ci/lint.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via
|
# via
|
||||||
|
@ -678,15 +683,15 @@ geomet==0.1.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
# cassandra-driver
|
# cassandra-driver
|
||||||
gitdb==4.0.5
|
gitdb==4.0.7
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
# gitpython
|
# gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
# kubernetes
|
# kubernetes
|
||||||
|
@ -694,7 +699,7 @@ hglib==2.6.1
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
# -r requirements/static/ci/linux.in
|
# -r requirements/static/ci/linux.in
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.7/linux.txt
|
# -c requirements/static/ci/../pkg/py3.7/linux.txt
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
|
@ -1128,7 +1133,6 @@ pytz==2022.1
|
||||||
# python-telegram-bot
|
# python-telegram-bot
|
||||||
# tempora
|
# tempora
|
||||||
# twilio
|
# twilio
|
||||||
# tzlocal
|
|
||||||
pyvmomi==6.7.1.2018.12
|
pyvmomi==6.7.1.2018.12
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
|
@ -1242,7 +1246,6 @@ six==1.16.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# isodate
|
# isodate
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -1268,7 +1271,7 @@ slack-sdk==3.19.5
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
# slack-bolt
|
# slack-bolt
|
||||||
smmap==3.0.4
|
smmap==4.0.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
# gitdb
|
# gitdb
|
||||||
|
@ -1309,7 +1312,7 @@ tornado==6.1
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
# python-telegram-bot
|
# python-telegram-bot
|
||||||
transitions==0.8.1
|
transitions==0.8.9
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -1328,11 +1331,11 @@ typing-extensions==3.10.0.0
|
||||||
# gitpython
|
# gitpython
|
||||||
# importlib-metadata
|
# importlib-metadata
|
||||||
# yarl
|
# yarl
|
||||||
tzlocal==2.1
|
tzlocal==3.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
# apscheduler
|
# apscheduler
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.7/linux.txt
|
# -c requirements/static/ci/../pkg/py3.7/linux.txt
|
||||||
# -c requirements/static/ci/py3.7/linux.txt
|
# -c requirements/static/ci/py3.7/linux.txt
|
||||||
|
|
|
@ -342,6 +342,8 @@ azure==4.0.0 ; sys_platform != "win32"
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
backports.entry-points-selectable==1.1.0
|
backports.entry-points-selectable==1.1.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
|
backports.zoneinfo==0.2.1
|
||||||
|
# via tzlocal
|
||||||
bcrypt==3.1.6
|
bcrypt==3.1.6
|
||||||
# via
|
# via
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
|
@ -440,7 +442,9 @@ dnspython==1.16.0
|
||||||
# ciscoconfparse
|
# ciscoconfparse
|
||||||
# python-etcd
|
# python-etcd
|
||||||
docker==6.1.3
|
docker==6.1.3
|
||||||
# via -r requirements/pytest.txt
|
# via
|
||||||
|
# -r requirements/pytest.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
exceptiongroup==1.0.4
|
exceptiongroup==1.0.4
|
||||||
|
@ -461,15 +465,15 @@ genshi==0.7.5
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
geomet==0.1.2
|
geomet==0.1.2
|
||||||
# via cassandra-driver
|
# via cassandra-driver
|
||||||
gitdb==4.0.5
|
gitdb==4.0.7
|
||||||
# via gitpython
|
# via gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via kubernetes
|
# via kubernetes
|
||||||
hglib==2.6.1
|
hglib==2.6.1
|
||||||
# via -r requirements/static/ci/linux.in
|
# via -r requirements/static/ci/linux.in
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.7/linux.txt
|
# -c requirements/static/ci/../pkg/py3.7/linux.txt
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
|
@ -842,7 +846,6 @@ pytz==2022.1
|
||||||
# python-telegram-bot
|
# python-telegram-bot
|
||||||
# tempora
|
# tempora
|
||||||
# twilio
|
# twilio
|
||||||
# tzlocal
|
|
||||||
pyvmomi==6.7.1.2018.12
|
pyvmomi==6.7.1.2018.12
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
pyyaml==6.0.1
|
pyyaml==6.0.1
|
||||||
|
@ -928,7 +931,6 @@ six==1.16.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# isodate
|
# isodate
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -950,7 +952,7 @@ slack-bolt==1.15.5
|
||||||
# via -r requirements/static/ci/linux.in
|
# via -r requirements/static/ci/linux.in
|
||||||
slack-sdk==3.19.5
|
slack-sdk==3.19.5
|
||||||
# via slack-bolt
|
# via slack-bolt
|
||||||
smmap==3.0.4
|
smmap==4.0.0
|
||||||
# via gitdb
|
# via gitdb
|
||||||
sqlparse==0.4.4
|
sqlparse==0.4.4
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
|
@ -977,7 +979,7 @@ tomli==2.0.1
|
||||||
# via pytest
|
# via pytest
|
||||||
tornado==6.1
|
tornado==6.1
|
||||||
# via python-telegram-bot
|
# via python-telegram-bot
|
||||||
transitions==0.8.1
|
transitions==0.8.9
|
||||||
# via junos-eznc
|
# via junos-eznc
|
||||||
twilio==7.9.2
|
twilio==7.9.2
|
||||||
# via -r requirements/static/ci/linux.in
|
# via -r requirements/static/ci/linux.in
|
||||||
|
@ -991,9 +993,9 @@ typing-extensions==3.10.0.0
|
||||||
# pytest-shell-utilities
|
# pytest-shell-utilities
|
||||||
# pytest-system-statistics
|
# pytest-system-statistics
|
||||||
# yarl
|
# yarl
|
||||||
tzlocal==2.1
|
tzlocal==3.0
|
||||||
# via apscheduler
|
# via apscheduler
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.7/linux.txt
|
# -c requirements/static/ci/../pkg/py3.7/linux.txt
|
||||||
# botocore
|
# botocore
|
||||||
|
|
|
@ -110,7 +110,9 @@ dnspython==1.16.0
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
# python-etcd
|
# python-etcd
|
||||||
docker==6.1.3
|
docker==6.1.3
|
||||||
# via -r requirements/pytest.txt
|
# via
|
||||||
|
# -r requirements/pytest.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
exceptiongroup==1.0.4
|
exceptiongroup==1.0.4
|
||||||
|
@ -131,14 +133,14 @@ gitdb==4.0.7
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.7/windows.txt
|
# -c requirements/static/ci/../pkg/py3.7/windows.txt
|
||||||
# gitpython
|
# gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.7/windows.txt
|
# -c requirements/static/ci/../pkg/py3.7/windows.txt
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
# -r requirements/windows.txt
|
# -r requirements/windows.txt
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via kubernetes
|
# via kubernetes
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.7/windows.txt
|
# -c requirements/static/ci/../pkg/py3.7/windows.txt
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
|
@ -432,7 +434,6 @@ six==1.15.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# kubernetes
|
# kubernetes
|
||||||
# python-dateutil
|
# python-dateutil
|
||||||
|
@ -471,7 +472,7 @@ typing-extensions==4.4.0
|
||||||
# pytest-shell-utilities
|
# pytest-shell-utilities
|
||||||
# pytest-system-statistics
|
# pytest-system-statistics
|
||||||
# yarl
|
# yarl
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.7/windows.txt
|
# -c requirements/static/ci/../pkg/py3.7/windows.txt
|
||||||
# -r requirements/windows.txt
|
# -r requirements/windows.txt
|
||||||
|
|
|
@ -640,6 +640,7 @@ docker==6.1.3
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# -r requirements/pytest.txt
|
# -r requirements/pytest.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
|
@ -674,19 +675,19 @@ geomet==0.1.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# cassandra-driver
|
# cassandra-driver
|
||||||
gitdb==4.0.5
|
gitdb==4.0.7
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# gitpython
|
# gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# kubernetes
|
# kubernetes
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.8/linux.txt
|
# -c requirements/static/ci/../pkg/py3.8/linux.txt
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
|
@ -1249,7 +1250,6 @@ six==1.16.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# isodate
|
# isodate
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -1273,7 +1273,7 @@ smbprotocol==1.10.1
|
||||||
# via
|
# via
|
||||||
# -r requirements/static/ci/cloud.in
|
# -r requirements/static/ci/cloud.in
|
||||||
# pypsexec
|
# pypsexec
|
||||||
smmap==3.0.4
|
smmap==4.0.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# gitdb
|
# gitdb
|
||||||
|
@ -1313,7 +1313,7 @@ tomli==2.0.1
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# pytest
|
# pytest
|
||||||
transitions==0.8.1
|
transitions==0.8.9
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -1322,7 +1322,7 @@ typing-extensions==4.2.0
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# pytest-shell-utilities
|
# pytest-shell-utilities
|
||||||
# pytest-system-statistics
|
# pytest-system-statistics
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.8/linux.txt
|
# -c requirements/static/ci/../pkg/py3.8/linux.txt
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
|
|
|
@ -34,7 +34,7 @@ distro==1.5.0
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
docutils==0.16
|
docutils==0.16
|
||||||
# via sphinx
|
# via sphinx
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# requests
|
# requests
|
||||||
|
@ -183,7 +183,7 @@ typing-extensions==4.2.0
|
||||||
# myst-docutils
|
# myst-docutils
|
||||||
uc-micro-py==1.0.1
|
uc-micro-py==1.0.1
|
||||||
# via linkify-it-py
|
# via linkify-it-py
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# requests
|
# requests
|
||||||
|
|
|
@ -424,7 +424,9 @@ dnspython==1.16.0
|
||||||
# ciscoconfparse
|
# ciscoconfparse
|
||||||
# python-etcd
|
# python-etcd
|
||||||
docker==6.1.3
|
docker==6.1.3
|
||||||
# via -r requirements/pytest.txt
|
# via
|
||||||
|
# -r requirements/pytest.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
exceptiongroup==1.0.4
|
exceptiongroup==1.0.4
|
||||||
|
@ -445,15 +447,15 @@ genshi==0.7.5
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
geomet==0.2.1.post1
|
geomet==0.2.1.post1
|
||||||
# via cassandra-driver
|
# via cassandra-driver
|
||||||
gitdb==4.0.5
|
gitdb==4.0.7
|
||||||
# via gitpython
|
# via gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via kubernetes
|
# via kubernetes
|
||||||
hglib==2.6.1
|
hglib==2.6.1
|
||||||
# via -r requirements/static/ci/freebsd.in
|
# via -r requirements/static/ci/freebsd.in
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.8/freebsd.txt
|
# -c requirements/static/ci/../pkg/py3.8/freebsd.txt
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
|
@ -877,7 +879,6 @@ six==1.16.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# isodate
|
# isodate
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -895,7 +896,7 @@ six==1.16.0
|
||||||
# vcert
|
# vcert
|
||||||
# virtualenv
|
# virtualenv
|
||||||
# websocket-client
|
# websocket-client
|
||||||
smmap==3.0.4
|
smmap==4.0.0
|
||||||
# via gitdb
|
# via gitdb
|
||||||
sqlparse==0.4.4
|
sqlparse==0.4.4
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
|
@ -920,13 +921,13 @@ toml==0.10.2
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
tomli==2.0.1
|
tomli==2.0.1
|
||||||
# via pytest
|
# via pytest
|
||||||
transitions==0.8.1
|
transitions==0.8.9
|
||||||
# via junos-eznc
|
# via junos-eznc
|
||||||
typing-extensions==4.2.0
|
typing-extensions==4.2.0
|
||||||
# via
|
# via
|
||||||
# pytest-shell-utilities
|
# pytest-shell-utilities
|
||||||
# pytest-system-statistics
|
# pytest-system-statistics
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.8/freebsd.txt
|
# -c requirements/static/ci/../pkg/py3.8/freebsd.txt
|
||||||
# botocore
|
# botocore
|
||||||
|
|
|
@ -515,6 +515,10 @@ backports.entry-points-selectable==1.1.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# virtualenv
|
# virtualenv
|
||||||
|
backports.zoneinfo==0.2.1
|
||||||
|
# via
|
||||||
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
|
# tzlocal
|
||||||
bcrypt==3.1.6
|
bcrypt==3.1.6
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
|
@ -647,6 +651,7 @@ dnspython==1.16.0
|
||||||
docker==6.1.3
|
docker==6.1.3
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
# -r requirements/static/ci/lint.in
|
# -r requirements/static/ci/lint.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via
|
# via
|
||||||
|
@ -674,15 +679,15 @@ geomet==0.1.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# cassandra-driver
|
# cassandra-driver
|
||||||
gitdb==4.0.5
|
gitdb==4.0.7
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# gitpython
|
# gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# kubernetes
|
# kubernetes
|
||||||
|
@ -690,7 +695,7 @@ hglib==2.6.1
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# -r requirements/static/ci/linux.in
|
# -r requirements/static/ci/linux.in
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.8/linux.txt
|
# -c requirements/static/ci/../pkg/py3.8/linux.txt
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
|
@ -1118,7 +1123,6 @@ pytz==2022.1
|
||||||
# python-telegram-bot
|
# python-telegram-bot
|
||||||
# tempora
|
# tempora
|
||||||
# twilio
|
# twilio
|
||||||
# tzlocal
|
|
||||||
pyvmomi==6.7.1.2018.12
|
pyvmomi==6.7.1.2018.12
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
|
@ -1232,7 +1236,6 @@ six==1.16.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# isodate
|
# isodate
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -1258,7 +1261,7 @@ slack-sdk==3.19.5
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# slack-bolt
|
# slack-bolt
|
||||||
smmap==3.0.4
|
smmap==4.0.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# gitdb
|
# gitdb
|
||||||
|
@ -1299,7 +1302,7 @@ tornado==6.1
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# python-telegram-bot
|
# python-telegram-bot
|
||||||
transitions==0.8.1
|
transitions==0.8.9
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -1307,11 +1310,11 @@ twilio==7.9.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# -r requirements/static/ci/linux.in
|
# -r requirements/static/ci/linux.in
|
||||||
tzlocal==2.1
|
tzlocal==3.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
# apscheduler
|
# apscheduler
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.8/linux.txt
|
# -c requirements/static/ci/../pkg/py3.8/linux.txt
|
||||||
# -c requirements/static/ci/py3.8/linux.txt
|
# -c requirements/static/ci/py3.8/linux.txt
|
||||||
|
|
|
@ -340,6 +340,8 @@ azure==4.0.0 ; sys_platform != "win32"
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
backports.entry-points-selectable==1.1.0
|
backports.entry-points-selectable==1.1.0
|
||||||
# via virtualenv
|
# via virtualenv
|
||||||
|
backports.zoneinfo==0.2.1
|
||||||
|
# via tzlocal
|
||||||
bcrypt==3.1.6
|
bcrypt==3.1.6
|
||||||
# via
|
# via
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
|
@ -438,7 +440,9 @@ dnspython==1.16.0
|
||||||
# ciscoconfparse
|
# ciscoconfparse
|
||||||
# python-etcd
|
# python-etcd
|
||||||
docker==6.1.3
|
docker==6.1.3
|
||||||
# via -r requirements/pytest.txt
|
# via
|
||||||
|
# -r requirements/pytest.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
exceptiongroup==1.0.4
|
exceptiongroup==1.0.4
|
||||||
|
@ -459,15 +463,15 @@ genshi==0.7.5
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
geomet==0.1.2
|
geomet==0.1.2
|
||||||
# via cassandra-driver
|
# via cassandra-driver
|
||||||
gitdb==4.0.5
|
gitdb==4.0.7
|
||||||
# via gitpython
|
# via gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via kubernetes
|
# via kubernetes
|
||||||
hglib==2.6.1
|
hglib==2.6.1
|
||||||
# via -r requirements/static/ci/linux.in
|
# via -r requirements/static/ci/linux.in
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.8/linux.txt
|
# -c requirements/static/ci/../pkg/py3.8/linux.txt
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
|
@ -832,7 +836,6 @@ pytz==2022.1
|
||||||
# python-telegram-bot
|
# python-telegram-bot
|
||||||
# tempora
|
# tempora
|
||||||
# twilio
|
# twilio
|
||||||
# tzlocal
|
|
||||||
pyvmomi==6.7.1.2018.12
|
pyvmomi==6.7.1.2018.12
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
pyyaml==6.0.1
|
pyyaml==6.0.1
|
||||||
|
@ -918,7 +921,6 @@ six==1.16.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# isodate
|
# isodate
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -940,7 +942,7 @@ slack-bolt==1.15.5
|
||||||
# via -r requirements/static/ci/linux.in
|
# via -r requirements/static/ci/linux.in
|
||||||
slack-sdk==3.19.5
|
slack-sdk==3.19.5
|
||||||
# via slack-bolt
|
# via slack-bolt
|
||||||
smmap==3.0.4
|
smmap==4.0.0
|
||||||
# via gitdb
|
# via gitdb
|
||||||
sqlparse==0.4.4
|
sqlparse==0.4.4
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
|
@ -967,7 +969,7 @@ tomli==2.0.1
|
||||||
# via pytest
|
# via pytest
|
||||||
tornado==6.1
|
tornado==6.1
|
||||||
# via python-telegram-bot
|
# via python-telegram-bot
|
||||||
transitions==0.8.1
|
transitions==0.8.9
|
||||||
# via junos-eznc
|
# via junos-eznc
|
||||||
twilio==7.9.2
|
twilio==7.9.2
|
||||||
# via -r requirements/static/ci/linux.in
|
# via -r requirements/static/ci/linux.in
|
||||||
|
@ -975,9 +977,9 @@ typing-extensions==4.2.0
|
||||||
# via
|
# via
|
||||||
# pytest-shell-utilities
|
# pytest-shell-utilities
|
||||||
# pytest-system-statistics
|
# pytest-system-statistics
|
||||||
tzlocal==2.1
|
tzlocal==3.0
|
||||||
# via apscheduler
|
# via apscheduler
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.8/linux.txt
|
# -c requirements/static/ci/../pkg/py3.8/linux.txt
|
||||||
# botocore
|
# botocore
|
||||||
|
|
|
@ -106,7 +106,9 @@ dnspython==1.16.0
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
# python-etcd
|
# python-etcd
|
||||||
docker==6.1.3
|
docker==6.1.3
|
||||||
# via -r requirements/pytest.txt
|
# via
|
||||||
|
# -r requirements/pytest.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
exceptiongroup==1.0.4
|
exceptiongroup==1.0.4
|
||||||
|
@ -127,14 +129,14 @@ gitdb==4.0.7
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.8/windows.txt
|
# -c requirements/static/ci/../pkg/py3.8/windows.txt
|
||||||
# gitpython
|
# gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.8/windows.txt
|
# -c requirements/static/ci/../pkg/py3.8/windows.txt
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
# -r requirements/windows.txt
|
# -r requirements/windows.txt
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via kubernetes
|
# via kubernetes
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.8/windows.txt
|
# -c requirements/static/ci/../pkg/py3.8/windows.txt
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
|
@ -420,7 +422,6 @@ six==1.15.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# kubernetes
|
# kubernetes
|
||||||
# python-dateutil
|
# python-dateutil
|
||||||
|
@ -453,7 +454,7 @@ typing-extensions==4.2.0
|
||||||
# via
|
# via
|
||||||
# pytest-shell-utilities
|
# pytest-shell-utilities
|
||||||
# pytest-system-statistics
|
# pytest-system-statistics
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.8/windows.txt
|
# -c requirements/static/ci/../pkg/py3.8/windows.txt
|
||||||
# -r requirements/windows.txt
|
# -r requirements/windows.txt
|
||||||
|
|
|
@ -640,6 +640,7 @@ docker==6.1.3
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# -r requirements/pytest.txt
|
# -r requirements/pytest.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
|
@ -674,19 +675,19 @@ geomet==0.1.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# cassandra-driver
|
# cassandra-driver
|
||||||
gitdb==4.0.5
|
gitdb==4.0.7
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# gitpython
|
# gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# kubernetes
|
# kubernetes
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.9/linux.txt
|
# -c requirements/static/ci/../pkg/py3.9/linux.txt
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
|
@ -1251,7 +1252,6 @@ six==1.16.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# isodate
|
# isodate
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -1275,7 +1275,7 @@ smbprotocol==1.10.1
|
||||||
# via
|
# via
|
||||||
# -r requirements/static/ci/cloud.in
|
# -r requirements/static/ci/cloud.in
|
||||||
# pypsexec
|
# pypsexec
|
||||||
smmap==3.0.4
|
smmap==4.0.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# gitdb
|
# gitdb
|
||||||
|
@ -1315,7 +1315,7 @@ tomli==2.0.1
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# pytest
|
# pytest
|
||||||
transitions==0.8.1
|
transitions==0.8.9
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -1324,7 +1324,7 @@ typing-extensions==4.2.0
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# pytest-shell-utilities
|
# pytest-shell-utilities
|
||||||
# pytest-system-statistics
|
# pytest-system-statistics
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.9/linux.txt
|
# -c requirements/static/ci/../pkg/py3.9/linux.txt
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
|
|
|
@ -426,7 +426,9 @@ dnspython==1.16.0
|
||||||
# ciscoconfparse
|
# ciscoconfparse
|
||||||
# python-etcd
|
# python-etcd
|
||||||
docker==6.1.3
|
docker==6.1.3
|
||||||
# via -r requirements/pytest.txt
|
# via
|
||||||
|
# -r requirements/pytest.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
exceptiongroup==1.0.4
|
exceptiongroup==1.0.4
|
||||||
|
@ -447,20 +449,20 @@ genshi==0.7.5
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
geomet==0.1.2
|
geomet==0.1.2
|
||||||
# via cassandra-driver
|
# via cassandra-driver
|
||||||
gitdb==4.0.5
|
gitdb==4.0.7
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.9/darwin.txt
|
# -c requirements/static/ci/../pkg/py3.9/darwin.txt
|
||||||
# gitpython
|
# gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.9/darwin.txt
|
# -c requirements/static/ci/../pkg/py3.9/darwin.txt
|
||||||
# -r requirements/darwin.txt
|
# -r requirements/darwin.txt
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via kubernetes
|
# via kubernetes
|
||||||
hglib==2.6.1
|
hglib==2.6.1
|
||||||
# via -r requirements/static/ci/darwin.in
|
# via -r requirements/static/ci/darwin.in
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.9/darwin.txt
|
# -c requirements/static/ci/../pkg/py3.9/darwin.txt
|
||||||
# -r requirements/darwin.txt
|
# -r requirements/darwin.txt
|
||||||
|
@ -887,7 +889,6 @@ six==1.16.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# isodate
|
# isodate
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -903,7 +904,7 @@ six==1.16.0
|
||||||
# vcert
|
# vcert
|
||||||
# virtualenv
|
# virtualenv
|
||||||
# websocket-client
|
# websocket-client
|
||||||
smmap==3.0.2
|
smmap==4.0.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.9/darwin.txt
|
# -c requirements/static/ci/../pkg/py3.9/darwin.txt
|
||||||
# gitdb
|
# gitdb
|
||||||
|
@ -930,13 +931,13 @@ toml==0.10.2
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
tomli==2.0.1
|
tomli==2.0.1
|
||||||
# via pytest
|
# via pytest
|
||||||
transitions==0.8.1
|
transitions==0.8.9
|
||||||
# via junos-eznc
|
# via junos-eznc
|
||||||
typing-extensions==4.2.0
|
typing-extensions==4.2.0
|
||||||
# via
|
# via
|
||||||
# pytest-shell-utilities
|
# pytest-shell-utilities
|
||||||
# pytest-system-statistics
|
# pytest-system-statistics
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.9/darwin.txt
|
# -c requirements/static/ci/../pkg/py3.9/darwin.txt
|
||||||
# botocore
|
# botocore
|
||||||
|
|
|
@ -34,7 +34,7 @@ distro==1.5.0
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
docutils==0.19
|
docutils==0.19
|
||||||
# via sphinx
|
# via sphinx
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# requests
|
# requests
|
||||||
|
@ -187,7 +187,7 @@ typing-extensions==4.2.0
|
||||||
# myst-docutils
|
# myst-docutils
|
||||||
uc-micro-py==1.0.1
|
uc-micro-py==1.0.1
|
||||||
# via linkify-it-py
|
# via linkify-it-py
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# requests
|
# requests
|
||||||
|
|
|
@ -424,7 +424,9 @@ dnspython==1.16.0
|
||||||
# ciscoconfparse
|
# ciscoconfparse
|
||||||
# python-etcd
|
# python-etcd
|
||||||
docker==6.1.3
|
docker==6.1.3
|
||||||
# via -r requirements/pytest.txt
|
# via
|
||||||
|
# -r requirements/pytest.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
exceptiongroup==1.0.4
|
exceptiongroup==1.0.4
|
||||||
|
@ -445,15 +447,15 @@ genshi==0.7.5
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
geomet==0.2.1.post1
|
geomet==0.2.1.post1
|
||||||
# via cassandra-driver
|
# via cassandra-driver
|
||||||
gitdb==4.0.5
|
gitdb==4.0.7
|
||||||
# via gitpython
|
# via gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via kubernetes
|
# via kubernetes
|
||||||
hglib==2.6.1
|
hglib==2.6.1
|
||||||
# via -r requirements/static/ci/freebsd.in
|
# via -r requirements/static/ci/freebsd.in
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.9/freebsd.txt
|
# -c requirements/static/ci/../pkg/py3.9/freebsd.txt
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
|
@ -879,7 +881,6 @@ six==1.16.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# isodate
|
# isodate
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -897,7 +898,7 @@ six==1.16.0
|
||||||
# vcert
|
# vcert
|
||||||
# virtualenv
|
# virtualenv
|
||||||
# websocket-client
|
# websocket-client
|
||||||
smmap==3.0.4
|
smmap==4.0.0
|
||||||
# via gitdb
|
# via gitdb
|
||||||
sqlparse==0.4.4
|
sqlparse==0.4.4
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
|
@ -922,13 +923,13 @@ toml==0.10.2
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
tomli==2.0.1
|
tomli==2.0.1
|
||||||
# via pytest
|
# via pytest
|
||||||
transitions==0.8.1
|
transitions==0.8.9
|
||||||
# via junos-eznc
|
# via junos-eznc
|
||||||
typing-extensions==4.2.0
|
typing-extensions==4.2.0
|
||||||
# via
|
# via
|
||||||
# pytest-shell-utilities
|
# pytest-shell-utilities
|
||||||
# pytest-system-statistics
|
# pytest-system-statistics
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.9/freebsd.txt
|
# -c requirements/static/ci/../pkg/py3.9/freebsd.txt
|
||||||
# botocore
|
# botocore
|
||||||
|
|
|
@ -651,6 +651,7 @@ dnspython==1.16.0
|
||||||
docker==6.1.3
|
docker==6.1.3
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
# -r requirements/static/ci/lint.in
|
# -r requirements/static/ci/lint.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via
|
# via
|
||||||
|
@ -678,15 +679,15 @@ geomet==0.1.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# cassandra-driver
|
# cassandra-driver
|
||||||
gitdb==4.0.5
|
gitdb==4.0.7
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# gitpython
|
# gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# kubernetes
|
# kubernetes
|
||||||
|
@ -694,7 +695,7 @@ hglib==2.6.1
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# -r requirements/static/ci/linux.in
|
# -r requirements/static/ci/linux.in
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.9/linux.txt
|
# -c requirements/static/ci/../pkg/py3.9/linux.txt
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
|
@ -1124,7 +1125,6 @@ pytz==2022.1
|
||||||
# python-telegram-bot
|
# python-telegram-bot
|
||||||
# tempora
|
# tempora
|
||||||
# twilio
|
# twilio
|
||||||
# tzlocal
|
|
||||||
pyvmomi==6.7.1.2018.12
|
pyvmomi==6.7.1.2018.12
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
|
@ -1238,7 +1238,6 @@ six==1.16.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# isodate
|
# isodate
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -1264,7 +1263,7 @@ slack-sdk==3.19.5
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# slack-bolt
|
# slack-bolt
|
||||||
smmap==3.0.4
|
smmap==4.0.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# gitdb
|
# gitdb
|
||||||
|
@ -1305,7 +1304,7 @@ tornado==6.1
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# python-telegram-bot
|
# python-telegram-bot
|
||||||
transitions==0.8.1
|
transitions==0.8.9
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -1313,11 +1312,11 @@ twilio==7.9.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# -r requirements/static/ci/linux.in
|
# -r requirements/static/ci/linux.in
|
||||||
tzlocal==2.1
|
tzlocal==3.0
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
# apscheduler
|
# apscheduler
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.9/linux.txt
|
# -c requirements/static/ci/../pkg/py3.9/linux.txt
|
||||||
# -c requirements/static/ci/py3.9/linux.txt
|
# -c requirements/static/ci/py3.9/linux.txt
|
||||||
|
|
|
@ -440,7 +440,9 @@ dnspython==1.16.0
|
||||||
# ciscoconfparse
|
# ciscoconfparse
|
||||||
# python-etcd
|
# python-etcd
|
||||||
docker==6.1.3
|
docker==6.1.3
|
||||||
# via -r requirements/pytest.txt
|
# via
|
||||||
|
# -r requirements/pytest.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
exceptiongroup==1.0.4
|
exceptiongroup==1.0.4
|
||||||
|
@ -461,15 +463,15 @@ genshi==0.7.5
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
geomet==0.1.2
|
geomet==0.1.2
|
||||||
# via cassandra-driver
|
# via cassandra-driver
|
||||||
gitdb==4.0.5
|
gitdb==4.0.7
|
||||||
# via gitpython
|
# via gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via kubernetes
|
# via kubernetes
|
||||||
hglib==2.6.1
|
hglib==2.6.1
|
||||||
# via -r requirements/static/ci/linux.in
|
# via -r requirements/static/ci/linux.in
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.9/linux.txt
|
# -c requirements/static/ci/../pkg/py3.9/linux.txt
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
|
@ -836,7 +838,6 @@ pytz==2022.1
|
||||||
# python-telegram-bot
|
# python-telegram-bot
|
||||||
# tempora
|
# tempora
|
||||||
# twilio
|
# twilio
|
||||||
# tzlocal
|
|
||||||
pyvmomi==6.7.1.2018.12
|
pyvmomi==6.7.1.2018.12
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
pyyaml==6.0.1
|
pyyaml==6.0.1
|
||||||
|
@ -922,7 +923,6 @@ six==1.16.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# isodate
|
# isodate
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# junos-eznc
|
# junos-eznc
|
||||||
|
@ -944,7 +944,7 @@ slack-bolt==1.15.5
|
||||||
# via -r requirements/static/ci/linux.in
|
# via -r requirements/static/ci/linux.in
|
||||||
slack-sdk==3.19.5
|
slack-sdk==3.19.5
|
||||||
# via slack-bolt
|
# via slack-bolt
|
||||||
smmap==3.0.4
|
smmap==4.0.0
|
||||||
# via gitdb
|
# via gitdb
|
||||||
sqlparse==0.4.4
|
sqlparse==0.4.4
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
|
@ -971,7 +971,7 @@ tomli==2.0.1
|
||||||
# via pytest
|
# via pytest
|
||||||
tornado==6.1
|
tornado==6.1
|
||||||
# via python-telegram-bot
|
# via python-telegram-bot
|
||||||
transitions==0.8.1
|
transitions==0.8.9
|
||||||
# via junos-eznc
|
# via junos-eznc
|
||||||
twilio==7.9.2
|
twilio==7.9.2
|
||||||
# via -r requirements/static/ci/linux.in
|
# via -r requirements/static/ci/linux.in
|
||||||
|
@ -979,9 +979,9 @@ typing-extensions==4.2.0
|
||||||
# via
|
# via
|
||||||
# pytest-shell-utilities
|
# pytest-shell-utilities
|
||||||
# pytest-system-statistics
|
# pytest-system-statistics
|
||||||
tzlocal==2.1
|
tzlocal==3.0
|
||||||
# via apscheduler
|
# via apscheduler
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.9/linux.txt
|
# -c requirements/static/ci/../pkg/py3.9/linux.txt
|
||||||
# botocore
|
# botocore
|
||||||
|
|
|
@ -20,7 +20,7 @@ charset-normalizer==3.0.1
|
||||||
# via requests
|
# via requests
|
||||||
commonmark==0.9.1
|
commonmark==0.9.1
|
||||||
# via rich
|
# via rich
|
||||||
idna==3.4
|
idna==3.2
|
||||||
# via requests
|
# via requests
|
||||||
jinja2==3.1.2
|
jinja2==3.1.2
|
||||||
# via -r requirements/static/ci/tools.in
|
# via -r requirements/static/ci/tools.in
|
||||||
|
@ -52,7 +52,7 @@ six==1.16.0
|
||||||
# via python-dateutil
|
# via python-dateutil
|
||||||
typing-extensions==4.4.0
|
typing-extensions==4.4.0
|
||||||
# via python-tools-scripts
|
# via python-tools-scripts
|
||||||
urllib3==1.26.12
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# botocore
|
# botocore
|
||||||
# requests
|
# requests
|
||||||
|
|
|
@ -106,7 +106,9 @@ dnspython==1.16.0
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
# python-etcd
|
# python-etcd
|
||||||
docker==6.1.3
|
docker==6.1.3
|
||||||
# via -r requirements/pytest.txt
|
# via
|
||||||
|
# -r requirements/pytest.txt
|
||||||
|
# -r requirements/static/ci/common.in
|
||||||
etcd3-py==0.1.6
|
etcd3-py==0.1.6
|
||||||
# via -r requirements/static/ci/common.in
|
# via -r requirements/static/ci/common.in
|
||||||
exceptiongroup==1.0.4
|
exceptiongroup==1.0.4
|
||||||
|
@ -127,14 +129,14 @@ gitdb==4.0.7
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.9/windows.txt
|
# -c requirements/static/ci/../pkg/py3.9/windows.txt
|
||||||
# gitpython
|
# gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.9/windows.txt
|
# -c requirements/static/ci/../pkg/py3.9/windows.txt
|
||||||
# -r requirements/static/ci/common.in
|
# -r requirements/static/ci/common.in
|
||||||
# -r requirements/windows.txt
|
# -r requirements/windows.txt
|
||||||
google-auth==1.6.3
|
google-auth==2.1.0
|
||||||
# via kubernetes
|
# via kubernetes
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.9/windows.txt
|
# -c requirements/static/ci/../pkg/py3.9/windows.txt
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
|
@ -421,7 +423,6 @@ six==1.15.0
|
||||||
# etcd3-py
|
# etcd3-py
|
||||||
# genshi
|
# genshi
|
||||||
# geomet
|
# geomet
|
||||||
# google-auth
|
|
||||||
# jsonschema
|
# jsonschema
|
||||||
# kubernetes
|
# kubernetes
|
||||||
# python-dateutil
|
# python-dateutil
|
||||||
|
@ -454,7 +455,7 @@ typing-extensions==4.2.0
|
||||||
# via
|
# via
|
||||||
# pytest-shell-utilities
|
# pytest-shell-utilities
|
||||||
# pytest-system-statistics
|
# pytest-system-statistics
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -c requirements/static/ci/../pkg/py3.9/windows.txt
|
# -c requirements/static/ci/../pkg/py3.9/windows.txt
|
||||||
# -r requirements/windows.txt
|
# -r requirements/windows.txt
|
||||||
|
|
|
@ -24,11 +24,11 @@ cryptography==41.0.4
|
||||||
# pyopenssl
|
# pyopenssl
|
||||||
distro==1.5.0
|
distro==1.5.0
|
||||||
# via -r requirements/base.txt
|
# via -r requirements/base.txt
|
||||||
gitdb==4.0.5
|
gitdb==4.0.7
|
||||||
# via gitpython
|
# via gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via -r requirements/darwin.txt
|
# via -r requirements/darwin.txt
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -r requirements/darwin.txt
|
# -r requirements/darwin.txt
|
||||||
# requests
|
# requests
|
||||||
|
@ -104,13 +104,13 @@ six==1.16.0
|
||||||
# via
|
# via
|
||||||
# cheroot
|
# cheroot
|
||||||
# python-dateutil
|
# python-dateutil
|
||||||
smmap==3.0.2
|
smmap==4.0.0
|
||||||
# via gitdb
|
# via gitdb
|
||||||
tempora==4.1.1
|
tempora==4.1.1
|
||||||
# via portend
|
# via portend
|
||||||
timelib==0.2.5
|
timelib==0.2.5
|
||||||
# via -r requirements/darwin.txt
|
# via -r requirements/darwin.txt
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via requests
|
# via requests
|
||||||
vultr==1.0.1
|
vultr==1.0.1
|
||||||
# via -r requirements/darwin.txt
|
# via -r requirements/darwin.txt
|
||||||
|
|
|
@ -24,7 +24,7 @@ distro==1.5.0
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# -r requirements/static/pkg/freebsd.in
|
# -r requirements/static/pkg/freebsd.in
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via requests
|
# via requests
|
||||||
immutables==0.15
|
immutables==0.15
|
||||||
# via contextvars
|
# via contextvars
|
||||||
|
@ -96,7 +96,7 @@ tempora==4.1.1
|
||||||
# via portend
|
# via portend
|
||||||
timelib==0.2.5
|
timelib==0.2.5
|
||||||
# via -r requirements/static/pkg/freebsd.in
|
# via -r requirements/static/pkg/freebsd.in
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via requests
|
# via requests
|
||||||
zc.lockfile==1.4
|
zc.lockfile==1.4
|
||||||
# via cherrypy
|
# via cherrypy
|
||||||
|
|
|
@ -22,7 +22,7 @@ cryptography==41.0.4
|
||||||
# pyopenssl
|
# pyopenssl
|
||||||
distro==1.5.0
|
distro==1.5.0
|
||||||
# via -r requirements/base.txt
|
# via -r requirements/base.txt
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via requests
|
# via requests
|
||||||
immutables==0.15
|
immutables==0.15
|
||||||
# via contextvars
|
# via contextvars
|
||||||
|
@ -96,7 +96,7 @@ tempora==4.1.1
|
||||||
# via portend
|
# via portend
|
||||||
timelib==0.2.5
|
timelib==0.2.5
|
||||||
# via -r requirements/static/pkg/linux.in
|
# via -r requirements/static/pkg/linux.in
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via requests
|
# via requests
|
||||||
zc.lockfile==1.4
|
zc.lockfile==1.4
|
||||||
# via cherrypy
|
# via cherrypy
|
||||||
|
|
|
@ -31,9 +31,9 @@ distro==1.5.0
|
||||||
# via -r requirements/base.txt
|
# via -r requirements/base.txt
|
||||||
gitdb==4.0.7
|
gitdb==4.0.7
|
||||||
# via gitpython
|
# via gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via -r requirements/windows.txt
|
# via -r requirements/windows.txt
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via requests
|
# via requests
|
||||||
immutables==0.15
|
immutables==0.15
|
||||||
# via contextvars
|
# via contextvars
|
||||||
|
@ -124,7 +124,7 @@ tempora==4.1.1
|
||||||
# via portend
|
# via portend
|
||||||
timelib==0.2.5
|
timelib==0.2.5
|
||||||
# via -r requirements/windows.txt
|
# via -r requirements/windows.txt
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -r requirements/windows.txt
|
# -r requirements/windows.txt
|
||||||
# requests
|
# requests
|
||||||
|
|
|
@ -24,7 +24,7 @@ distro==1.5.0
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# -r requirements/static/pkg/freebsd.in
|
# -r requirements/static/pkg/freebsd.in
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via requests
|
# via requests
|
||||||
immutables==0.15
|
immutables==0.15
|
||||||
# via contextvars
|
# via contextvars
|
||||||
|
@ -96,7 +96,7 @@ timelib==0.2.5
|
||||||
# via -r requirements/static/pkg/freebsd.in
|
# via -r requirements/static/pkg/freebsd.in
|
||||||
typing-extensions==3.10.0.0
|
typing-extensions==3.10.0.0
|
||||||
# via importlib-metadata
|
# via importlib-metadata
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via requests
|
# via requests
|
||||||
zc.lockfile==1.4
|
zc.lockfile==1.4
|
||||||
# via cherrypy
|
# via cherrypy
|
||||||
|
|
|
@ -22,7 +22,7 @@ cryptography==41.0.4
|
||||||
# pyopenssl
|
# pyopenssl
|
||||||
distro==1.5.0
|
distro==1.5.0
|
||||||
# via -r requirements/base.txt
|
# via -r requirements/base.txt
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via requests
|
# via requests
|
||||||
immutables==0.15
|
immutables==0.15
|
||||||
# via contextvars
|
# via contextvars
|
||||||
|
@ -96,7 +96,7 @@ timelib==0.2.5
|
||||||
# via -r requirements/static/pkg/linux.in
|
# via -r requirements/static/pkg/linux.in
|
||||||
typing-extensions==3.10.0.0
|
typing-extensions==3.10.0.0
|
||||||
# via importlib-metadata
|
# via importlib-metadata
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via requests
|
# via requests
|
||||||
zc.lockfile==1.4
|
zc.lockfile==1.4
|
||||||
# via cherrypy
|
# via cherrypy
|
||||||
|
|
|
@ -31,9 +31,9 @@ distro==1.5.0
|
||||||
# via -r requirements/base.txt
|
# via -r requirements/base.txt
|
||||||
gitdb==4.0.7
|
gitdb==4.0.7
|
||||||
# via gitpython
|
# via gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via -r requirements/windows.txt
|
# via -r requirements/windows.txt
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via requests
|
# via requests
|
||||||
immutables==0.15
|
immutables==0.15
|
||||||
# via contextvars
|
# via contextvars
|
||||||
|
@ -129,7 +129,7 @@ typing-extensions==4.4.0
|
||||||
# via
|
# via
|
||||||
# gitpython
|
# gitpython
|
||||||
# importlib-metadata
|
# importlib-metadata
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -r requirements/windows.txt
|
# -r requirements/windows.txt
|
||||||
# requests
|
# requests
|
||||||
|
|
|
@ -24,7 +24,7 @@ distro==1.5.0
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# -r requirements/static/pkg/freebsd.in
|
# -r requirements/static/pkg/freebsd.in
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via requests
|
# via requests
|
||||||
immutables==0.15
|
immutables==0.15
|
||||||
# via contextvars
|
# via contextvars
|
||||||
|
@ -94,7 +94,7 @@ tempora==4.1.1
|
||||||
# via portend
|
# via portend
|
||||||
timelib==0.2.5
|
timelib==0.2.5
|
||||||
# via -r requirements/static/pkg/freebsd.in
|
# via -r requirements/static/pkg/freebsd.in
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via requests
|
# via requests
|
||||||
zc.lockfile==1.4
|
zc.lockfile==1.4
|
||||||
# via cherrypy
|
# via cherrypy
|
||||||
|
|
|
@ -22,7 +22,7 @@ cryptography==41.0.4
|
||||||
# pyopenssl
|
# pyopenssl
|
||||||
distro==1.5.0
|
distro==1.5.0
|
||||||
# via -r requirements/base.txt
|
# via -r requirements/base.txt
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via requests
|
# via requests
|
||||||
immutables==0.15
|
immutables==0.15
|
||||||
# via contextvars
|
# via contextvars
|
||||||
|
@ -94,7 +94,7 @@ tempora==4.1.1
|
||||||
# via portend
|
# via portend
|
||||||
timelib==0.2.5
|
timelib==0.2.5
|
||||||
# via -r requirements/static/pkg/linux.in
|
# via -r requirements/static/pkg/linux.in
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via requests
|
# via requests
|
||||||
zc.lockfile==1.4
|
zc.lockfile==1.4
|
||||||
# via cherrypy
|
# via cherrypy
|
||||||
|
|
|
@ -31,9 +31,9 @@ distro==1.5.0
|
||||||
# via -r requirements/base.txt
|
# via -r requirements/base.txt
|
||||||
gitdb==4.0.7
|
gitdb==4.0.7
|
||||||
# via gitpython
|
# via gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via -r requirements/windows.txt
|
# via -r requirements/windows.txt
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via requests
|
# via requests
|
||||||
immutables==0.15
|
immutables==0.15
|
||||||
# via contextvars
|
# via contextvars
|
||||||
|
@ -125,7 +125,7 @@ tempora==4.1.1
|
||||||
# via portend
|
# via portend
|
||||||
timelib==0.2.5
|
timelib==0.2.5
|
||||||
# via -r requirements/windows.txt
|
# via -r requirements/windows.txt
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -r requirements/windows.txt
|
# -r requirements/windows.txt
|
||||||
# requests
|
# requests
|
||||||
|
|
|
@ -24,11 +24,11 @@ cryptography==41.0.4
|
||||||
# pyopenssl
|
# pyopenssl
|
||||||
distro==1.5.0
|
distro==1.5.0
|
||||||
# via -r requirements/base.txt
|
# via -r requirements/base.txt
|
||||||
gitdb==4.0.5
|
gitdb==4.0.7
|
||||||
# via gitpython
|
# via gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via -r requirements/darwin.txt
|
# via -r requirements/darwin.txt
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via
|
# via
|
||||||
# -r requirements/darwin.txt
|
# -r requirements/darwin.txt
|
||||||
# requests
|
# requests
|
||||||
|
@ -104,13 +104,13 @@ six==1.16.0
|
||||||
# via
|
# via
|
||||||
# cheroot
|
# cheroot
|
||||||
# python-dateutil
|
# python-dateutil
|
||||||
smmap==3.0.2
|
smmap==4.0.0
|
||||||
# via gitdb
|
# via gitdb
|
||||||
tempora==4.1.1
|
tempora==4.1.1
|
||||||
# via portend
|
# via portend
|
||||||
timelib==0.2.5
|
timelib==0.2.5
|
||||||
# via -r requirements/darwin.txt
|
# via -r requirements/darwin.txt
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via requests
|
# via requests
|
||||||
vultr==1.0.1
|
vultr==1.0.1
|
||||||
# via -r requirements/darwin.txt
|
# via -r requirements/darwin.txt
|
||||||
|
|
|
@ -24,7 +24,7 @@ distro==1.5.0
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# -r requirements/static/pkg/freebsd.in
|
# -r requirements/static/pkg/freebsd.in
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via requests
|
# via requests
|
||||||
immutables==0.15
|
immutables==0.15
|
||||||
# via contextvars
|
# via contextvars
|
||||||
|
@ -96,7 +96,7 @@ tempora==4.1.1
|
||||||
# via portend
|
# via portend
|
||||||
timelib==0.2.5
|
timelib==0.2.5
|
||||||
# via -r requirements/static/pkg/freebsd.in
|
# via -r requirements/static/pkg/freebsd.in
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via requests
|
# via requests
|
||||||
zc.lockfile==1.4
|
zc.lockfile==1.4
|
||||||
# via cherrypy
|
# via cherrypy
|
||||||
|
|
|
@ -22,7 +22,7 @@ cryptography==41.0.4
|
||||||
# pyopenssl
|
# pyopenssl
|
||||||
distro==1.5.0
|
distro==1.5.0
|
||||||
# via -r requirements/base.txt
|
# via -r requirements/base.txt
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via requests
|
# via requests
|
||||||
immutables==0.15
|
immutables==0.15
|
||||||
# via contextvars
|
# via contextvars
|
||||||
|
@ -96,7 +96,7 @@ tempora==4.1.1
|
||||||
# via portend
|
# via portend
|
||||||
timelib==0.2.5
|
timelib==0.2.5
|
||||||
# via -r requirements/static/pkg/linux.in
|
# via -r requirements/static/pkg/linux.in
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via requests
|
# via requests
|
||||||
zc.lockfile==1.4
|
zc.lockfile==1.4
|
||||||
# via cherrypy
|
# via cherrypy
|
||||||
|
|
|
@ -31,9 +31,9 @@ distro==1.5.0
|
||||||
# via -r requirements/base.txt
|
# via -r requirements/base.txt
|
||||||
gitdb==4.0.7
|
gitdb==4.0.7
|
||||||
# via gitpython
|
# via gitpython
|
||||||
gitpython==3.1.35
|
gitpython==3.1.37
|
||||||
# via -r requirements/windows.txt
|
# via -r requirements/windows.txt
|
||||||
idna==2.8
|
idna==3.2
|
||||||
# via requests
|
# via requests
|
||||||
immutables==0.15
|
immutables==0.15
|
||||||
# via contextvars
|
# via contextvars
|
||||||
|
@ -125,7 +125,7 @@ tempora==4.1.1
|
||||||
# via portend
|
# via portend
|
||||||
timelib==0.2.5
|
timelib==0.2.5
|
||||||
# via -r requirements/windows.txt
|
# via -r requirements/windows.txt
|
||||||
urllib3==1.26.6
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -r requirements/windows.txt
|
# -r requirements/windows.txt
|
||||||
# requests
|
# requests
|
||||||
|
|
|
@ -10,7 +10,7 @@ certifi>=2022.12.07
|
||||||
cffi>=1.14.5
|
cffi>=1.14.5
|
||||||
cherrypy>=18.6.1
|
cherrypy>=18.6.1
|
||||||
cryptography>=41.0.3
|
cryptography>=41.0.3
|
||||||
gitpython>=3.1.30
|
gitpython>=3.1.37
|
||||||
ioloop>=0.1a0
|
ioloop>=0.1a0
|
||||||
lxml>=4.6.3
|
lxml>=4.6.3
|
||||||
pyasn1>=0.4.8
|
pyasn1>=0.4.8
|
||||||
|
|
|
@ -11,9 +11,11 @@ import hashlib
|
||||||
import logging
|
import logging
|
||||||
import multiprocessing
|
import multiprocessing
|
||||||
import os
|
import os
|
||||||
|
import pathlib
|
||||||
import queue
|
import queue
|
||||||
import re
|
import re
|
||||||
import shlex
|
import shlex
|
||||||
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import tarfile
|
import tarfile
|
||||||
|
@ -467,7 +469,14 @@ class SSH(MultiprocessingStateMixin):
|
||||||
if target.get("passwd", False) or self.opts["ssh_passwd"]:
|
if target.get("passwd", False) or self.opts["ssh_passwd"]:
|
||||||
self._key_deploy_run(host, target, False)
|
self._key_deploy_run(host, target, False)
|
||||||
return ret
|
return ret
|
||||||
if ret[host].get("stderr", "").count("Permission denied"):
|
stderr = ret[host].get("stderr", "")
|
||||||
|
# -failed to upload file- is detecting scp errors
|
||||||
|
# Errors to ignore when Permission denied is in the stderr. For example
|
||||||
|
# scp can get a permission denied on the target host, but they where
|
||||||
|
# able to accurate authenticate against the box
|
||||||
|
ignore_err = ["failed to upload file"]
|
||||||
|
check_err = [x for x in ignore_err if stderr.count(x)]
|
||||||
|
if "Permission denied" in stderr and not check_err:
|
||||||
target = self.targets[host]
|
target = self.targets[host]
|
||||||
# permission denied, attempt to auto deploy ssh key
|
# permission denied, attempt to auto deploy ssh key
|
||||||
print(
|
print(
|
||||||
|
@ -1007,11 +1016,30 @@ class Single:
|
||||||
"""
|
"""
|
||||||
Run our pre_flight script before running any ssh commands
|
Run our pre_flight script before running any ssh commands
|
||||||
"""
|
"""
|
||||||
script = os.path.join(tempfile.gettempdir(), self.ssh_pre_file)
|
with tempfile.NamedTemporaryFile() as temp:
|
||||||
|
# ensure we use copyfile to not copy the file attributes
|
||||||
|
# we want to ensure we use the perms set by the secure
|
||||||
|
# NamedTemporaryFile
|
||||||
|
try:
|
||||||
|
shutil.copyfile(self.ssh_pre_flight, temp.name)
|
||||||
|
except OSError as err:
|
||||||
|
return (
|
||||||
|
"",
|
||||||
|
"Could not copy pre flight script to temporary path",
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
target_script = f".{pathlib.Path(temp.name).name}"
|
||||||
|
log.trace("Copying the pre flight script to target")
|
||||||
|
stdout, stderr, retcode = self.shell.send(temp.name, target_script)
|
||||||
|
if retcode != 0:
|
||||||
|
# We could not copy the script to the target
|
||||||
|
log.error("Could not copy the pre flight script to target")
|
||||||
|
return stdout, stderr, retcode
|
||||||
|
|
||||||
self.shell.send(self.ssh_pre_flight, script)
|
log.trace("Executing the pre flight script on target")
|
||||||
|
return self.execute_script(
|
||||||
return self.execute_script(script, script_args=self.ssh_pre_flight_args)
|
target_script, script_args=self.ssh_pre_flight_args
|
||||||
|
)
|
||||||
|
|
||||||
def check_thin_dir(self):
|
def check_thin_dir(self):
|
||||||
"""
|
"""
|
||||||
|
@ -1388,18 +1416,20 @@ ARGS = {arguments}\n'''.format(
|
||||||
return self.shell.exec_cmd(cmd_str)
|
return self.shell.exec_cmd(cmd_str)
|
||||||
|
|
||||||
# Write the shim to a temporary file in the default temp directory
|
# Write the shim to a temporary file in the default temp directory
|
||||||
with tempfile.NamedTemporaryFile(
|
with tempfile.NamedTemporaryFile(mode="w+b", delete=False) as shim_tmp_file:
|
||||||
mode="w+b", prefix="shim_", delete=False
|
|
||||||
) as shim_tmp_file:
|
|
||||||
shim_tmp_file.write(salt.utils.stringutils.to_bytes(cmd_str))
|
shim_tmp_file.write(salt.utils.stringutils.to_bytes(cmd_str))
|
||||||
|
|
||||||
# Copy shim to target system, under $HOME/.<randomized name>
|
# Copy shim to target system, under $HOME/.<randomized name>
|
||||||
target_shim_file = ".{}.{}".format(
|
target_shim_file = f".{pathlib.Path(shim_tmp_file.name).name}"
|
||||||
binascii.hexlify(os.urandom(6)).decode("ascii"), extension
|
|
||||||
)
|
|
||||||
if self.winrm:
|
if self.winrm:
|
||||||
target_shim_file = saltwinshell.get_target_shim_file(self, target_shim_file)
|
target_shim_file = saltwinshell.get_target_shim_file(self, target_shim_file)
|
||||||
self.shell.send(shim_tmp_file.name, target_shim_file, makedirs=True)
|
stdout, stderr, retcode = self.shell.send(
|
||||||
|
shim_tmp_file.name, target_shim_file, makedirs=True
|
||||||
|
)
|
||||||
|
if retcode != 0:
|
||||||
|
log.error("Could not copy the shim script to target")
|
||||||
|
return stdout, stderr, retcode
|
||||||
|
|
||||||
# Remove our shim file
|
# Remove our shim file
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -1,132 +0,0 @@
|
||||||
"""
|
|
||||||
Test for ssh_pre_flight roster option
|
|
||||||
"""
|
|
||||||
|
|
||||||
import os
|
|
||||||
|
|
||||||
import pytest
|
|
||||||
|
|
||||||
import salt.utils.files
|
|
||||||
from tests.support.case import SSHCase
|
|
||||||
from tests.support.runtests import RUNTIME_VARS
|
|
||||||
|
|
||||||
|
|
||||||
class SSHPreFlightTest(SSHCase):
|
|
||||||
"""
|
|
||||||
Test ssh_pre_flight roster option
|
|
||||||
"""
|
|
||||||
|
|
||||||
def setUp(self):
|
|
||||||
super().setUp()
|
|
||||||
self.roster = os.path.join(RUNTIME_VARS.TMP, "pre_flight_roster")
|
|
||||||
self.data = {
|
|
||||||
"ssh_pre_flight": os.path.join(RUNTIME_VARS.TMP, "ssh_pre_flight.sh")
|
|
||||||
}
|
|
||||||
self.test_script = os.path.join(
|
|
||||||
RUNTIME_VARS.TMP, "test-pre-flight-script-worked.txt"
|
|
||||||
)
|
|
||||||
|
|
||||||
def _create_roster(self, pre_flight_script_args=None):
|
|
||||||
data = dict(self.data)
|
|
||||||
if pre_flight_script_args:
|
|
||||||
data["ssh_pre_flight_args"] = pre_flight_script_args
|
|
||||||
|
|
||||||
self.custom_roster(self.roster, data)
|
|
||||||
|
|
||||||
with salt.utils.files.fopen(data["ssh_pre_flight"], "w") as fp_:
|
|
||||||
fp_.write("touch {}".format(self.test_script))
|
|
||||||
|
|
||||||
@pytest.mark.slow_test
|
|
||||||
def test_ssh_pre_flight(self):
|
|
||||||
"""
|
|
||||||
test ssh when ssh_pre_flight is set
|
|
||||||
ensure the script runs successfully
|
|
||||||
"""
|
|
||||||
self._create_roster()
|
|
||||||
assert self.run_function("test.ping", roster_file=self.roster)
|
|
||||||
|
|
||||||
assert os.path.exists(self.test_script)
|
|
||||||
|
|
||||||
@pytest.mark.slow_test
|
|
||||||
def test_ssh_run_pre_flight(self):
|
|
||||||
"""
|
|
||||||
test ssh when --pre-flight is passed to salt-ssh
|
|
||||||
to ensure the script runs successfully
|
|
||||||
"""
|
|
||||||
self._create_roster()
|
|
||||||
# make sure we previously ran a command so the thin dir exists
|
|
||||||
self.run_function("test.ping", wipe=False)
|
|
||||||
assert not os.path.exists(self.test_script)
|
|
||||||
|
|
||||||
assert self.run_function(
|
|
||||||
"test.ping", ssh_opts="--pre-flight", roster_file=self.roster, wipe=False
|
|
||||||
)
|
|
||||||
assert os.path.exists(self.test_script)
|
|
||||||
|
|
||||||
@pytest.mark.slow_test
|
|
||||||
def test_ssh_run_pre_flight_args(self):
|
|
||||||
"""
|
|
||||||
test ssh when --pre-flight is passed to salt-ssh
|
|
||||||
to ensure the script runs successfully passing some args
|
|
||||||
"""
|
|
||||||
self._create_roster(pre_flight_script_args="foobar test")
|
|
||||||
# make sure we previously ran a command so the thin dir exists
|
|
||||||
self.run_function("test.ping", wipe=False)
|
|
||||||
assert not os.path.exists(self.test_script)
|
|
||||||
|
|
||||||
assert self.run_function(
|
|
||||||
"test.ping", ssh_opts="--pre-flight", roster_file=self.roster, wipe=False
|
|
||||||
)
|
|
||||||
assert os.path.exists(self.test_script)
|
|
||||||
|
|
||||||
@pytest.mark.slow_test
|
|
||||||
def test_ssh_run_pre_flight_args_prevent_injection(self):
|
|
||||||
"""
|
|
||||||
test ssh when --pre-flight is passed to salt-ssh
|
|
||||||
and evil arguments are used in order to produce shell injection
|
|
||||||
"""
|
|
||||||
injected_file = os.path.join(RUNTIME_VARS.TMP, "injection")
|
|
||||||
self._create_roster(
|
|
||||||
pre_flight_script_args="foobar; echo injected > {}".format(injected_file)
|
|
||||||
)
|
|
||||||
# make sure we previously ran a command so the thin dir exists
|
|
||||||
self.run_function("test.ping", wipe=False)
|
|
||||||
assert not os.path.exists(self.test_script)
|
|
||||||
assert not os.path.isfile(injected_file)
|
|
||||||
|
|
||||||
assert self.run_function(
|
|
||||||
"test.ping", ssh_opts="--pre-flight", roster_file=self.roster, wipe=False
|
|
||||||
)
|
|
||||||
|
|
||||||
assert not os.path.isfile(
|
|
||||||
injected_file
|
|
||||||
), "File injection suceeded. This shouldn't happend"
|
|
||||||
|
|
||||||
@pytest.mark.slow_test
|
|
||||||
def test_ssh_run_pre_flight_failure(self):
|
|
||||||
"""
|
|
||||||
test ssh_pre_flight when there is a failure
|
|
||||||
in the script.
|
|
||||||
"""
|
|
||||||
self._create_roster()
|
|
||||||
with salt.utils.files.fopen(self.data["ssh_pre_flight"], "w") as fp_:
|
|
||||||
fp_.write("exit 2")
|
|
||||||
|
|
||||||
ret = self.run_function(
|
|
||||||
"test.ping", ssh_opts="--pre-flight", roster_file=self.roster, wipe=False
|
|
||||||
)
|
|
||||||
assert ret["retcode"] == 2
|
|
||||||
|
|
||||||
def tearDown(self):
|
|
||||||
"""
|
|
||||||
make sure to clean up any old ssh directories
|
|
||||||
"""
|
|
||||||
files = [
|
|
||||||
self.roster,
|
|
||||||
self.data["ssh_pre_flight"],
|
|
||||||
self.test_script,
|
|
||||||
os.path.join(RUNTIME_VARS.TMP, "injection"),
|
|
||||||
]
|
|
||||||
for fp_ in files:
|
|
||||||
if os.path.exists(fp_):
|
|
||||||
os.remove(fp_)
|
|
315
tests/pytests/integration/ssh/test_pre_flight.py
Normal file
315
tests/pytests/integration/ssh/test_pre_flight.py
Normal file
|
@ -0,0 +1,315 @@
|
||||||
|
"""
|
||||||
|
Test for ssh_pre_flight roster option
|
||||||
|
"""
|
||||||
|
|
||||||
|
try:
|
||||||
|
import grp
|
||||||
|
import pwd
|
||||||
|
except ImportError:
|
||||||
|
# windows stacktraces on import of these modules
|
||||||
|
pass
|
||||||
|
import os
|
||||||
|
import pathlib
|
||||||
|
import shutil
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
import yaml
|
||||||
|
from saltfactories.utils import random_string
|
||||||
|
|
||||||
|
import salt.utils.files
|
||||||
|
|
||||||
|
pytestmark = pytest.mark.skip_on_windows(reason="Salt-ssh not available on Windows")
|
||||||
|
|
||||||
|
|
||||||
|
def _custom_roster(roster_file, roster_data):
|
||||||
|
with salt.utils.files.fopen(roster_file, "r") as fp:
|
||||||
|
data = salt.utils.yaml.safe_load(fp)
|
||||||
|
for key, item in roster_data.items():
|
||||||
|
data["localhost"][key] = item
|
||||||
|
with salt.utils.files.fopen(roster_file, "w") as fp:
|
||||||
|
yaml.safe_dump(data, fp)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def _create_roster(salt_ssh_roster_file, tmp_path):
|
||||||
|
ret = {}
|
||||||
|
ret["roster"] = salt_ssh_roster_file
|
||||||
|
ret["data"] = {"ssh_pre_flight": str(tmp_path / "ssh_pre_flight.sh")}
|
||||||
|
ret["test_script"] = str(tmp_path / "test-pre-flight-script-worked.txt")
|
||||||
|
ret["thin_dir"] = tmp_path / "thin_dir"
|
||||||
|
|
||||||
|
with salt.utils.files.fopen(salt_ssh_roster_file, "r") as fp:
|
||||||
|
data = salt.utils.yaml.safe_load(fp)
|
||||||
|
pre_flight_script = ret["data"]["ssh_pre_flight"]
|
||||||
|
data["localhost"]["ssh_pre_flight"] = pre_flight_script
|
||||||
|
data["localhost"]["thin_dir"] = str(ret["thin_dir"])
|
||||||
|
with salt.utils.files.fopen(salt_ssh_roster_file, "w") as fp:
|
||||||
|
yaml.safe_dump(data, fp)
|
||||||
|
|
||||||
|
with salt.utils.files.fopen(pre_flight_script, "w") as fp:
|
||||||
|
fp.write("touch {}".format(ret["test_script"]))
|
||||||
|
|
||||||
|
yield ret
|
||||||
|
if ret["thin_dir"].exists():
|
||||||
|
shutil.rmtree(ret["thin_dir"])
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.slow_test
|
||||||
|
def test_ssh_pre_flight(salt_ssh_cli, caplog, _create_roster):
|
||||||
|
"""
|
||||||
|
test ssh when ssh_pre_flight is set
|
||||||
|
ensure the script runs successfully
|
||||||
|
"""
|
||||||
|
ret = salt_ssh_cli.run("test.ping")
|
||||||
|
assert ret.returncode == 0
|
||||||
|
|
||||||
|
assert pathlib.Path(_create_roster["test_script"]).exists()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.slow_test
|
||||||
|
def test_ssh_run_pre_flight(salt_ssh_cli, _create_roster):
|
||||||
|
"""
|
||||||
|
test ssh when --pre-flight is passed to salt-ssh
|
||||||
|
to ensure the script runs successfully
|
||||||
|
"""
|
||||||
|
# make sure we previously ran a command so the thin dir exists
|
||||||
|
ret = salt_ssh_cli.run("test.ping")
|
||||||
|
assert pathlib.Path(_create_roster["test_script"]).exists()
|
||||||
|
|
||||||
|
# Now remeove the script to ensure pre_flight doesn't run
|
||||||
|
# without --pre-flight
|
||||||
|
pathlib.Path(_create_roster["test_script"]).unlink()
|
||||||
|
|
||||||
|
assert salt_ssh_cli.run("test.ping").returncode == 0
|
||||||
|
assert not pathlib.Path(_create_roster["test_script"]).exists()
|
||||||
|
|
||||||
|
# Now ensure
|
||||||
|
ret = salt_ssh_cli.run(
|
||||||
|
"test.ping",
|
||||||
|
"--pre-flight",
|
||||||
|
)
|
||||||
|
assert ret.returncode == 0
|
||||||
|
assert pathlib.Path(_create_roster["test_script"]).exists()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.slow_test
|
||||||
|
def test_ssh_run_pre_flight_args(salt_ssh_cli, _create_roster):
|
||||||
|
"""
|
||||||
|
test ssh when --pre-flight is passed to salt-ssh
|
||||||
|
to ensure the script runs successfully passing some args
|
||||||
|
"""
|
||||||
|
_custom_roster(salt_ssh_cli.roster_file, {"ssh_pre_flight_args": "foobar test"})
|
||||||
|
# Create pre_flight script that accepts args
|
||||||
|
test_script = _create_roster["test_script"]
|
||||||
|
test_script_1 = pathlib.Path(test_script + "-foobar")
|
||||||
|
test_script_2 = pathlib.Path(test_script + "-test")
|
||||||
|
with salt.utils.files.fopen(_create_roster["data"]["ssh_pre_flight"], "w") as fp:
|
||||||
|
fp.write(
|
||||||
|
f"""
|
||||||
|
touch {str(test_script)}-$1
|
||||||
|
touch {str(test_script)}-$2
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
ret = salt_ssh_cli.run("test.ping")
|
||||||
|
assert ret.returncode == 0
|
||||||
|
assert test_script_1.exists()
|
||||||
|
assert test_script_2.exists()
|
||||||
|
pathlib.Path(test_script_1).unlink()
|
||||||
|
pathlib.Path(test_script_2).unlink()
|
||||||
|
|
||||||
|
ret = salt_ssh_cli.run("test.ping")
|
||||||
|
assert ret.returncode == 0
|
||||||
|
assert not test_script_1.exists()
|
||||||
|
assert not test_script_2.exists()
|
||||||
|
|
||||||
|
ret = salt_ssh_cli.run(
|
||||||
|
"test.ping",
|
||||||
|
"--pre-flight",
|
||||||
|
)
|
||||||
|
assert ret.returncode == 0
|
||||||
|
assert test_script_1.exists()
|
||||||
|
assert test_script_2.exists()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.slow_test
|
||||||
|
def test_ssh_run_pre_flight_args_prevent_injection(
|
||||||
|
salt_ssh_cli, _create_roster, tmp_path
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
test ssh when --pre-flight is passed to salt-ssh
|
||||||
|
and evil arguments are used in order to produce shell injection
|
||||||
|
"""
|
||||||
|
injected_file = tmp_path / "injection"
|
||||||
|
_custom_roster(
|
||||||
|
salt_ssh_cli.roster_file,
|
||||||
|
{"ssh_pre_flight_args": f"foobar; echo injected > {str(injected_file)}"},
|
||||||
|
)
|
||||||
|
# Create pre_flight script that accepts args
|
||||||
|
test_script = _create_roster["test_script"]
|
||||||
|
test_script_1 = pathlib.Path(test_script + "-echo")
|
||||||
|
test_script_2 = pathlib.Path(test_script + "-foobar;")
|
||||||
|
with salt.utils.files.fopen(_create_roster["data"]["ssh_pre_flight"], "w") as fp:
|
||||||
|
fp.write(
|
||||||
|
f"""
|
||||||
|
touch {str(test_script)}-$1
|
||||||
|
touch {str(test_script)}-$2
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
# make sure we previously ran a command so the thin dir exists
|
||||||
|
ret = salt_ssh_cli.run("test.ping")
|
||||||
|
assert ret.returncode == 0
|
||||||
|
assert test_script_1.exists()
|
||||||
|
assert test_script_2.exists()
|
||||||
|
test_script_1.unlink()
|
||||||
|
test_script_2.unlink()
|
||||||
|
assert not injected_file.is_file()
|
||||||
|
|
||||||
|
ret = salt_ssh_cli.run(
|
||||||
|
"test.ping",
|
||||||
|
"--pre-flight",
|
||||||
|
)
|
||||||
|
assert ret.returncode == 0
|
||||||
|
|
||||||
|
assert test_script_1.exists()
|
||||||
|
assert test_script_2.exists()
|
||||||
|
assert not pathlib.Path(
|
||||||
|
injected_file
|
||||||
|
).is_file(), "File injection suceeded. This shouldn't happend"
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.flaky(max_runs=4)
|
||||||
|
@pytest.mark.slow_test
|
||||||
|
def test_ssh_run_pre_flight_failure(salt_ssh_cli, _create_roster):
|
||||||
|
"""
|
||||||
|
test ssh_pre_flight when there is a failure
|
||||||
|
in the script.
|
||||||
|
"""
|
||||||
|
with salt.utils.files.fopen(_create_roster["data"]["ssh_pre_flight"], "w") as fp_:
|
||||||
|
fp_.write("exit 2")
|
||||||
|
|
||||||
|
ret = salt_ssh_cli.run(
|
||||||
|
"test.ping",
|
||||||
|
"--pre-flight",
|
||||||
|
)
|
||||||
|
assert ret.data["retcode"] == 2
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def account():
|
||||||
|
username = random_string("test-account-", uppercase=False)
|
||||||
|
with pytest.helpers.create_account(username=username) as account:
|
||||||
|
yield account
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.slow_test
|
||||||
|
def test_ssh_pre_flight_script(salt_ssh_cli, caplog, _create_roster, tmp_path, account):
|
||||||
|
"""
|
||||||
|
Test to ensure user cannot create and run a script
|
||||||
|
with the expected pre_flight script path on target.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
script = pathlib.Path.home() / "hacked"
|
||||||
|
tmp_preflight = pathlib.Path("/tmp", "ssh_pre_flight.sh")
|
||||||
|
tmp_preflight.write_text(f"touch {script}")
|
||||||
|
os.chown(tmp_preflight, account.info.uid, account.info.gid)
|
||||||
|
ret = salt_ssh_cli.run("test.ping")
|
||||||
|
assert not script.is_file()
|
||||||
|
assert ret.returncode == 0
|
||||||
|
assert ret.stdout == '{\n"localhost": true\n}\n'
|
||||||
|
finally:
|
||||||
|
for _file in [script, tmp_preflight]:
|
||||||
|
if _file.is_file():
|
||||||
|
_file.unlink()
|
||||||
|
|
||||||
|
|
||||||
|
def demote(user_uid, user_gid):
|
||||||
|
def result():
|
||||||
|
# os.setgid does not remove group membership, so we remove them here so they are REALLY non-root
|
||||||
|
os.setgroups([])
|
||||||
|
os.setgid(user_gid)
|
||||||
|
os.setuid(user_uid)
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.slow_test
|
||||||
|
def test_ssh_pre_flight_perms(salt_ssh_cli, caplog, _create_roster, account):
|
||||||
|
"""
|
||||||
|
Test to ensure standard user cannot run pre flight script
|
||||||
|
on target when user sets wrong permissions (777) on
|
||||||
|
ssh_pre_flight script.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
script = pathlib.Path("/tmp", "itworked")
|
||||||
|
preflight = pathlib.Path("/ssh_pre_flight.sh")
|
||||||
|
preflight.write_text(f"touch {str(script)}")
|
||||||
|
tmp_preflight = pathlib.Path("/tmp", preflight.name)
|
||||||
|
|
||||||
|
_custom_roster(salt_ssh_cli.roster_file, {"ssh_pre_flight": str(preflight)})
|
||||||
|
preflight.chmod(0o0777)
|
||||||
|
run_script = pathlib.Path("/run_script")
|
||||||
|
run_script.write_text(
|
||||||
|
f"""
|
||||||
|
x=1
|
||||||
|
while [ $x -le 200000 ]; do
|
||||||
|
SCRIPT=`bash {str(tmp_preflight)} 2> /dev/null; echo $?`
|
||||||
|
if [ ${{SCRIPT}} == 0 ]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
x=$(( $x + 1 ))
|
||||||
|
done
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
run_script.chmod(0o0777)
|
||||||
|
# pylint: disable=W1509
|
||||||
|
ret = subprocess.Popen(
|
||||||
|
["sh", f"{run_script}"],
|
||||||
|
preexec_fn=demote(account.info.uid, account.info.gid),
|
||||||
|
stdout=None,
|
||||||
|
stderr=None,
|
||||||
|
stdin=None,
|
||||||
|
universal_newlines=True,
|
||||||
|
)
|
||||||
|
# pylint: enable=W1509
|
||||||
|
ret = salt_ssh_cli.run("test.ping")
|
||||||
|
assert ret.returncode == 0
|
||||||
|
|
||||||
|
# Lets make sure a different user other than root
|
||||||
|
# Didn't run the script
|
||||||
|
assert os.stat(script).st_uid != account.info.uid
|
||||||
|
assert script.is_file()
|
||||||
|
finally:
|
||||||
|
for _file in [script, preflight, tmp_preflight, run_script]:
|
||||||
|
if _file.is_file():
|
||||||
|
_file.unlink()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.slow_test
|
||||||
|
def test_ssh_run_pre_flight_target_file_perms(salt_ssh_cli, _create_roster, tmp_path):
|
||||||
|
"""
|
||||||
|
test ssh_pre_flight to ensure the target pre flight script
|
||||||
|
has the correct perms
|
||||||
|
"""
|
||||||
|
perms_file = tmp_path / "perms"
|
||||||
|
with salt.utils.files.fopen(_create_roster["data"]["ssh_pre_flight"], "w") as fp_:
|
||||||
|
fp_.write(
|
||||||
|
f"""
|
||||||
|
SCRIPT_NAME=$0
|
||||||
|
stat -L -c "%a %G %U" $SCRIPT_NAME > {perms_file}
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
ret = salt_ssh_cli.run(
|
||||||
|
"test.ping",
|
||||||
|
"--pre-flight",
|
||||||
|
)
|
||||||
|
assert ret.returncode == 0
|
||||||
|
with salt.utils.files.fopen(perms_file) as fp:
|
||||||
|
data = fp.read()
|
||||||
|
assert data.split()[0] == "600"
|
||||||
|
uid = os.getuid()
|
||||||
|
gid = os.getgid()
|
||||||
|
assert data.split()[1] == grp.getgrgid(gid).gr_name
|
||||||
|
assert data.split()[2] == pwd.getpwuid(uid).pw_name
|
|
@ -1,6 +1,5 @@
|
||||||
import os
|
import logging
|
||||||
import re
|
import re
|
||||||
import tempfile
|
|
||||||
from textwrap import dedent
|
from textwrap import dedent
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
@ -16,6 +15,8 @@ import salt.utils.yaml
|
||||||
from salt.client import ssh
|
from salt.client import ssh
|
||||||
from tests.support.mock import MagicMock, call, patch
|
from tests.support.mock import MagicMock, call, patch
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def opts(tmp_path):
|
def opts(tmp_path):
|
||||||
|
@ -59,7 +60,7 @@ def test_single_opts(opts, target):
|
||||||
fsclient=None,
|
fsclient=None,
|
||||||
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
||||||
mine=False,
|
mine=False,
|
||||||
**target
|
**target,
|
||||||
)
|
)
|
||||||
|
|
||||||
assert single.shell._ssh_opts() == ""
|
assert single.shell._ssh_opts() == ""
|
||||||
|
@ -87,7 +88,7 @@ def test_run_with_pre_flight(opts, target, tmp_path):
|
||||||
fsclient=None,
|
fsclient=None,
|
||||||
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
||||||
mine=False,
|
mine=False,
|
||||||
**target
|
**target,
|
||||||
)
|
)
|
||||||
|
|
||||||
cmd_ret = ("Success", "", 0)
|
cmd_ret = ("Success", "", 0)
|
||||||
|
@ -122,7 +123,7 @@ def test_run_with_pre_flight_with_args(opts, target, tmp_path):
|
||||||
fsclient=None,
|
fsclient=None,
|
||||||
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
||||||
mine=False,
|
mine=False,
|
||||||
**target
|
**target,
|
||||||
)
|
)
|
||||||
|
|
||||||
cmd_ret = ("Success", "foobar", 0)
|
cmd_ret = ("Success", "foobar", 0)
|
||||||
|
@ -156,7 +157,7 @@ def test_run_with_pre_flight_stderr(opts, target, tmp_path):
|
||||||
fsclient=None,
|
fsclient=None,
|
||||||
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
||||||
mine=False,
|
mine=False,
|
||||||
**target
|
**target,
|
||||||
)
|
)
|
||||||
|
|
||||||
cmd_ret = ("", "Error running script", 1)
|
cmd_ret = ("", "Error running script", 1)
|
||||||
|
@ -190,7 +191,7 @@ def test_run_with_pre_flight_script_doesnot_exist(opts, target, tmp_path):
|
||||||
fsclient=None,
|
fsclient=None,
|
||||||
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
||||||
mine=False,
|
mine=False,
|
||||||
**target
|
**target,
|
||||||
)
|
)
|
||||||
|
|
||||||
cmd_ret = ("Success", "", 0)
|
cmd_ret = ("Success", "", 0)
|
||||||
|
@ -224,7 +225,7 @@ def test_run_with_pre_flight_thin_dir_exists(opts, target, tmp_path):
|
||||||
fsclient=None,
|
fsclient=None,
|
||||||
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
||||||
mine=False,
|
mine=False,
|
||||||
**target
|
**target,
|
||||||
)
|
)
|
||||||
|
|
||||||
cmd_ret = ("", "", 0)
|
cmd_ret = ("", "", 0)
|
||||||
|
@ -242,6 +243,39 @@ def test_run_with_pre_flight_thin_dir_exists(opts, target, tmp_path):
|
||||||
assert ret == cmd_ret
|
assert ret == cmd_ret
|
||||||
|
|
||||||
|
|
||||||
|
def test_run_ssh_pre_flight(opts, target, tmp_path):
|
||||||
|
"""
|
||||||
|
test Single.run_ssh_pre_flight function
|
||||||
|
"""
|
||||||
|
target["ssh_pre_flight"] = str(tmp_path / "script.sh")
|
||||||
|
single = ssh.Single(
|
||||||
|
opts,
|
||||||
|
opts["argv"],
|
||||||
|
"localhost",
|
||||||
|
mods={},
|
||||||
|
fsclient=None,
|
||||||
|
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
||||||
|
mine=False,
|
||||||
|
**target,
|
||||||
|
)
|
||||||
|
|
||||||
|
cmd_ret = ("Success", "", 0)
|
||||||
|
mock_flight = MagicMock(return_value=cmd_ret)
|
||||||
|
mock_cmd = MagicMock(return_value=cmd_ret)
|
||||||
|
patch_flight = patch("salt.client.ssh.Single.run_ssh_pre_flight", mock_flight)
|
||||||
|
patch_cmd = patch("salt.client.ssh.Single.cmd_block", mock_cmd)
|
||||||
|
patch_exec_cmd = patch(
|
||||||
|
"salt.client.ssh.shell.Shell.exec_cmd", return_value=("", "", 1)
|
||||||
|
)
|
||||||
|
patch_os = patch("os.path.exists", side_effect=[True])
|
||||||
|
|
||||||
|
with patch_os, patch_flight, patch_cmd, patch_exec_cmd:
|
||||||
|
ret = single.run()
|
||||||
|
mock_cmd.assert_called()
|
||||||
|
mock_flight.assert_called()
|
||||||
|
assert ret == cmd_ret
|
||||||
|
|
||||||
|
|
||||||
def test_execute_script(opts, target, tmp_path):
|
def test_execute_script(opts, target, tmp_path):
|
||||||
"""
|
"""
|
||||||
test Single.execute_script()
|
test Single.execute_script()
|
||||||
|
@ -255,7 +289,7 @@ def test_execute_script(opts, target, tmp_path):
|
||||||
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
||||||
mine=False,
|
mine=False,
|
||||||
winrm=False,
|
winrm=False,
|
||||||
**target
|
**target,
|
||||||
)
|
)
|
||||||
|
|
||||||
exp_ret = ("Success", "", 0)
|
exp_ret = ("Success", "", 0)
|
||||||
|
@ -273,7 +307,7 @@ def test_execute_script(opts, target, tmp_path):
|
||||||
] == mock_cmd.call_args_list
|
] == mock_cmd.call_args_list
|
||||||
|
|
||||||
|
|
||||||
def test_shim_cmd(opts, target):
|
def test_shim_cmd(opts, target, tmp_path):
|
||||||
"""
|
"""
|
||||||
test Single.shim_cmd()
|
test Single.shim_cmd()
|
||||||
"""
|
"""
|
||||||
|
@ -287,7 +321,7 @@ def test_shim_cmd(opts, target):
|
||||||
mine=False,
|
mine=False,
|
||||||
winrm=False,
|
winrm=False,
|
||||||
tty=True,
|
tty=True,
|
||||||
**target
|
**target,
|
||||||
)
|
)
|
||||||
|
|
||||||
exp_ret = ("Success", "", 0)
|
exp_ret = ("Success", "", 0)
|
||||||
|
@ -295,21 +329,24 @@ def test_shim_cmd(opts, target):
|
||||||
patch_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_cmd)
|
patch_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_cmd)
|
||||||
patch_send = patch("salt.client.ssh.shell.Shell.send", return_value=("", "", 0))
|
patch_send = patch("salt.client.ssh.shell.Shell.send", return_value=("", "", 0))
|
||||||
patch_rand = patch("os.urandom", return_value=b"5\xd9l\xca\xc2\xff")
|
patch_rand = patch("os.urandom", return_value=b"5\xd9l\xca\xc2\xff")
|
||||||
|
tmp_file = tmp_path / "tmp_file"
|
||||||
|
mock_tmp = MagicMock()
|
||||||
|
patch_tmp = patch("tempfile.NamedTemporaryFile", mock_tmp)
|
||||||
|
mock_tmp.return_value.__enter__.return_value.name = tmp_file
|
||||||
|
|
||||||
with patch_cmd, patch_rand, patch_send:
|
with patch_cmd, patch_tmp, patch_send:
|
||||||
ret = single.shim_cmd(cmd_str="echo test")
|
ret = single.shim_cmd(cmd_str="echo test")
|
||||||
assert ret == exp_ret
|
assert ret == exp_ret
|
||||||
assert [
|
assert [
|
||||||
call("/bin/sh '.35d96ccac2ff.py'"),
|
call(f"/bin/sh '.{tmp_file.name}'"),
|
||||||
call("rm '.35d96ccac2ff.py'"),
|
call(f"rm '.{tmp_file.name}'"),
|
||||||
] == mock_cmd.call_args_list
|
] == mock_cmd.call_args_list
|
||||||
|
|
||||||
|
|
||||||
def test_run_ssh_pre_flight(opts, target, tmp_path):
|
def test_shim_cmd_copy_fails(opts, target, caplog):
|
||||||
"""
|
"""
|
||||||
test Single.run_ssh_pre_flight
|
test Single.shim_cmd() when copying the file fails
|
||||||
"""
|
"""
|
||||||
target["ssh_pre_flight"] = str(tmp_path / "script.sh")
|
|
||||||
single = ssh.Single(
|
single = ssh.Single(
|
||||||
opts,
|
opts,
|
||||||
opts["argv"],
|
opts["argv"],
|
||||||
|
@ -320,24 +357,202 @@ def test_run_ssh_pre_flight(opts, target, tmp_path):
|
||||||
mine=False,
|
mine=False,
|
||||||
winrm=False,
|
winrm=False,
|
||||||
tty=True,
|
tty=True,
|
||||||
**target
|
**target,
|
||||||
)
|
)
|
||||||
|
|
||||||
exp_ret = ("Success", "", 0)
|
ret_cmd = ("Success", "", 0)
|
||||||
mock_cmd = MagicMock(return_value=exp_ret)
|
mock_cmd = MagicMock(return_value=ret_cmd)
|
||||||
patch_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_cmd)
|
patch_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_cmd)
|
||||||
patch_send = patch("salt.client.ssh.shell.Shell.send", return_value=exp_ret)
|
ret_send = ("", "General error in file copy", 1)
|
||||||
exp_tmp = os.path.join(
|
patch_send = patch("salt.client.ssh.shell.Shell.send", return_value=ret_send)
|
||||||
tempfile.gettempdir(), os.path.basename(target["ssh_pre_flight"])
|
patch_rand = patch("os.urandom", return_value=b"5\xd9l\xca\xc2\xff")
|
||||||
)
|
|
||||||
|
|
||||||
with patch_cmd, patch_send:
|
with patch_cmd, patch_rand, patch_send:
|
||||||
|
ret = single.shim_cmd(cmd_str="echo test")
|
||||||
|
assert ret == ret_send
|
||||||
|
assert "Could not copy the shim script to target" in caplog.text
|
||||||
|
mock_cmd.assert_not_called()
|
||||||
|
|
||||||
|
|
||||||
|
def test_run_ssh_pre_flight_no_connect(opts, target, tmp_path, caplog):
|
||||||
|
"""
|
||||||
|
test Single.run_ssh_pre_flight when you
|
||||||
|
cannot connect to the target
|
||||||
|
"""
|
||||||
|
pre_flight = tmp_path / "script.sh"
|
||||||
|
pre_flight.write_text("")
|
||||||
|
target["ssh_pre_flight"] = str(pre_flight)
|
||||||
|
single = ssh.Single(
|
||||||
|
opts,
|
||||||
|
opts["argv"],
|
||||||
|
"localhost",
|
||||||
|
mods={},
|
||||||
|
fsclient=None,
|
||||||
|
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
||||||
|
mine=False,
|
||||||
|
winrm=False,
|
||||||
|
tty=True,
|
||||||
|
**target,
|
||||||
|
)
|
||||||
|
mock_exec_cmd = MagicMock(return_value=("", "", 1))
|
||||||
|
patch_exec_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_exec_cmd)
|
||||||
|
tmp_file = tmp_path / "tmp_file"
|
||||||
|
mock_tmp = MagicMock()
|
||||||
|
patch_tmp = patch("tempfile.NamedTemporaryFile", mock_tmp)
|
||||||
|
mock_tmp.return_value.__enter__.return_value.name = tmp_file
|
||||||
|
ret_send = (
|
||||||
|
"",
|
||||||
|
"ssh: connect to host 192.168.1.186 port 22: No route to host\nscp: Connection closed\n",
|
||||||
|
255,
|
||||||
|
)
|
||||||
|
send_mock = MagicMock(return_value=ret_send)
|
||||||
|
patch_send = patch("salt.client.ssh.shell.Shell.send", send_mock)
|
||||||
|
|
||||||
|
with caplog.at_level(logging.TRACE):
|
||||||
|
with patch_send, patch_exec_cmd, patch_tmp:
|
||||||
|
ret = single.run_ssh_pre_flight()
|
||||||
|
assert "Copying the pre flight script" in caplog.text
|
||||||
|
assert "Could not copy the pre flight script to target" in caplog.text
|
||||||
|
assert ret == ret_send
|
||||||
|
assert send_mock.call_args_list[0][0][0] == tmp_file
|
||||||
|
target_script = send_mock.call_args_list[0][0][1]
|
||||||
|
assert re.search(r".[a-z0-9]+", target_script)
|
||||||
|
mock_exec_cmd.assert_not_called()
|
||||||
|
|
||||||
|
|
||||||
|
def test_run_ssh_pre_flight_permission_denied(opts, target, tmp_path):
|
||||||
|
"""
|
||||||
|
test Single.run_ssh_pre_flight when you
|
||||||
|
cannot copy script to the target due to
|
||||||
|
a permission denied error
|
||||||
|
"""
|
||||||
|
pre_flight = tmp_path / "script.sh"
|
||||||
|
pre_flight.write_text("")
|
||||||
|
target["ssh_pre_flight"] = str(pre_flight)
|
||||||
|
single = ssh.Single(
|
||||||
|
opts,
|
||||||
|
opts["argv"],
|
||||||
|
"localhost",
|
||||||
|
mods={},
|
||||||
|
fsclient=None,
|
||||||
|
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
||||||
|
mine=False,
|
||||||
|
winrm=False,
|
||||||
|
tty=True,
|
||||||
|
**target,
|
||||||
|
)
|
||||||
|
mock_exec_cmd = MagicMock(return_value=("", "", 1))
|
||||||
|
patch_exec_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_exec_cmd)
|
||||||
|
tmp_file = tmp_path / "tmp_file"
|
||||||
|
mock_tmp = MagicMock()
|
||||||
|
patch_tmp = patch("tempfile.NamedTemporaryFile", mock_tmp)
|
||||||
|
mock_tmp.return_value.__enter__.return_value.name = tmp_file
|
||||||
|
ret_send = (
|
||||||
|
"",
|
||||||
|
'scp: dest open "/tmp/preflight.sh": Permission denied\nscp: failed to upload file /etc/salt/preflight.sh to /tmp/preflight.sh\n',
|
||||||
|
255,
|
||||||
|
)
|
||||||
|
send_mock = MagicMock(return_value=ret_send)
|
||||||
|
patch_send = patch("salt.client.ssh.shell.Shell.send", send_mock)
|
||||||
|
|
||||||
|
with patch_send, patch_exec_cmd, patch_tmp:
|
||||||
ret = single.run_ssh_pre_flight()
|
ret = single.run_ssh_pre_flight()
|
||||||
assert ret == exp_ret
|
assert ret == ret_send
|
||||||
assert [
|
assert send_mock.call_args_list[0][0][0] == tmp_file
|
||||||
call("/bin/sh '{}'".format(exp_tmp)),
|
target_script = send_mock.call_args_list[0][0][1]
|
||||||
call("rm '{}'".format(exp_tmp)),
|
assert re.search(r".[a-z0-9]+", target_script)
|
||||||
] == mock_cmd.call_args_list
|
mock_exec_cmd.assert_not_called()
|
||||||
|
|
||||||
|
|
||||||
|
def test_run_ssh_pre_flight_connect(opts, target, tmp_path, caplog):
|
||||||
|
"""
|
||||||
|
test Single.run_ssh_pre_flight when you
|
||||||
|
can connect to the target
|
||||||
|
"""
|
||||||
|
pre_flight = tmp_path / "script.sh"
|
||||||
|
pre_flight.write_text("")
|
||||||
|
target["ssh_pre_flight"] = str(pre_flight)
|
||||||
|
single = ssh.Single(
|
||||||
|
opts,
|
||||||
|
opts["argv"],
|
||||||
|
"localhost",
|
||||||
|
mods={},
|
||||||
|
fsclient=None,
|
||||||
|
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
||||||
|
mine=False,
|
||||||
|
winrm=False,
|
||||||
|
tty=True,
|
||||||
|
**target,
|
||||||
|
)
|
||||||
|
ret_exec_cmd = ("", "", 1)
|
||||||
|
mock_exec_cmd = MagicMock(return_value=ret_exec_cmd)
|
||||||
|
patch_exec_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_exec_cmd)
|
||||||
|
tmp_file = tmp_path / "tmp_file"
|
||||||
|
mock_tmp = MagicMock()
|
||||||
|
patch_tmp = patch("tempfile.NamedTemporaryFile", mock_tmp)
|
||||||
|
mock_tmp.return_value.__enter__.return_value.name = tmp_file
|
||||||
|
ret_send = (
|
||||||
|
"",
|
||||||
|
"\rroot@192.168.1.187's password: \n\rpreflight.sh 0% 0 0.0KB/s --:-- ETA\rpreflight.sh 100% 20 2.7KB/s 00:00 \n",
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
send_mock = MagicMock(return_value=ret_send)
|
||||||
|
patch_send = patch("salt.client.ssh.shell.Shell.send", send_mock)
|
||||||
|
|
||||||
|
with caplog.at_level(logging.TRACE):
|
||||||
|
with patch_send, patch_exec_cmd, patch_tmp:
|
||||||
|
ret = single.run_ssh_pre_flight()
|
||||||
|
|
||||||
|
assert "Executing the pre flight script on target" in caplog.text
|
||||||
|
assert ret == ret_exec_cmd
|
||||||
|
assert send_mock.call_args_list[0][0][0] == tmp_file
|
||||||
|
target_script = send_mock.call_args_list[0][0][1]
|
||||||
|
assert re.search(r".[a-z0-9]+", target_script)
|
||||||
|
mock_exec_cmd.assert_called()
|
||||||
|
|
||||||
|
|
||||||
|
def test_run_ssh_pre_flight_shutil_fails(opts, target, tmp_path):
|
||||||
|
"""
|
||||||
|
test Single.run_ssh_pre_flight when cannot
|
||||||
|
copyfile with shutil
|
||||||
|
"""
|
||||||
|
pre_flight = tmp_path / "script.sh"
|
||||||
|
pre_flight.write_text("")
|
||||||
|
target["ssh_pre_flight"] = str(pre_flight)
|
||||||
|
single = ssh.Single(
|
||||||
|
opts,
|
||||||
|
opts["argv"],
|
||||||
|
"localhost",
|
||||||
|
mods={},
|
||||||
|
fsclient=None,
|
||||||
|
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
||||||
|
mine=False,
|
||||||
|
winrm=False,
|
||||||
|
tty=True,
|
||||||
|
**target,
|
||||||
|
)
|
||||||
|
ret_exec_cmd = ("", "", 1)
|
||||||
|
mock_exec_cmd = MagicMock(return_value=ret_exec_cmd)
|
||||||
|
patch_exec_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_exec_cmd)
|
||||||
|
tmp_file = tmp_path / "tmp_file"
|
||||||
|
mock_tmp = MagicMock()
|
||||||
|
patch_tmp = patch("tempfile.NamedTemporaryFile", mock_tmp)
|
||||||
|
mock_tmp.return_value.__enter__.return_value.name = tmp_file
|
||||||
|
send_mock = MagicMock()
|
||||||
|
mock_shutil = MagicMock(side_effect=IOError("Permission Denied"))
|
||||||
|
patch_shutil = patch("shutil.copyfile", mock_shutil)
|
||||||
|
patch_send = patch("salt.client.ssh.shell.Shell.send", send_mock)
|
||||||
|
|
||||||
|
with patch_send, patch_exec_cmd, patch_tmp, patch_shutil:
|
||||||
|
ret = single.run_ssh_pre_flight()
|
||||||
|
|
||||||
|
assert ret == (
|
||||||
|
"",
|
||||||
|
"Could not copy pre flight script to temporary path",
|
||||||
|
1,
|
||||||
|
)
|
||||||
|
mock_exec_cmd.assert_not_called()
|
||||||
|
send_mock.assert_not_called()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.skip_on_windows(reason="SSH_PY_SHIM not set on windows")
|
@pytest.mark.skip_on_windows(reason="SSH_PY_SHIM not set on windows")
|
||||||
|
@ -355,7 +570,7 @@ def test_cmd_run_set_path(opts, target):
|
||||||
fsclient=None,
|
fsclient=None,
|
||||||
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
||||||
mine=False,
|
mine=False,
|
||||||
**target
|
**target,
|
||||||
)
|
)
|
||||||
|
|
||||||
ret = single._cmd_str()
|
ret = single._cmd_str()
|
||||||
|
@ -376,7 +591,7 @@ def test_cmd_run_not_set_path(opts, target):
|
||||||
fsclient=None,
|
fsclient=None,
|
||||||
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
||||||
mine=False,
|
mine=False,
|
||||||
**target
|
**target,
|
||||||
)
|
)
|
||||||
|
|
||||||
ret = single._cmd_str()
|
ret = single._cmd_str()
|
||||||
|
@ -395,7 +610,7 @@ def test_cmd_block_python_version_error(opts, target):
|
||||||
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
||||||
mine=False,
|
mine=False,
|
||||||
winrm=False,
|
winrm=False,
|
||||||
**target
|
**target,
|
||||||
)
|
)
|
||||||
mock_shim = MagicMock(
|
mock_shim = MagicMock(
|
||||||
return_value=(("", "ERROR: Unable to locate appropriate python command\n", 10))
|
return_value=(("", "ERROR: Unable to locate appropriate python command\n", 10))
|
||||||
|
@ -434,7 +649,9 @@ def test_run_with_pre_flight_args(opts, target, test_opts, tmp_path):
|
||||||
and script successfully runs
|
and script successfully runs
|
||||||
"""
|
"""
|
||||||
opts["ssh_run_pre_flight"] = True
|
opts["ssh_run_pre_flight"] = True
|
||||||
target["ssh_pre_flight"] = str(tmp_path / "script.sh")
|
pre_flight_script = tmp_path / "script.sh"
|
||||||
|
pre_flight_script.write_text("")
|
||||||
|
target["ssh_pre_flight"] = str(pre_flight_script)
|
||||||
|
|
||||||
if test_opts[0] is not None:
|
if test_opts[0] is not None:
|
||||||
target["ssh_pre_flight_args"] = test_opts[0]
|
target["ssh_pre_flight_args"] = test_opts[0]
|
||||||
|
@ -448,7 +665,7 @@ def test_run_with_pre_flight_args(opts, target, test_opts, tmp_path):
|
||||||
fsclient=None,
|
fsclient=None,
|
||||||
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
thin=salt.utils.thin.thin_path(opts["cachedir"]),
|
||||||
mine=False,
|
mine=False,
|
||||||
**target
|
**target,
|
||||||
)
|
)
|
||||||
|
|
||||||
cmd_ret = ("Success", "", 0)
|
cmd_ret = ("Success", "", 0)
|
||||||
|
@ -456,14 +673,15 @@ def test_run_with_pre_flight_args(opts, target, test_opts, tmp_path):
|
||||||
mock_exec_cmd = MagicMock(return_value=("", "", 0))
|
mock_exec_cmd = MagicMock(return_value=("", "", 0))
|
||||||
patch_cmd = patch("salt.client.ssh.Single.cmd_block", mock_cmd)
|
patch_cmd = patch("salt.client.ssh.Single.cmd_block", mock_cmd)
|
||||||
patch_exec_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_exec_cmd)
|
patch_exec_cmd = patch("salt.client.ssh.shell.Shell.exec_cmd", mock_exec_cmd)
|
||||||
patch_shell_send = patch("salt.client.ssh.shell.Shell.send", return_value=None)
|
patch_shell_send = patch(
|
||||||
|
"salt.client.ssh.shell.Shell.send", return_value=("", "", 0)
|
||||||
|
)
|
||||||
patch_os = patch("os.path.exists", side_effect=[True])
|
patch_os = patch("os.path.exists", side_effect=[True])
|
||||||
|
|
||||||
with patch_os, patch_cmd, patch_exec_cmd, patch_shell_send:
|
with patch_os, patch_cmd, patch_exec_cmd, patch_shell_send:
|
||||||
ret = single.run()
|
single.run()
|
||||||
assert mock_exec_cmd.mock_calls[0].args[
|
script_args = mock_exec_cmd.mock_calls[0].args[0]
|
||||||
0
|
assert re.search(r"\/bin\/sh '.[a-z0-9]+", script_args)
|
||||||
] == "/bin/sh '/tmp/script.sh'{}".format(expected_args)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.slow_test
|
@pytest.mark.slow_test
|
||||||
|
|
|
@ -339,3 +339,113 @@ def test_extra_filerefs(tmp_path, opts):
|
||||||
with patch("salt.roster.get_roster_file", MagicMock(return_value=roster)):
|
with patch("salt.roster.get_roster_file", MagicMock(return_value=roster)):
|
||||||
ssh_obj = client._prep_ssh(**ssh_opts)
|
ssh_obj = client._prep_ssh(**ssh_opts)
|
||||||
assert ssh_obj.opts.get("extra_filerefs", None) == "salt://foobar"
|
assert ssh_obj.opts.get("extra_filerefs", None) == "salt://foobar"
|
||||||
|
|
||||||
|
|
||||||
|
def test_key_deploy_permission_denied_scp(tmp_path, opts):
|
||||||
|
"""
|
||||||
|
test "key_deploy" function when
|
||||||
|
permission denied authentication error
|
||||||
|
when attempting to use scp to copy file
|
||||||
|
to target
|
||||||
|
"""
|
||||||
|
host = "localhost"
|
||||||
|
passwd = "password"
|
||||||
|
usr = "ssh-usr"
|
||||||
|
opts["ssh_user"] = usr
|
||||||
|
opts["tgt"] = host
|
||||||
|
|
||||||
|
ssh_ret = {
|
||||||
|
host: {
|
||||||
|
"stdout": "\rroot@192.168.1.187's password: \n\rroot@192.168.1.187's password: \n\rroot@192.168.1.187's password: \n",
|
||||||
|
"stderr": "Permission denied, please try again.\nPermission denied, please try again.\nroot@192.168.1.187: Permission denied (publickey,gssapi-keyex,gssapi-with-micimport pudb; pu.dbassword).\nscp: Connection closed\n",
|
||||||
|
"retcode": 255,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
key_run_ret = {
|
||||||
|
"localhost": {
|
||||||
|
"jid": "20230922155652279959",
|
||||||
|
"return": "test",
|
||||||
|
"retcode": 0,
|
||||||
|
"id": "test",
|
||||||
|
"fun": "cmd.run",
|
||||||
|
"fun_args": ["echo test"],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
patch_roster_file = patch("salt.roster.get_roster_file", MagicMock(return_value=""))
|
||||||
|
with patch_roster_file:
|
||||||
|
client = ssh.SSH(opts)
|
||||||
|
patch_input = patch("builtins.input", side_effect=["y"])
|
||||||
|
patch_getpass = patch("getpass.getpass", return_value=["password"])
|
||||||
|
mock_key_run = MagicMock(return_value=key_run_ret)
|
||||||
|
patch_key_run = patch("salt.client.ssh.SSH._key_deploy_run", mock_key_run)
|
||||||
|
with patch_input, patch_getpass, patch_key_run:
|
||||||
|
ret = client.key_deploy(host, ssh_ret)
|
||||||
|
assert mock_key_run.call_args_list[0][0] == (
|
||||||
|
host,
|
||||||
|
{"passwd": [passwd], "host": host, "user": usr},
|
||||||
|
True,
|
||||||
|
)
|
||||||
|
assert ret == key_run_ret
|
||||||
|
assert mock_key_run.call_count == 1
|
||||||
|
|
||||||
|
|
||||||
|
def test_key_deploy_permission_denied_file_scp(tmp_path, opts):
|
||||||
|
"""
|
||||||
|
test "key_deploy" function when permission denied
|
||||||
|
due to not having access to copy the file to the target
|
||||||
|
We do not want to deploy the key, because this is not
|
||||||
|
an authentication to the target error.
|
||||||
|
"""
|
||||||
|
host = "localhost"
|
||||||
|
passwd = "password"
|
||||||
|
usr = "ssh-usr"
|
||||||
|
opts["ssh_user"] = usr
|
||||||
|
opts["tgt"] = host
|
||||||
|
|
||||||
|
mock_key_run = MagicMock(return_value=False)
|
||||||
|
patch_key_run = patch("salt.client.ssh.SSH._key_deploy_run", mock_key_run)
|
||||||
|
|
||||||
|
ssh_ret = {
|
||||||
|
"localhost": {
|
||||||
|
"stdout": "",
|
||||||
|
"stderr": 'scp: dest open "/tmp/preflight.sh": Permission denied\nscp: failed to upload file /etc/salt/preflight.sh to /tmp/preflight.sh\n',
|
||||||
|
"retcode": 1,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
patch_roster_file = patch("salt.roster.get_roster_file", MagicMock(return_value=""))
|
||||||
|
with patch_roster_file:
|
||||||
|
client = ssh.SSH(opts)
|
||||||
|
ret = client.key_deploy(host, ssh_ret)
|
||||||
|
assert ret == ssh_ret
|
||||||
|
assert mock_key_run.call_count == 0
|
||||||
|
|
||||||
|
|
||||||
|
def test_key_deploy_no_permission_denied(tmp_path, opts):
|
||||||
|
"""
|
||||||
|
test "key_deploy" function when no permission denied
|
||||||
|
is returned
|
||||||
|
"""
|
||||||
|
host = "localhost"
|
||||||
|
passwd = "password"
|
||||||
|
usr = "ssh-usr"
|
||||||
|
opts["ssh_user"] = usr
|
||||||
|
opts["tgt"] = host
|
||||||
|
|
||||||
|
mock_key_run = MagicMock(return_value=False)
|
||||||
|
patch_key_run = patch("salt.client.ssh.SSH._key_deploy_run", mock_key_run)
|
||||||
|
ssh_ret = {
|
||||||
|
"localhost": {
|
||||||
|
"jid": "20230922161937998385",
|
||||||
|
"return": "test",
|
||||||
|
"retcode": 0,
|
||||||
|
"id": "test",
|
||||||
|
"fun": "cmd.run",
|
||||||
|
"fun_args": ["echo test"],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
patch_roster_file = patch("salt.roster.get_roster_file", MagicMock(return_value=""))
|
||||||
|
with patch_roster_file:
|
||||||
|
client = ssh.SSH(opts)
|
||||||
|
ret = client.key_deploy(host, ssh_ret)
|
||||||
|
assert ret == ssh_ret
|
||||||
|
assert mock_key_run.call_count == 0
|
||||||
|
|
|
@ -116,6 +116,9 @@ def test_fileclient_timeout(minion_opts, master_opts):
|
||||||
"request_channel_tries": 1,
|
"request_channel_tries": 1,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
master_uri = "tcp://{master_ip}:{master_port}".format(
|
||||||
|
master_ip="localhost", master_port=minion_opts["master_port"]
|
||||||
|
)
|
||||||
|
|
||||||
def mock_dumps(*args):
|
def mock_dumps(*args):
|
||||||
return b"meh"
|
return b"meh"
|
||||||
|
|
Loading…
Add table
Reference in a new issue