Merge branch '2018.3' into fix_grains

This commit is contained in:
Shane Lee 2019-03-28 09:59:09 -06:00 committed by GitHub
commit a77ec81e6f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
105 changed files with 2652 additions and 492 deletions

View File

@ -54,7 +54,7 @@ provisioner:
base: base:
"os:Windows": "os:Windows":
- match: grain - match: grain
- prep_windows - windows
"*": "*":
- <%= ENV['KITCHEN_STATE'] || 'git.salt' %> - <%= ENV['KITCHEN_STATE'] || 'git.salt' %>
pillars: pillars:

View File

@ -66,7 +66,7 @@ clean:
# User-friendly check for sphinx-build # User-friendly check for sphinx-build
check_sphinx-build: check_sphinx-build:
@which $(SPHINXBUILD) >/dev/null 2>&1 || (echo "The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)" >&2; false) @which $(SPHINXBUILD) >/dev/null 2>&1 || (echo "The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://www.sphinx-doc.org/en/master/)" >&2; false)
html: check_sphinx-build translations html: check_sphinx-build translations
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html

View File

@ -131,6 +131,7 @@ MOCK_MODULES = [
'tornado.ioloop', 'tornado.ioloop',
'tornado.iostream', 'tornado.iostream',
'tornado.netutil', 'tornado.netutil',
'tornado.queues',
'tornado.simple_httpclient', 'tornado.simple_httpclient',
'tornado.stack_context', 'tornado.stack_context',
'tornado.web', 'tornado.web',

View File

@ -9,7 +9,7 @@ Synopsis
.. code-block:: bash .. code-block:: bash
salt-unity salt '*' test.ping salt-unity salt '*' test.version
Description Description
=========== ===========

View File

@ -11,9 +11,9 @@ Synopsis
salt -E '.*' [ options ] sys.doc cmd salt -E '.*' [ options ] sys.doc cmd
salt -G 'os:Arch.*' [ options ] test.ping salt -G 'os:Arch.*' [ options ] test.version
salt -C 'G@os:Arch.* and webserv* or G@kernel:FreeBSD' [ options ] test.ping salt -C 'G@os:Arch.* and webserv* or G@kernel:FreeBSD' [ options ] test.version
Description Description
=========== ===========

View File

@ -199,30 +199,31 @@ Sending Commands
================ ================
Communication between the Master and a Minion may be verified by running Communication between the Master and a Minion may be verified by running
the ``test.ping`` command: the ``test.version`` command:
.. code-block:: bash .. code-block:: bash
[root@master ~]# salt alpha test.ping [root@master ~]# salt alpha test.version
alpha: alpha:
True 2018.3.4
Communication between the Master and all Minions may be tested in a Communication between the Master and all Minions may be tested in a
similar way: similar way:
.. code-block:: bash .. code-block:: bash
[root@master ~]# salt '*' test.ping [root@master ~]# salt '*' test.version
alpha: alpha:
True 2018.3.4
bravo: bravo:
True 2018.3.4
charlie: charlie:
True 2018.3.4
delta: delta:
True 2018.3.4
Each of the Minions should send a ``True`` response as shown above. Each of the Minions should send a ``2018.3.4`` response as shown above,
or any other salt version installed.
What's Next? What's Next?
============ ============

View File

@ -5050,6 +5050,33 @@ This can be used to control logging levels more specifically. See also
:conf_log:`log_granular_levels`. :conf_log:`log_granular_levels`.
.. conf_master:: log_rotate_max_bytes
``log_rotate_max_bytes``
------------------------
Default: ``0``
The maximum number of bytes a single log file may contain before it is rotated.
A value of 0 disables this feature. Currently only supported on Windows. On
other platforms, use an external tool such as 'logrotate' to manage log files.
:conf_log:`log_rotate_max_bytes`
.. conf_master:: log_rotate_backup_count
``log_rotate_backup_count``
---------------------------
Default: ``0``
The number of backup files to keep when rotating log files. Only used if
:conf_master:`log_rotate_max_bytes` is greater than 0. Currently only supported
on Windows. On other platforms, use an external tool such as 'logrotate' to
manage log files.
:conf_log:`log_rotate_backup_count`
.. _node-groups: .. _node-groups:
Node Groups Node Groups

View File

@ -2940,6 +2940,34 @@ Default: ``{}``
This can be used to control logging levels more specifically. See also This can be used to control logging levels more specifically. See also
:conf_log:`log_granular_levels`. :conf_log:`log_granular_levels`.
.. conf_minion:: log_rotate_max_bytes
``log_rotate_max_bytes``
------------------------
Default: ``0``
The maximum number of bytes a single log file may contain before it is rotated.
A value of 0 disables this feature. Currently only supported on Windows. On
other platforms, use an external tool such as 'logrotate' to manage log files.
:conf_log:`log_rotate_max_bytes`
.. conf_minion:: log_rotate_backup_count
``log_rotate_backup_count``
---------------------------
Default: ``0``
The number of backup files to keep when rotating log files. Only used if
:conf_minion:`log_rotate_max_bytes` is greater than 0. Currently only supported
on Windows. On other platforms, use an external tool such as 'logrotate' to
manage log files.
:conf_log:`log_rotate_backup_count`
.. conf_minion:: zmq_monitor .. conf_minion:: zmq_monitor
``zmq_monitor`` ``zmq_monitor``

View File

@ -30,7 +30,7 @@ The same could be done by command line:
.. code-block:: bash .. code-block:: bash
salt -t 40 --module-executors='[splay, direct_call]' --executor-opts='{splaytime: 30}' '*' test.ping salt -t 40 --module-executors='[splay, direct_call]' --executor-opts='{splaytime: 30}' '*' test.version
And the same command called via netapi will look like this: And the same command called via netapi will look like this:
@ -43,7 +43,7 @@ And the same command called via netapi will look like this:
-d '[{ -d '[{
"client": "local", "client": "local",
"tgt": "*", "tgt": "*",
"fun": "test.ping", "fun": "test.version",
"module_executors": ["splay", "direct_call"], "module_executors": ["splay", "direct_call"],
"executor_opts": {"splaytime": 10} "executor_opts": {"splaytime": 10}
}]' }]'

View File

@ -107,11 +107,11 @@ comes with a number of functions to execute peer communication in different
ways. Currently there are three functions in the publish module. These examples ways. Currently there are three functions in the publish module. These examples
will show how to test the peer system via the salt-call command. will show how to test the peer system via the salt-call command.
To execute test.ping on all minions: To execute test.version on all minions:
.. code-block:: bash .. code-block:: bash
# salt-call publish.publish \* test.ping # salt-call publish.publish \* test.version
To execute the manage.up runner: To execute the manage.up runner:
@ -123,7 +123,7 @@ To match minions using other matchers, use ``tgt_type``:
.. code-block:: bash .. code-block:: bash
# salt-call publish.publish 'webserv* and not G@os:Ubuntu' test.ping tgt_type='compound' # salt-call publish.publish 'webserv* and not G@os:Ubuntu' test.version tgt_type='compound'
.. note:: .. note::
In pre-2017.7.0 releases, use ``expr_form`` instead of ``tgt_type``. In pre-2017.7.0 releases, use ``expr_form`` instead of ``tgt_type``.

View File

@ -31,7 +31,7 @@ Specifying what returners to use is done when the command is invoked:
.. code-block:: bash .. code-block:: bash
salt '*' test.ping --return redis_return salt '*' test.version --return redis_return
This command will ensure that the redis_return returner is used. This command will ensure that the redis_return returner is used.
@ -39,10 +39,10 @@ It is also possible to specify multiple returners:
.. code-block:: bash .. code-block:: bash
salt '*' test.ping --return mongo_return,redis_return,cassandra_return salt '*' test.version --return mongo_return,redis_return,cassandra_return
In this scenario all three returners will be called and the data from the In this scenario all three returners will be called and the data from the
test.ping command will be sent out to the three named returners. test.version command will be sent out to the three named returners.
Writing a Returner Writing a Returner
================== ==================
@ -61,13 +61,13 @@ Other optional functions can be included to add support for
``returner`` ``returner``
The ``returner`` function must accept a single argument. The argument The ``returner`` function must accept a single argument. The argument
contains return data from the called minion function. If the minion contains return data from the called minion function. If the minion
function ``test.ping`` is called, the value of the argument will be a function ``test.version`` is called, the value of the argument will be a
dictionary. Run the following command from a Salt master to get a sample dictionary. Run the following command from a Salt master to get a sample
of the dictionary: of the dictionary:
.. code-block:: bash .. code-block:: bash
salt-call --local --metadata test.ping --out=pprint salt-call --local --metadata test.version --out=pprint
.. code-block:: python .. code-block:: python
@ -246,12 +246,12 @@ Sample:
"master_minion": { "master_minion": {
"fun_args": [], "fun_args": [],
"jid": "20150330121011408195", "jid": "20150330121011408195",
"return": true, "return": "2018.3.4",
"retcode": 0, "retcode": 0,
"success": true, "success": true,
"cmd": "_return", "cmd": "_return",
"_stamp": "2015-03-30T12:10:12.708663", "_stamp": "2015-03-30T12:10:12.708663",
"fun": "test.ping", "fun": "test.version",
"id": "master_minion" "id": "master_minion"
} }
} }
@ -267,9 +267,9 @@ Sample:
{ {
"local": { "local": {
"minion1": "test.ping", "minion1": "test.version",
"minion3": "test.ping", "minion3": "test.version",
"minion2": "test.ping" "minion2": "test.version"
} }
} }
@ -344,7 +344,7 @@ Testing the Returner
The ``returner``, ``prep_jid``, ``save_load``, ``get_load``, and The ``returner``, ``prep_jid``, ``save_load``, ``get_load``, and
``event_return`` functions can be tested by configuring the ``event_return`` functions can be tested by configuring the
:conf_master:`master_job_cache` and `Event Returners`_ in the master config :conf_master:`master_job_cache` and `Event Returners`_ in the master config
file and submitting a job to ``test.ping`` each minion from the master. file and submitting a job to ``test.version`` each minion from the master.
Once you have successfully exercised the Master Job Cache functions, test the Once you have successfully exercised the Master Job Cache functions, test the
External Job Cache functions using the ``ret`` execution module. External Job Cache functions using the ``ret`` execution module.
@ -352,7 +352,7 @@ External Job Cache functions using the ``ret`` execution module.
.. code-block:: bash .. code-block:: bash
salt-call ret.get_jids cassandra_cql --output=json salt-call ret.get_jids cassandra_cql --output=json
salt-call ret.get_fun cassandra_cql test.ping --output=json salt-call ret.get_fun cassandra_cql test.version --output=json
salt-call ret.get_minions cassandra_cql --output=json salt-call ret.get_minions cassandra_cql --output=json
salt-call ret.get_jid cassandra_cql 20150330121011408195 --output=json salt-call ret.get_jid cassandra_cql 20150330121011408195 --output=json

View File

@ -122,6 +122,6 @@ responding to Salt calls could look like this:
Print a list of all of the minions that are up Print a list of all of the minions that are up
''' '''
client = salt.client.LocalClient(__opts__['conf_file']) client = salt.client.LocalClient(__opts__['conf_file'])
minions = client.cmd('*', 'test.ping', timeout=1) minions = client.cmd('*', 'test.version', timeout=1)
for minion in sorted(minions): for minion in sorted(minions):
print minion print minion

View File

@ -22,5 +22,5 @@ allowed during blackout. This is configured with the special pillar key
.. code-block:: yaml .. code-block:: yaml
minion_blackout_whitelist: minion_blackout_whitelist:
- test.ping - test.version
- pillar.get - pillar.get

View File

@ -324,7 +324,7 @@ it can be verified with Salt:
.. code-block:: bash .. code-block:: bash
# salt 'ami.example.com' test.ping # salt 'ami.example.com' test.version
Required Settings Required Settings

View File

@ -120,7 +120,7 @@ it can be verified with Salt:
.. code-block:: bash .. code-block:: bash
salt newinstance test.ping salt newinstance test.version
Profile Options Profile Options

View File

@ -121,7 +121,7 @@ it can be verified with Salt:
.. code-block:: bash .. code-block:: bash
salt newinstance test.ping salt newinstance test.version
Profile Options Profile Options

View File

@ -29,8 +29,8 @@ Minion Configuration
The default minion configuration is set up in this file. Minions created by The default minion configuration is set up in this file. Minions created by
salt-cloud derive their configuration from this file. Almost all parameters salt-cloud derive their configuration from this file. Almost all parameters
found in :ref:`Configuring the Salt Minion <configuration-salt-minion>` can found in :ref:`Configuring the Salt Minion <configuration-salt-minion>` can be
be used here. used here.
.. code-block:: yaml .. code-block:: yaml
@ -44,7 +44,7 @@ and its listening port, if the port is not set to the default.
Similar to most other settings, Minion configuration settings are inherited Similar to most other settings, Minion configuration settings are inherited
across configuration files. For example, the master setting might be contained across configuration files. For example, the master setting might be contained
in the main ``cloud`` configuration file as demonstrated above, but additional in the main ``cloud`` configuration file as demonstrated above, but additional
settings can be placed in the provider or profile: settings can be placed in the provider, profile or map configuration files:
.. code-block:: yaml .. code-block:: yaml

View File

@ -123,7 +123,7 @@ Post-Deploy Commands
Once a minion has been deployed, it has the option to run a salt command. Once a minion has been deployed, it has the option to run a salt command.
Normally, this would be the :py:func:`state.apply <salt.modules.state.apply_>`, Normally, this would be the :py:func:`state.apply <salt.modules.state.apply_>`,
which would finish provisioning the VM. Another common option (for testing) is which would finish provisioning the VM. Another common option (for testing) is
to use :py:func:`test.ping <salt.modules.test.ping>`. This is configured in the to use :py:func:`test.version <salt.modules.test.version>`. This is configured in the
main cloud config file: main cloud config file:
.. code-block:: yaml .. code-block:: yaml

View File

@ -170,7 +170,7 @@ it can be verified with Salt:
.. code-block:: bash .. code-block:: bash
salt gce-instance test.ping salt gce-instance test.version
GCE Specific Settings GCE Specific Settings

View File

@ -84,7 +84,7 @@ it can be verified with Salt:
.. code-block:: bash .. code-block:: bash
# salt my-centos7-clone test.ping # salt my-centos7-clone test.version
Required Settings Required Settings

View File

@ -62,7 +62,7 @@ it can be verified with Salt:
.. code-block:: bash .. code-block:: bash
salt linode-instance test.ping salt linode-instance test.version
Listing Sizes Listing Sizes

View File

@ -96,7 +96,7 @@ Once the instance has been created with salt-minion installed, connectivity to i
.. code-block:: bash .. code-block:: bash
salt my-new-vm test.ping salt my-new-vm test.version
OpenNebula uses an image --> template --> virtual machine paradigm where the template draws on the image, or disk, OpenNebula uses an image --> template --> virtual machine paradigm where the template draws on the image, or disk,
and virtual machines are created from templates. Because of this, there is no need to define a ``size`` in the cloud and virtual machines are created from templates. Because of this, there is no need to define a ``size`` in the cloud

View File

@ -91,7 +91,7 @@ it can be verified with Salt:
.. code-block:: bash .. code-block:: bash
# salt myubuntu test.ping # salt myubuntu test.version
Required Settings Required Settings

View File

@ -91,7 +91,7 @@ it can be verified with Salt:
.. code-block:: bash .. code-block:: bash
# salt myubuntu test.ping # salt myubuntu test.version
Required Settings Required Settings

View File

@ -195,7 +195,7 @@ Connectivity to the new "Salted" instances can now be verified with Salt:
.. code-block:: bash .. code-block:: bash
salt 'my-instance-*' test.ping salt 'my-instance-*' test.version
Credential Verification Credential Verification
======================= =======================
@ -203,7 +203,7 @@ Credential Verification
Because the Saltify driver does not actually create VM's, unlike other Because the Saltify driver does not actually create VM's, unlike other
salt-cloud drivers, it has special behaviour when the ``deploy`` option is set salt-cloud drivers, it has special behaviour when the ``deploy`` option is set
to ``False``. When the cloud configuration specifies ``deploy: False``, the to ``False``. When the cloud configuration specifies ``deploy: False``, the
Saltify driver will attept to authenticate to the target node(s) and return Saltify driver will attempt to authenticate to the target node(s) and return
``True`` for each one that succeeds. This can be useful to verify ports, ``True`` for each one that succeeds. This can be useful to verify ports,
protocols, services and credentials are correctly configured before a live protocols, services and credentials are correctly configured before a live
deployment. deployment.

View File

@ -221,9 +221,9 @@ with its short hostname, ``my-vm``):
Rejected Keys: Rejected Keys:
# #
# #
# salt my-vm.example.com test.ping # salt my-vm.example.com test.version
my-vm.example.com: my-vm.example.com:
True 2018.3.4
# #
# #
# salt-cloud -d my-vm.example.com # salt-cloud -d my-vm.example.com
@ -334,7 +334,7 @@ it can be verified with Salt:
.. code-block:: bash .. code-block:: bash
# salt 'myserver.example.com' test.ping # salt 'myserver.example.com' test.version
Dedicated Host Dedicated Host
~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~

View File

@ -119,7 +119,7 @@ to it can be verified with Salt:
.. code-block:: bash .. code-block:: bash
salt my-id test.ping salt my-id test.version
.. _host provisioning example: .. _host provisioning example:

View File

@ -111,7 +111,7 @@ the following command:
.. code-block:: bash .. code-block:: bash
# salt vh_instance1 test.ping # salt vh_instance1 test.version
You can now continue to provision new instances and they will all automatically You can now continue to provision new instances and they will all automatically
be set up as minions of the master you've defined in the configuration file. be set up as minions of the master you've defined in the configuration file.

View File

@ -160,7 +160,7 @@ it can be verified with Salt:
.. code-block:: bash .. code-block:: bash
salt xenvm02 test.ping salt xenvm02 test.version
Listing Sizes Listing Sizes

View File

@ -109,7 +109,7 @@ against the command target.
The typical lifecycle of a salt job from the perspective of the master The typical lifecycle of a salt job from the perspective of the master
might be as follows: might be as follows:
1) A command is issued on the CLI. For example, 'salt my_minion test.ping'. 1) A command is issued on the CLI. For example, 'salt my_minion test.version'.
2) The 'salt' command uses LocalClient to generate a request to the salt master 2) The 'salt' command uses LocalClient to generate a request to the salt master
by connecting to the ReqServer on TCP:4506 and issuing the job. by connecting to the ReqServer on TCP:4506 and issuing the job.

View File

@ -100,7 +100,8 @@ Fork a Repo Guide_>`_ and is well worth reading.
.. note:: .. note::
If your change fixes a bug or implements a feature already filed in the If your change fixes a bug or implements a feature already filed in the
`issue tracker <GitHub issue tracker>`_, be sure to reference the issue `issue tracker`_, be sure to
`reference the issue <https://help.github.com/en/articles/closing-issues-using-keywords>`_
number in the commit message body. number in the commit message body.
.. code-block:: bash .. code-block:: bash
@ -541,7 +542,7 @@ Script, see the Bootstrap Script's `Contributing Guidelines`_.
.. _`saltstack/salt`: https://github.com/saltstack/salt .. _`saltstack/salt`: https://github.com/saltstack/salt
.. _`GitHub Fork a Repo Guide`: https://help.github.com/articles/fork-a-repo .. _`GitHub Fork a Repo Guide`: https://help.github.com/articles/fork-a-repo
.. _`GitHub issue tracker`: https://github.com/saltstack/salt/issues .. _`issue tracker`: https://github.com/saltstack/salt/issues
.. _`Fork saltstack/salt`: https://github.com/saltstack/salt/fork .. _`Fork saltstack/salt`: https://github.com/saltstack/salt/fork
.. _'Git resources`: https://help.github.com/articles/good-resources-for-learning-git-and-github/ .. _'Git resources`: https://help.github.com/articles/good-resources-for-learning-git-and-github/
.. _`Closing issues via commit message`: https://help.github.com/articles/closing-issues-via-commit-messages .. _`Closing issues via commit message`: https://help.github.com/articles/closing-issues-via-commit-messages

View File

@ -13,7 +13,7 @@ broadly, most of the narrative documentation is contained within the
:blob:`doc` subdirectory and most of the reference and API documentation is :blob:`doc` subdirectory and most of the reference and API documentation is
written inline with Salt's Python code and extracted using a Sphinx extension. written inline with Salt's Python code and extracted using a Sphinx extension.
.. _`Sphinx`: http://sphinx-doc.org/ .. _`Sphinx`: https://www.sphinx-doc.org/en/master/
.. _docs-style: .. _docs-style:
@ -187,7 +187,7 @@ Link to :ref:`glossary entries <glossary>` using the `term role`_. A
cross-reference should be added the first time a Salt-specific term is used in cross-reference should be added the first time a Salt-specific term is used in
a document. a document.
.. _`term role`: http://sphinx-doc.org/markup/inline.html#role-term .. _`term role`: https://www.sphinx-doc.org/en/master/glossary.html#term-role
.. code-block:: restructuredtext .. code-block:: restructuredtext
@ -206,7 +206,7 @@ occasionally useful to manually add items to the index.
One method is to use the `index directive`_ above the document or section that One method is to use the `index directive`_ above the document or section that
should appear in the index. should appear in the index.
.. _`index directive`: http://sphinx-doc.org/markup/misc.html#directive-index .. _`index directive`: https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html?highlight=index%20directive#index-generating-markup
.. code-block:: restructuredtext .. code-block:: restructuredtext
@ -217,7 +217,7 @@ Another method is to use the `index role`_ inline with the text that should
appear in the index. The index entry is created and the target text is left appear in the index. The index entry is created and the target text is left
otherwise intact. otherwise intact.
.. _`index role`: http://sphinx-doc.org/markup/misc.html#role-index .. _`index role`: http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#role-index
.. code-block:: restructuredtext .. code-block:: restructuredtext
@ -252,7 +252,7 @@ to survive document renames or movement.
Note, the ``:doc:`` role should *not* be used to link documents together. Note, the ``:doc:`` role should *not* be used to link documents together.
.. _`ref role`: http://sphinx-doc.org/markup/inline.html#role-ref .. _`ref role`: https://www.sphinx-doc.org/en/master/usage/restructuredtext/roles.html#role-ref
.. _docs-ref-modules: .. _docs-ref-modules:

View File

@ -160,7 +160,7 @@ installation is working:
salt-minion -c ./etc/salt -d salt-minion -c ./etc/salt -d
salt-key -c ./etc/salt -L salt-key -c ./etc/salt -L
salt-key -c ./etc/salt -A salt-key -c ./etc/salt -A
salt -c ./etc/salt '*' test.ping salt -c ./etc/salt '*' test.version
Running the master and minion in debug mode can be helpful when developing. To Running the master and minion in debug mode can be helpful when developing. To
do this, add ``-l debug`` to the calls to ``salt-master`` and ``salt-minion``. do this, add ``-l debug`` to the calls to ``salt-master`` and ``salt-minion``.
@ -283,7 +283,9 @@ Change to salt documentation directory, then:
:strong:`text`. :strong:`text`.
- The docs then are built within the :strong:`docs/_build/` folder. To update - The docs then are built within the :strong:`docs/_build/` folder. To update
the docs after making changes, run ``make`` again. the docs after making changes, run ``make`` again.
- The docs use `reStructuredText <http://sphinx-doc.org/rest.html>`_ for markup. - The docs use `reStructuredText
<https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html>`_
for markup.
See a live demo at http://rst.ninjs.org/. See a live demo at http://rst.ninjs.org/.
- The help information on each module or state is culled from the python code - The help information on each module or state is culled from the python code
that runs for that piece. Find them in ``salt/modules/`` or ``salt/states/``. that runs for that piece. Find them in ``salt/modules/`` or ``salt/states/``.

View File

@ -67,7 +67,7 @@ other minions based on standard targets (all matchers are supported except the c
external_auth: external_auth:
pam: pam:
dave: dave:
- test.ping - test.version
- mongo\*: - mongo\*:
- network.* - network.*
- log\*: - log\*:
@ -78,7 +78,7 @@ other minions based on standard targets (all matchers are supported except the c
steve: steve:
- .* - .*
The above allows for all minions to be hit by test.ping by dave, and adds a The above allows for all minions to be hit by test.version by dave, and adds a
few functions that dave can execute on other minions. It also allows steve few functions that dave can execute on other minions. It also allows steve
unrestricted access to salt commands. unrestricted access to salt commands.

View File

@ -180,7 +180,7 @@ any user on the same system as the master with the ``-a`` option:
.. code-block:: bash .. code-block:: bash
$ salt -a pam web\* test.ping $ salt -a pam web\* test.version
The system will ask the user for the credentials required by the The system will ask the user for the credentials required by the
authentication system and then publish the command. authentication system and then publish the command.
@ -198,7 +198,7 @@ adding a ``-T`` option when authenticating:
.. code-block:: bash .. code-block:: bash
$ salt -T -a pam web\* test.ping $ salt -T -a pam web\* test.version
Now a token will be created that has an expiration of 12 hours (by default). Now a token will be created that has an expiration of 12 hours (by default).
This token is stored in a file named ``salt_token`` in the active user's home This token is stored in a file named ``salt_token`` in the active user's home

View File

@ -69,7 +69,7 @@ Job events
``G@os_family:RedHat``, etc. ``G@os_family:RedHat``, etc.
:var tgt_type: The type of targeting used: ``glob``, ``grain``, :var tgt_type: The type of targeting used: ``glob``, ``grain``,
``compound``, etc. ``compound``, etc.
:var fun: The function to run on minions: ``test.ping``, :var fun: The function to run on minions: ``test.version``,
``network.interfaces``, etc. ``network.interfaces``, etc.
:var arg: A list of arguments to pass to the function that will be :var arg: A list of arguments to pass to the function that will be
called. called.
@ -85,7 +85,7 @@ Job events
:var id: The minion ID. :var id: The minion ID.
:var jid: The job ID. :var jid: The job ID.
:var retcode: The return code for the job. :var retcode: The return code for the job.
:var fun: The function the minion ran. E.g., ``test.ping``. :var fun: The function the minion ran. E.g., ``test.version``.
:var return: The data returned from the execution module. :var return: The data returned from the execution module.
.. salt:event:: salt/job/<JID>/prog/<MID>/<RUN NUM> .. salt:event:: salt/job/<JID>/prog/<MID>/<RUN NUM>

View File

@ -25,12 +25,12 @@ The general installation process is as follows:
4. Accept the Salt :ref:`minion keys <using-salt-key>` after the Salt minion 4. Accept the Salt :ref:`minion keys <using-salt-key>` after the Salt minion
connects. connects.
After this, you should be able to run a simple command and receive returns from After this, you should be able to run a simple command and receive salt version returns from
all connected Salt minions. all connected Salt minions.
.. code-block:: bash .. code-block:: bash
salt '*' test.ping salt '*' test.version
Quick Install Quick Install
------------- -------------

View File

@ -516,7 +516,7 @@ Testing the Salt minion
.. code-block:: bash .. code-block:: bash
sudo salt '*' test.ping sudo salt '*' test.version
You should get the following response: ``{'your minion hostname': True}`` You should get the following response: ``{'your minion hostname': True}``

View File

@ -405,6 +405,29 @@ Returns:
None None
.. jinja_ref:: regex_replace
``regex_replace``
-----------------
.. versionadded:: 2017.7.0
Searches for a pattern and replaces with a sequence of characters.
Example:
.. code-block:: jinja
{% set my_text = 'yes, this is a TEST' %}
{{ my_text | regex_replace(' ([a-z])', '__\\1', ignorecase=True) }}
Returns:
.. code-block:: text
yes,__this__is__a__TEST
.. jinja_ref:: uuid .. jinja_ref:: uuid
``uuid`` ``uuid``

View File

@ -98,7 +98,7 @@ the 'url' key above should say ``url: http://127.0.0.1:8000``
.. code-block:: bash .. code-block:: bash
salt p8000 test.ping salt p8000 test.version
8. The REST service implements a degenerately simple pkg and service provider as 8. The REST service implements a degenerately simple pkg and service provider as
well as a small set of grains. To "install" a package, use a standard well as a small set of grains. To "install" a package, use a standard

View File

@ -127,7 +127,7 @@ command:
.. code-block:: bash .. code-block:: bash
salt-ssh '*' test.ping salt-ssh '*' test.version
Commands with ``salt-ssh`` follow the same syntax as the ``salt`` command. Commands with ``salt-ssh`` follow the same syntax as the ``salt`` command.
@ -217,8 +217,8 @@ YAML contents:
ssh_wipe: True ssh_wipe: True
Instead of having to call Instead of having to call
``salt-ssh --config-dir=path/to/config/dir --max-procs=30 --wipe \* test.ping`` you ``salt-ssh --config-dir=path/to/config/dir --max-procs=30 --wipe \* test.version`` you
can call ``salt-ssh \* test.ping``. can call ``salt-ssh \* test.version``.
Boolean-style options should be specified in their YAML representation. Boolean-style options should be specified in their YAML representation.

View File

@ -9,11 +9,11 @@ supported.
.. code-block:: bash .. code-block:: bash
salt '*' -b 10 test.ping salt '*' -b 10 test.version
salt -G 'os:RedHat' --batch-size 25% apache.signal restart salt -G 'os:RedHat' --batch-size 25% apache.signal restart
This will only run test.ping on 10 of the targeted minions at a time and then This will only run test.version on 10 of the targeted minions at a time and then
restart apache on 25% of the minions matching ``os:RedHat`` at a time and work restart apache on 25% of the minions matching ``os:RedHat`` at a time and work
through them all until the task is complete. This makes jobs like rolling web through them all until the task is complete. This makes jobs like rolling web
server restarts behind a load balancer or doing maintenance on BSD firewalls server restarts behind a load balancer or doing maintenance on BSD firewalls

View File

@ -31,7 +31,7 @@ matches the :mod:`regular expression <python2:re>` ``web-dc1-srv.*``:
.. code-block:: bash .. code-block:: bash
salt -C 'webserv* and G@os:Debian or E@web-dc1-srv.*' test.ping salt -C 'webserv* and G@os:Debian or E@web-dc1-srv.*' test.version
That same example expressed in a :term:`top file` looks like the following: That same example expressed in a :term:`top file` looks like the following:
@ -48,20 +48,20 @@ Excluding a minion based on its ID is also possible:
.. code-block:: bash .. code-block:: bash
salt -C 'not web-dc1-srv' test.ping salt -C 'not web-dc1-srv' test.version
Versions prior to 2015.8.0 a leading ``not`` was not supported in compound Versions prior to 2015.8.0 a leading ``not`` was not supported in compound
matches. Instead, something like the following was required: matches. Instead, something like the following was required:
.. code-block:: bash .. code-block:: bash
salt -C '* and not G@kernel:Darwin' test.ping salt -C '* and not G@kernel:Darwin' test.version
Excluding a minion based on its ID was also possible: Excluding a minion based on its ID was also possible:
.. code-block:: bash .. code-block:: bash
salt -C '* and not web-dc1-srv' test.ping salt -C '* and not web-dc1-srv' test.version
Precedence Matching Precedence Matching
------------------- -------------------
@ -70,7 +70,7 @@ Matchers can be grouped together with parentheses to explicitly declare preceden
.. code-block:: bash .. code-block:: bash
salt -C '( ms-1 or G@id:ms-3 ) and G@id:ms-3' test.ping salt -C '( ms-1 or G@id:ms-3 ) and G@id:ms-3' test.version
.. note:: .. note::

View File

@ -31,39 +31,39 @@ Match all minions:
.. code-block:: bash .. code-block:: bash
salt '*' test.ping salt '*' test.version
Match all minions in the example.net domain or any of the example domains: Match all minions in the example.net domain or any of the example domains:
.. code-block:: bash .. code-block:: bash
salt '*.example.net' test.ping salt '*.example.net' test.version
salt '*.example.*' test.ping salt '*.example.*' test.version
Match all the ``webN`` minions in the example.net domain (``web1.example.net``, Match all the ``webN`` minions in the example.net domain (``web1.example.net``,
``web2.example.net````webN.example.net``): ``web2.example.net````webN.example.net``):
.. code-block:: bash .. code-block:: bash
salt 'web?.example.net' test.ping salt 'web?.example.net' test.version
Match the ``web1`` through ``web5`` minions: Match the ``web1`` through ``web5`` minions:
.. code-block:: bash .. code-block:: bash
salt 'web[1-5]' test.ping salt 'web[1-5]' test.version
Match the ``web1`` and ``web3`` minions: Match the ``web1`` and ``web3`` minions:
.. code-block:: bash .. code-block:: bash
salt 'web[1,3]' test.ping salt 'web[1,3]' test.version
Match the ``web-x``, ``web-y``, and ``web-z`` minions: Match the ``web-x``, ``web-y``, and ``web-z`` minions:
.. code-block:: bash .. code-block:: bash
salt 'web-[x-z]' test.ping salt 'web-[x-z]' test.version
.. note:: .. note::
@ -81,7 +81,7 @@ Match both ``web1-prod`` and ``web1-devel`` minions:
.. code-block:: bash .. code-block:: bash
salt -E 'web1-(prod|devel)' test.ping salt -E 'web1-(prod|devel)' test.version
When using regular expressions in a State's :term:`top file`, you must specify When using regular expressions in a State's :term:`top file`, you must specify
the matcher as the first option. The following example executes the contents of the matcher as the first option. The following example executes the contents of
@ -102,4 +102,4 @@ At the most basic level, you can specify a flat list of minion IDs:
.. code-block:: bash .. code-block:: bash
salt -L 'web1,web2,web3' test.ping salt -L 'web1,web2,web3' test.version

View File

@ -10,7 +10,7 @@ For example, the following matches all CentOS minions:
.. code-block:: bash .. code-block:: bash
salt -G 'os:CentOS' test.ping salt -G 'os:CentOS' test.version
Match all minions with 64-bit CPUs, and return number of CPU cores for each Match all minions with 64-bit CPUs, and return number of CPU cores for each
matching minion: matching minion:

View File

@ -37,7 +37,7 @@ the target is the grain key followed by a glob expression: "os:Arch*".
.. code-block:: bash .. code-block:: bash
salt -G 'os:Fedora' test.ping salt -G 'os:Fedora' test.version
Will return True from all of the minions running Fedora. Will return True from all of the minions running Fedora.
@ -62,7 +62,7 @@ This is well defined with an example:
.. code-block:: bash .. code-block:: bash
salt -C 'G@os:Debian and webser* or E@db.*' test.ping salt -C 'G@os:Debian and webser* or E@db.*' test.version
In this example any minion who's id starts with ``webser`` and is running In this example any minion who's id starts with ``webser`` and is running
Debian, or any minion who's id starts with db will be matched. Debian, or any minion who's id starts with db will be matched.

View File

@ -9,14 +9,14 @@ notation).
.. code-block:: bash .. code-block:: bash
salt -S 192.168.40.20 test.ping salt -S 192.168.40.20 test.version
salt -S 2001:db8::/64 test.ping salt -S 2001:db8::/64 test.version
Ipcidr matching can also be used in compound matches Ipcidr matching can also be used in compound matches
.. code-block:: bash .. code-block:: bash
salt -C 'S@10.0.0.0/24 and G@os:Debian' test.ping salt -C 'S@10.0.0.0/24 and G@os:Debian' test.version
It is also possible to use in both pillar and state-matching It is also possible to use in both pillar and state-matching

View File

@ -57,7 +57,7 @@ To match a nodegroup on the CLI, use the ``-N`` command-line option:
.. code-block:: bash .. code-block:: bash
salt -N group1 test.ping salt -N group1 test.version
.. note:: .. note::

View File

@ -21,7 +21,7 @@ Example:
.. code-block:: bash .. code-block:: bash
salt -I 'somekey:specialvalue' test.ping salt -I 'somekey:specialvalue' test.version
Like with :ref:`Grains <targeting-grains>`, it is possible to use globbing Like with :ref:`Grains <targeting-grains>`, it is possible to use globbing
as well as match nested values in Pillar, by adding colons for each level that as well as match nested values in Pillar, by adding colons for each level that
@ -31,4 +31,4 @@ is being traversed. The below example would match minions with a pillar named
.. code-block:: bash .. code-block:: bash
salt -I 'foo:bar:baz*' test.ping salt -I 'foo:bar:baz*' test.version

View File

@ -72,11 +72,11 @@ One might target host1 through host100 in the test.com domain with Salt as follo
.. code-block:: bash .. code-block:: bash
salt --range %test:CLUSTER test.ping salt --range %test:CLUSTER test.version
The following salt command would target three hosts: ``frontend``, ``backend``, and ``mysql``: The following salt command would target three hosts: ``frontend``, ``backend``, and ``mysql``:
.. code-block:: bash .. code-block:: bash
salt --range %test:APPS test.ping salt --range %test:APPS test.version

View File

@ -285,12 +285,12 @@ event bus, and returns ``True`` if that event's tag matches. For example:
run_remote_ex: run_remote_ex:
local.cmd: local.cmd:
- tgt: '*' - tgt: '*'
- func: test.ping - func: test.version
- require: - require:
- check: salt/foo/*/bar - check: salt/foo/*/bar
This formula will look for an event whose tag is ``salt/foo/<anything>/bar`` and This formula will look for an event whose tag is ``salt/foo/<anything>/bar`` and
if it comes in, issue a ``test.ping`` to all minions. if it comes in, issue a ``test.version`` to all minions.
Register Persistence Register Persistence

View File

@ -131,15 +131,15 @@ On the Master node:
Unaccepted Keys: Unaccepted Keys:
Rejected Keys: Rejected Keys:
# salt '*' test.ping # salt '*' test.version
minion_1: minion_1:
True 2018.3.4
minion_2: minion_2:
True 2018.3.4
minion_4: minion_4:
True 2018.3.4
minion_3: minion_3:
True 2018.3.4
Topology Topology
======== ========

View File

@ -277,7 +277,7 @@ This command will return data about all of the hypervisors and respective
virtual machines. virtual machines.
Now that the new VM is booted it should have contacted the Salt Master, a Now that the new VM is booted it should have contacted the Salt Master, a
``test.ping`` will reveal if the new VM is running. ``test.version`` will reveal if the new VM is running.
QEMU copy on write support QEMU copy on write support

View File

@ -81,7 +81,7 @@ simple `salt-call` command:
.. code-block:: bash .. code-block:: bash
salt-call --local dockerng.call test test.ping salt-call --local dockerng.call test test.version
salt-call --local dockerng.call test network.interfaces salt-call --local dockerng.call test network.interfaces
salt-call --local dockerng.call test disk.usage salt-call --local dockerng.call test disk.usage
salt-call --local dockerng.call test pkg.list_pkgs salt-call --local dockerng.call test pkg.list_pkgs

View File

@ -227,9 +227,10 @@ This allows you to use any number of potential fallback passwords.
This scenario is especially true, and even slower, when the proxy This scenario is especially true, and even slower, when the proxy
minion first starts. If the correct password is not the first password minion first starts. If the correct password is not the first password
on the list, it may take up to a minute for ``test.ping`` to respond on the list, it may take up to a minute for ``test.version`` to respond
with a ``True`` result. Once the initial authorization is complete, the with salt's version installed (Example: ``2018.3.4``. Once the initial
responses for commands will be a little faster. authorization is complete, the responses for commands will be a little
faster.
To avoid these longer waiting periods, SaltStack recommends moving the To avoid these longer waiting periods, SaltStack recommends moving the
correct password to the top of the list and restarting the proxy minion correct password to the top of the list and restarting the proxy minion
@ -366,7 +367,7 @@ proxy processes!
.. code-block:: bash .. code-block:: bash
# salt 'esxi-*' test.ping # salt 'esxi-*' test.version
esxi-1: esxi-1:
True True
esxi-3: esxi-3:
@ -377,7 +378,7 @@ Executing Commands
================== ==================
Now that you've configured your Proxy Minions and have them responding successfully Now that you've configured your Proxy Minions and have them responding successfully
to a ``test.ping``, we can start executing commands against the ESXi hosts via Salt. to a ``test.version``, we can start executing commands against the ESXi hosts via Salt.
It's important to understand how this particular proxy works, and there are a couple It's important to understand how this particular proxy works, and there are a couple
of important pieces to be aware of in order to start running remote execution and of important pieces to be aware of in order to start running remote execution and

View File

@ -28,8 +28,11 @@ FirewallD use the command line client ``firewall-cmd``.
firewall-cmd --permanent --zone=<zone> --add-port=4505-4506/tcp firewall-cmd --permanent --zone=<zone> --add-port=4505-4506/tcp
Please choose the desired zone according to your setup. Don't forget to reload A network zone defines the security level of trust for the the network.
after you made your changes. The user should choose an appropriate zone value for their setup.
Possible values include: drop, block, public, external, dmz, work, home, internal, trusted.
Don't forget to reload after you made your changes.
.. code-block:: bash .. code-block:: bash
@ -231,5 +234,5 @@ be set on the Master:
needs to communicate with the listening network socket of needs to communicate with the listening network socket of
``salt-master`` on the *loopback* interface. Without this you will ``salt-master`` on the *loopback* interface. Without this you will
see no outgoing Salt traffic from the master, even for a simple see no outgoing Salt traffic from the master, even for a simple
``salt '*' test.ping``, because the ``salt`` client never reached ``salt '*' test.version``, because the ``salt`` client never reached
the ``salt-master`` to tell it to carry out the execution. the ``salt-master`` to tell it to carry out the execution.

View File

@ -27,14 +27,14 @@ following function. The default filter is a glob on the minion id. For example:
.. code-block:: bash .. code-block:: bash
salt '*' test.ping salt '*' test.version
salt '*.example.org' test.ping salt '*.example.org' test.version
Targets can be based on minion system information using the Grains system: Targets can be based on minion system information using the Grains system:
.. code-block:: bash .. code-block:: bash
salt -G 'os:Ubuntu' test.ping salt -G 'os:Ubuntu' test.version
.. seealso:: :ref:`Grains system <targeting-grains>` .. seealso:: :ref:`Grains system <targeting-grains>`
@ -42,19 +42,19 @@ Targets can be filtered by regular expression:
.. code-block:: bash .. code-block:: bash
salt -E 'virtmach[0-9]' test.ping salt -E 'virtmach[0-9]' test.version
Targets can be explicitly specified in a list: Targets can be explicitly specified in a list:
.. code-block:: bash .. code-block:: bash
salt -L 'foo,bar,baz,quo' test.ping salt -L 'foo,bar,baz,quo' test.version
Or Multiple target types can be combined in one command: Or Multiple target types can be combined in one command:
.. code-block:: bash .. code-block:: bash
salt -C 'G@os:Ubuntu and webser* or E@database.*' test.ping salt -C 'G@os:Ubuntu and webser* or E@database.*' test.version
function function
@ -74,7 +74,7 @@ Show all currently available minions:
.. code-block:: bash .. code-block:: bash
salt '*' test.ping salt '*' test.version
Run an arbitrary shell command: Run an arbitrary shell command:

View File

@ -238,7 +238,7 @@ The minion will connect to the first master from its master list
[DEBUG ] Decrypting the current master AES key [DEBUG ] Decrypting the current master AES key
A test.ping on the master the minion is currently connected to should be run to A test.version on the master the minion is currently connected to should be run to
test connectivity. test connectivity.
If successful, that master should be turned off. A firewall-rule denying the If successful, that master should be turned off. A firewall-rule denying the

View File

@ -238,16 +238,16 @@ start with looks like this:
.. code-block:: bash .. code-block:: bash
salt '*' test.ping salt '*' test.version
The ``*`` is the target, which specifies all minions. The ``*`` is the target, which specifies all minions.
``test.ping`` tells the minion to run the :py:func:`test.ping ``test.version`` tells the minion to run the :py:func:`test.version
<salt.modules.test.ping>` function. <salt.modules.test.version>` function.
In the case of ``test.ping``, ``test`` refers to a :ref:`execution module In the case of ``test.version``, ``test`` refers to a :ref:`execution module
<writing-execution-modules>`. ``ping`` refers to the :py:func:`ping <writing-execution-modules>`. ``version`` refers to the :py:func:`version
<salt.modules.test.ping>` function contained in the aforementioned ``test`` <salt.modules.test.version>` function contained in the aforementioned ``test``
module. module.
.. note:: .. note::
@ -257,12 +257,10 @@ module.
services. services.
The result of running this command will be the master instructing all of the The result of running this command will be the master instructing all of the
minions to execute :py:func:`test.ping <salt.modules.test.ping>` in parallel minions to execute :py:func:`test.version <salt.modules.test.version>` in parallel
and return the result. and return the result. Using :py:func:`test.version <salt.modules.test.version>`
is a good way of confirming that a minion is connected, and reaffirm to the user
This is not an actual ICMP ping, but rather a simple function which returns ``True``. the salt version(s) they have installed on the minions.
Using :py:func:`test.ping <salt.modules.test.ping>` is a good way of confirming that a minion is
connected.
.. note:: .. note::
@ -271,7 +269,7 @@ connected.
well by using the :conf_minion:`id` parameter. well by using the :conf_minion:`id` parameter.
Of course, there are hundreds of other modules that can be called just as Of course, there are hundreds of other modules that can be called just as
``test.ping`` can. For example, the following would return disk usage on all ``test.version`` can. For example, the following would return disk usage on all
targeted minions: targeted minions:
.. code-block:: bash .. code-block:: bash
@ -591,7 +589,7 @@ This formula can be referenced via the following command:
.. note:: .. note::
:py:func:`state.apply <salt.modules.state.apply_>` is just another remote :py:func:`state.apply <salt.modules.state.apply_>` is just another remote
execution function, just like :py:func:`test.ping <salt.modules.test.ping>` execution function, just like :py:func:`test.version <salt.modules.test.version>`
or :py:func:`disk.usage <salt.modules.disk.usage>`. It simply takes the or :py:func:`disk.usage <salt.modules.disk.usage>`. It simply takes the
name of an SLS file as an argument. name of an SLS file as an argument.

View File

@ -412,9 +412,9 @@ following:
.. code-block:: bash .. code-block:: bash
sudo salt '*' test.ping sudo salt '*' test.version
You should see your minion answering the ping. It's now time to do some You should see your minion answering with its salt version. It's now time to do some
configuration. configuration.

View File

@ -7,9 +7,12 @@ Nox configuration script
''' '''
# Import Python libs # Import Python libs
from __future__ import absolute_import, unicode_literals, print_function
import os import os
import sys import sys
import json import json
import pprint
if __name__ == '__main__': if __name__ == '__main__':
sys.stderr.write('Do not execute this file directly. Use nox instead, it will know how to handle this file\n') sys.stderr.write('Do not execute this file directly. Use nox instead, it will know how to handle this file\n')
@ -22,9 +25,6 @@ import nox
# Global Path Definitions # Global Path Definitions
REPO_ROOT = os.path.abspath(os.path.dirname(__file__)) REPO_ROOT = os.path.abspath(os.path.dirname(__file__))
SITECUSTOMIZE_DIR = os.path.join(REPO_ROOT, 'tests', 'support', 'coverage') SITECUSTOMIZE_DIR = os.path.join(REPO_ROOT, 'tests', 'support', 'coverage')
# We can't just import salt because if this is running under a frozen nox, there
# will be no salt to import
IS_WINDOWS = sys.platform.lower().startswith('win') IS_WINDOWS = sys.platform.lower().startswith('win')
REQUIREMENTS_OVERRIDES = { REQUIREMENTS_OVERRIDES = {
None: [ None: [
@ -44,6 +44,7 @@ nox.options.reuse_existing_virtualenvs = True
# Don't fail on missing interpreters # Don't fail on missing interpreters
nox.options.error_on_missing_interpreters = False nox.options.error_on_missing_interpreters = False
def _create_ci_directories(): def _create_ci_directories():
for dirname in ('logs', 'coverage', 'xml-unittests-output'): for dirname in ('logs', 'coverage', 'xml-unittests-output'):
path = os.path.join(REPO_ROOT, 'artifacts', dirname) path = os.path.join(REPO_ROOT, 'artifacts', dirname)
@ -51,26 +52,41 @@ def _create_ci_directories():
os.makedirs(path) os.makedirs(path)
def _install_requirements_overrides(session, *extra_requirements): def _install_requirements(session, *extra_requirements):
# Install requirements
distro_requirements = None
if IS_WINDOWS:
_distro_requirements = os.path.join(REPO_ROOT, 'requirements', 'static', 'windows.txt')
if os.path.exists(_distro_requirements):
with open(_distro_requirements) as rfh:
if 'ioflo' in rfh.read():
# Because we still install ioflo, which requires setuptools-git, which fails with a
# weird SSL certificate issue(weird because the requirements file requirements install
# fine), let's previously have setuptools-git installed
session.install('setuptools-git')
distro_requirements = _distro_requirements
else:
# The distro package doesn't output anything for Windows
session.install('distro') session.install('distro')
output = session.run('distro', '-j', silent=True) output = session.run('distro', '-j', silent=True)
distro_data = json.loads(output.strip()) distro = json.loads(output.strip())
session.log('Distro information:\n%s', pprint.pformat(distro))
distro_keys = [
'{id}'.format(**distro),
'{id}-{version}'.format(**distro),
'{id}-{version_parts[major]}'.format(**distro)
]
for distro_key in distro_keys:
_distro_requirements = os.path.join(REPO_ROOT, 'requirements', 'static', '{}.txt'.format(distro_key))
if os.path.exists(_distro_requirements):
distro_requirements = _distro_requirements
break
requirements_overrides = REQUIREMENTS_OVERRIDES[None] if distro_requirements is not None:
requirements_overrides.extend( _requirements_files = [distro_requirements]
REQUIREMENTS_OVERRIDES.get( requirements_files = []
'{id}-{version}'.format(**distro_data), else:
[]
)
)
if requirements_overrides:
for requirement in requirements_overrides:
session.install(requirement)
def _install_requirements(session, *extra_requirements):
_install_requirements_overrides(session)
# Install requirements
_requirements_files = [ _requirements_files = [
os.path.join(REPO_ROOT, 'requirements', 'pytest.txt') os.path.join(REPO_ROOT, 'requirements', 'pytest.txt')
] ]
@ -115,14 +131,9 @@ def _install_requirements(session, *extra_requirements):
if extra_requirements: if extra_requirements:
session.install(*extra_requirements) session.install(*extra_requirements)
if IS_WINDOWS:
# Windows hacks :/
nox_windows_setup = os.path.join(REPO_ROOT, 'tests', 'support', 'nox-windows-setup.py')
session.run('python', nox_windows_setup)
def _run_with_coverage(session, *test_cmd): def _run_with_coverage(session, *test_cmd):
session.install('coverage') session.install('coverage==4.5.3')
session.run('coverage', 'erase') session.run('coverage', 'erase')
python_path_env_var = os.environ.get('PYTHONPATH') or None python_path_env_var = os.environ.get('PYTHONPATH') or None
if python_path_env_var is None: if python_path_env_var is None:
@ -144,12 +155,11 @@ def _run_with_coverage(session, *test_cmd):
@nox.parametrize('coverage', [False, True]) @nox.parametrize('coverage', [False, True])
def runtests(session, coverage): def runtests(session, coverage):
# Install requirements # Install requirements
_install_requirements(session, 'unittest-xml-reporting') _install_requirements(session, 'unittest-xml-reporting==2.2.1')
# Create required artifacts directories # Create required artifacts directories
_create_ci_directories() _create_ci_directories()
cmd_args = [ cmd_args = [
'-v',
'--tests-logfile={}'.format( '--tests-logfile={}'.format(
os.path.join(REPO_ROOT, 'artifacts', 'logs', 'runtests.log') os.path.join(REPO_ROOT, 'artifacts', 'logs', 'runtests.log')
) )
@ -176,7 +186,7 @@ def pytest(session, coverage):
), ),
'--no-print-logs', '--no-print-logs',
'-ra', '-ra',
'-sv' '-s'
] + session.posargs ] + session.posargs
if coverage is True: if coverage is True:

View File

@ -2,7 +2,7 @@ Jinja2
# This should be changed to msgpack-python for Packages # This should be changed to msgpack-python for Packages
# msgpack-python>0.3,!=0.5.5 # msgpack-python>0.3,!=0.5.5
msgpack>=0.5,!=0.5.5 msgpack>=0.5,!=0.5.5
PyYAML PyYAML<5.1
MarkupSafe MarkupSafe
requests>=1.0.0 requests>=1.0.0
tornado>=4.2.1,<6.0; python_version < '3' tornado>=4.2.1,<6.0; python_version < '3'

View File

@ -0,0 +1,14 @@
What Is This All About
======================
This directory will contain platform specific requirements(and the requirements
of each requirements) locked to the versions used as if the testing environment
was setup using the salt-jenkins states.
The purpose of this is to ease the transition to `nox` and golden images where
only binary system packages are installed on the golden image and `nox`
installs the python dependencies on virtualenv specifically created for the
test run.
This will also make sure we run the tests with the exact same dependencies
everytime.

View File

@ -0,0 +1,34 @@
# This is a compilation of requirements installed on salt-jenkins git.salt state run
apache-libcloud==1.0.0
boto3
boto>=2.46.0
cffi
cherrypy==17.3.0
dnspython
docker
futures>=2.0; python_version < '3.0'
GitPython
ioflo
jsonschema<=2.6.0
keyring==5.7.1
kubernetes<4.0
mock<1.1.0
more-itertools==5.0.0
moto
msgpack-python >= 0.4.2, != 0.5.5
psutil
pycrypto>=2.6.1
pyinotify
pyopenssl
python-etcd==0.4.2
python-gnupg
pyvmomi
pyzmq
requests
rfc3987
salttesting==2017.6.1
setproctitle
strict_rfc3339
timelib
tornado<5.0
virtualenv

View File

@ -0,0 +1,109 @@
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile -o requirements/static/arch.txt requirements/zeromq.txt requirements/pytest.txt requirements/static/arch.in
#
apache-libcloud==1.0.0
asn1crypto==0.24.0 # via cryptography
atomicwrites==1.3.0 # via pytest
attrs==19.1.0 # via pytest
aws-xray-sdk==0.95 # via moto
backports-abc==0.5 # via tornado
backports.functools-lru-cache==1.5 # via cheroot, jaraco.functools
backports.ssl-match-hostname==3.7.0.1 # via docker, websocket-client
backports.tempfile==1.0 # via moto
backports.weakref==1.0.post1 # via backports.tempfile
boto3==1.9.118
boto==2.49.0
botocore==1.12.118 # via boto3, moto, s3transfer
cachetools==3.1.0 # via google-auth
certifi==2019.3.9 # via kubernetes, requests, tornado
cffi==1.12.2
chardet==3.0.4 # via requests
cheroot==6.5.4 # via cherrypy
cherrypy==17.3.0
contextlib2==0.5.5 # via cherrypy
cookies==2.2.1 # via responses
coverage==4.5.3 # via pytest-cov
cryptography==2.6.1 # via moto, pyopenssl
dnspython==1.16.0
docker-pycreds==0.4.0 # via docker
docker==3.7.1
docutils==0.14 # via botocore
ecdsa==0.13 # via python-jose
enum34==1.1.6 # via cryptography
funcsigs==1.0.2 # via pytest
functools32==3.2.3.post2 # via jsonschema
future==0.17.1 # via python-jose
futures==3.2.0 ; python_version < "3.0"
gitdb2==2.0.5 # via gitpython
gitpython==2.1.11
google-auth==1.6.3 # via kubernetes
idna==2.8 # via requests
ioflo==1.7.5
ipaddress==1.0.22 # via cryptography, docker, kubernetes
jaraco.functools==2.0 # via tempora
jinja2==2.10
jmespath==0.9.4 # via boto3, botocore
jsondiff==1.1.1 # via moto
jsonpickle==1.1 # via aws-xray-sdk
jsonschema==2.6.0
keyring==5.7.1
kubernetes==3.0.0
markupsafe==1.1.1
mock==1.0.1
more-itertools==5.0.0
moto==1.3.7
msgpack-python==0.5.6
msgpack==0.6.1
pathlib2==2.3.3 # via pytest
pluggy==0.9.0 # via pytest
portend==2.3 # via cherrypy
psutil==5.6.1
py==1.8.0 # via pytest
pyaml==18.11.0 # via moto
pyasn1-modules==0.2.4 # via google-auth
pyasn1==0.4.5 # via pyasn1-modules, rsa
pycparser==2.19 # via cffi
pycrypto==2.6.1
pycryptodome==3.7.3 # via python-jose
pyinotify==0.9.6
pyopenssl==19.0.0
pytest-cov==2.6.1
pytest-helpers-namespace==2019.1.8
pytest-salt-runtests-bridge==2019.1.30
pytest-salt==2018.12.8
pytest-tempdir==2018.8.11
pytest-timeout==1.3.3
pytest==4.3.1
python-dateutil==2.8.0 # via botocore, kubernetes, moto
python-etcd==0.4.2
python-gnupg==0.4.4
python-jose==2.0.2 # via moto
pytz==2018.9 # via moto, tempora
pyvmomi==6.7.1.2018.12
pyyaml==3.13
pyzmq==18.0.1 ; python_version != "3.4"
requests==2.21.0
responses==0.10.6 # via moto
rfc3987==1.3.8
rsa==4.0 # via google-auth
s3transfer==0.2.0 # via boto3
salttesting==2017.6.1
scandir==1.10.0 # via pathlib2
setproctitle==1.1.10
singledispatch==3.4.0.3 # via tornado
six==1.12.0 # via cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, kubernetes, more-itertools, moto, pathlib2, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, singledispatch, tempora, websocket-client
smmap2==2.0.5 # via gitdb2
strict-rfc3339==0.7
tempora==1.14 # via portend
timelib==0.2.4
tornado==4.5.3 ; python_version < "3"
urllib3==1.24.1 # via botocore, kubernetes, python-etcd, requests
virtualenv==16.4.3
websocket-client==0.40.0 # via docker, kubernetes
werkzeug==0.15.0 # via moto
wrapt==1.11.1 # via aws-xray-sdk
xmltodict==0.12.0 # via moto
zc.lockfile==1.4 # via cherrypy

View File

@ -0,0 +1,37 @@
# This is a compilation of requirements installed on salt-jenkins git.salt state run
apache-libcloud==1.0.0
boto3
boto>=2.46.0
cffi
cherrypy==17.3.0
dnspython
docker
futures>=2.0; python_version < '3.0'
GitPython<2.0.9
ioflo
jsonschema<=2.6.0
junos-eznc
jxmlease
keyring==5.7.1
kubernetes<4.0
mock<1.1.0
more-itertools==5.0.0
moto
msgpack-python >= 0.4.2, != 0.5.5
psutil
pycrypto>=2.6.1
pyinotify
pyopenssl
python-etcd==0.4.2
python-gnupg
pyvmomi
pyzmq
requests
rfc3987
salttesting==2017.6.1
setproctitle
strict_rfc3339
supervisor; python_version < '3'
timelib
tornado<5.0
virtualenv

View File

@ -0,0 +1,122 @@
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile -o requirements/static/centos-6.txt requirements/zeromq.txt requirements/pytest.txt requirements/static/centos-6.in
#
apache-libcloud==1.0.0
asn1crypto==0.24.0 # via cryptography
atomicwrites==1.3.0 # via pytest
attrs==19.1.0 # via pytest
aws-xray-sdk==0.95 # via moto
backports-abc==0.5 # via tornado
backports.functools-lru-cache==1.5 # via cheroot, jaraco.functools
backports.ssl-match-hostname==3.7.0.1 # via docker, websocket-client
backports.tempfile==1.0 # via moto
backports.weakref==1.0.post1 # via backports.tempfile
bcrypt==3.1.6 # via paramiko
boto3==1.9.115
boto==2.49.0
botocore==1.12.115 # via boto3, moto, s3transfer
cachetools==3.1.0 # via google-auth
certifi==2019.3.9 # via kubernetes, requests, tornado
cffi==1.12.2
chardet==3.0.4 # via requests
cheroot==6.5.4 # via cherrypy
cherrypy==17.3.0
contextlib2==0.5.5 # via cherrypy
cookies==2.2.1 # via responses
coverage==4.5.3 # via pytest-cov
cryptography==2.6.1 # via moto, paramiko, pyopenssl
dnspython==1.16.0
docker-pycreds==0.4.0 # via docker
docker==3.7.0
docutils==0.14 # via botocore
ecdsa==0.13 # via python-jose
enum34==1.1.6 # via cryptography
funcsigs==1.0.2 # via pytest
functools32==3.2.3.post2 # via jsonschema
future==0.17.1 # via python-jose
futures==3.2.0 ; python_version < "3.0"
gitdb==0.6.4 # via gitpython
gitpython==2.0.8
google-auth==1.6.3 # via kubernetes
idna==2.8 # via requests
ioflo==1.7.5
ipaddress==1.0.22 # via cryptography, docker, kubernetes
jaraco.functools==2.0 # via tempora
jinja2==2.10
jmespath==0.9.4 # via boto3, botocore
jsondiff==1.1.1 # via moto
jsonpickle==1.1 # via aws-xray-sdk
jsonschema==2.6.0
junos-eznc==2.2.0
jxmlease==1.0.1
keyring==5.7.1
kubernetes==3.0.0
lxml==4.3.2 # via junos-eznc, ncclient
markupsafe==1.1.1
meld3==1.0.2 # via supervisor
mock==1.0.1
more-itertools==5.0.0
moto==1.3.7
msgpack-python==0.5.6
msgpack==0.6.1
ncclient==0.6.3 # via junos-eznc
netaddr==0.7.19 # via junos-eznc
paramiko==2.4.2 # via junos-eznc, ncclient, scp
pathlib2==2.3.3 # via pytest
pluggy==0.9.0 # via pytest
portend==2.3 # via cherrypy
psutil==5.6.1
py==1.8.0 # via pytest
pyaml==18.11.0 # via moto
pyasn1-modules==0.2.4 # via google-auth
pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa
pycparser==2.19 # via cffi
pycrypto==2.6.1
pycryptodome==3.7.3 # via python-jose
pyinotify==0.9.6
pynacl==1.3.0 # via paramiko
pyopenssl==19.0.0
pyserial==3.4 # via junos-eznc
pytest-cov==2.6.1
pytest-helpers-namespace==2019.1.8
pytest-salt-runtests-bridge==2019.1.30
pytest-salt==2018.12.8
pytest-tempdir==2018.8.11
pytest-timeout==1.3.3
pytest==4.3.1
python-dateutil==2.8.0 # via botocore, kubernetes, moto
python-etcd==0.4.2
python-gnupg==0.4.4
python-jose==2.0.2 # via moto
pytz==2018.9 # via moto, tempora
pyvmomi==6.7.1.2018.12
pyyaml==3.13
pyzmq==18.0.1 ; python_version != "3.4"
requests==2.21.0
responses==0.10.5 # via moto
rfc3987==1.3.8
rsa==4.0 # via google-auth
s3transfer==0.2.0 # via boto3
salttesting==2017.6.1
scandir==1.10.0 # via pathlib2
scp==0.13.1 # via junos-eznc
selectors2==2.0.1 # via ncclient
setproctitle==1.1.10
singledispatch==3.4.0.3 # via tornado
six==1.12.0 # via bcrypt, cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kubernetes, more-itertools, moto, ncclient, pathlib2, pynacl, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, singledispatch, tempora, websocket-client
smmap==0.9.0 # via gitdb
strict-rfc3339==0.7
supervisor==3.3.5 ; python_version < "3"
tempora==1.14 # via portend
timelib==0.2.4
tornado==4.5.3 ; python_version < "3"
urllib3==1.24.1 # via botocore, kubernetes, python-etcd, requests
virtualenv==16.4.3
websocket-client==0.40.0 # via docker, kubernetes
werkzeug==0.14.1 # via moto
wrapt==1.11.1 # via aws-xray-sdk
xmltodict==0.12.0 # via moto
zc.lockfile==1.4 # via cherrypy

View File

@ -0,0 +1,37 @@
# This is a compilation of requirements installed on salt-jenkins git.salt state run
apache-libcloud==1.0.0
boto3
boto>=2.46.0
cffi
cherrypy==17.3.0
dnspython
docker
futures>=2.0; python_version < '3.0'
GitPython
ioflo
jsonschema<=2.6.0
junos-eznc
jxmlease
keyring==5.7.1
kubernetes<4.0
mock<1.1.0
more-itertools==5.0.0
moto
msgpack-python >= 0.4.2, != 0.5.5
psutil
pycrypto>=2.6.1
pyinotify
pyopenssl
python-etcd==0.4.2
python-gnupg
pyvmomi
pyzmq
requests
rfc3987
salttesting==2017.6.1
setproctitle
strict_rfc3339
supervisor; python_version < '3'
timelib
tornado<5.0
virtualenv

View File

@ -0,0 +1,122 @@
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile -o requirements/static/centos-7.txt requirements/zeromq.txt requirements/pytest.txt requirements/static/centos-7.in
#
apache-libcloud==1.0.0
asn1crypto==0.24.0 # via cryptography
atomicwrites==1.3.0 # via pytest
attrs==19.1.0 # via pytest
aws-xray-sdk==0.95 # via moto
backports-abc==0.5 # via tornado
backports.functools-lru-cache==1.5 # via cheroot, jaraco.functools
backports.ssl-match-hostname==3.7.0.1 # via docker, websocket-client
backports.tempfile==1.0 # via moto
backports.weakref==1.0.post1 # via backports.tempfile
bcrypt==3.1.6 # via paramiko
boto3==1.9.115
boto==2.49.0
botocore==1.12.115 # via boto3, moto, s3transfer
cachetools==3.1.0 # via google-auth
certifi==2019.3.9 # via kubernetes, requests, tornado
cffi==1.12.2
chardet==3.0.4 # via requests
cheroot==6.5.4 # via cherrypy
cherrypy==17.3.0
contextlib2==0.5.5 # via cherrypy
cookies==2.2.1 # via responses
coverage==4.5.3 # via pytest-cov
cryptography==2.6.1 # via moto, paramiko, pyopenssl
dnspython==1.16.0
docker-pycreds==0.4.0 # via docker
docker==3.7.0
docutils==0.14 # via botocore
ecdsa==0.13 # via python-jose
enum34==1.1.6 # via cryptography
funcsigs==1.0.2 # via pytest
functools32==3.2.3.post2 # via jsonschema
future==0.17.1 # via python-jose
futures==3.2.0 ; python_version < "3.0"
gitdb2==2.0.5 # via gitpython
gitpython==2.1.11
google-auth==1.6.3 # via kubernetes
idna==2.8 # via requests
ioflo==1.7.5
ipaddress==1.0.22 # via cryptography, docker, kubernetes
jaraco.functools==2.0 # via tempora
jinja2==2.10
jmespath==0.9.4 # via boto3, botocore
jsondiff==1.1.1 # via moto
jsonpickle==1.1 # via aws-xray-sdk
jsonschema==2.6.0
junos-eznc==2.2.0
jxmlease==1.0.1
keyring==5.7.1
kubernetes==3.0.0
lxml==4.3.2 # via junos-eznc, ncclient
markupsafe==1.1.1
meld3==1.0.2 # via supervisor
mock==1.0.1
more-itertools==5.0.0
moto==1.3.7
msgpack-python==0.5.6
msgpack==0.6.1
ncclient==0.6.3 # via junos-eznc
netaddr==0.7.19 # via junos-eznc
paramiko==2.4.2 # via junos-eznc, ncclient, scp
pathlib2==2.3.3 # via pytest
pluggy==0.9.0 # via pytest
portend==2.3 # via cherrypy
psutil==5.6.1
py==1.8.0 # via pytest
pyaml==18.11.0 # via moto
pyasn1-modules==0.2.4 # via google-auth
pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa
pycparser==2.19 # via cffi
pycrypto==2.6.1
pycryptodome==3.7.3 # via python-jose
pyinotify==0.9.6
pynacl==1.3.0 # via paramiko
pyopenssl==19.0.0
pyserial==3.4 # via junos-eznc
pytest-cov==2.6.1
pytest-helpers-namespace==2019.1.8
pytest-salt-runtests-bridge==2019.1.30
pytest-salt==2018.12.8
pytest-tempdir==2018.8.11
pytest-timeout==1.3.3
pytest==4.3.1
python-dateutil==2.8.0 # via botocore, kubernetes, moto
python-etcd==0.4.2
python-gnupg==0.4.4
python-jose==2.0.2 # via moto
pytz==2018.9 # via moto, tempora
pyvmomi==6.7.1.2018.12
pyyaml==3.13
pyzmq==18.0.1 ; python_version != "3.4"
requests==2.21.0
responses==0.10.5 # via moto
rfc3987==1.3.8
rsa==4.0 # via google-auth
s3transfer==0.2.0 # via boto3
salttesting==2017.6.1
scandir==1.10.0 # via pathlib2
scp==0.13.1 # via junos-eznc
selectors2==2.0.1 # via ncclient
setproctitle==1.1.10
singledispatch==3.4.0.3 # via tornado
six==1.12.0 # via bcrypt, cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kubernetes, more-itertools, moto, ncclient, pathlib2, pynacl, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, singledispatch, tempora, websocket-client
smmap2==2.0.5 # via gitdb2
strict-rfc3339==0.7
supervisor==3.3.5 ; python_version < "3"
tempora==1.14 # via portend
timelib==0.2.4
tornado==4.5.3 ; python_version < "3"
urllib3==1.24.1 # via botocore, kubernetes, python-etcd, requests
virtualenv==16.4.3
websocket-client==0.40.0 # via docker, kubernetes
werkzeug==0.14.1 # via moto
wrapt==1.11.1 # via aws-xray-sdk
xmltodict==0.12.0 # via moto
zc.lockfile==1.4 # via cherrypy

View File

@ -0,0 +1,37 @@
# This is a compilation of requirements installed on salt-jenkins git.salt state run
apache-libcloud==1.0.0
boto3
boto>=2.46.0
cffi
cherrypy==17.3.0
dnspython
docker
futures>=2.0; python_version < '3.0'
GitPython
ioflo
jsonschema<=2.6.0
junos-eznc
jxmlease
keyring==5.7.1
kubernetes<4.0
mock<1.1.0
more-itertools==5.0.0
moto
msgpack-python >= 0.4.2, != 0.5.5
paramiko==2.1.2
psutil
pycrypto>=2.6.1
pyinotify
pyopenssl
python-etcd==0.4.2
python-gnupg
pyvmomi
pyzmq
requests
rfc3987
salttesting==2017.6.1
setproctitle
strict_rfc3339
timelib
tornado<5.0
virtualenv

View File

@ -0,0 +1,118 @@
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile -o requirements/static/debian-8.txt requirements/zeromq.txt requirements/pytest.txt requirements/static/debian-8.in
#
apache-libcloud==1.0.0
asn1crypto==0.24.0 # via cryptography
atomicwrites==1.3.0 # via pytest
attrs==19.1.0 # via pytest
aws-xray-sdk==0.95 # via moto
backports-abc==0.5 # via tornado
backports.functools-lru-cache==1.5 # via cheroot, jaraco.functools
backports.ssl-match-hostname==3.7.0.1 # via docker, websocket-client
backports.tempfile==1.0 # via moto
backports.weakref==1.0.post1 # via backports.tempfile
boto3==1.9.115
boto==2.49.0
botocore==1.12.115 # via boto3, moto, s3transfer
cachetools==3.1.0 # via google-auth
certifi==2019.3.9 # via kubernetes, requests, tornado
cffi==1.12.2
chardet==3.0.4 # via requests
cheroot==6.5.4 # via cherrypy
cherrypy==17.3.0
contextlib2==0.5.5 # via cherrypy
cookies==2.2.1 # via responses
coverage==4.5.3 # via pytest-cov
cryptography==2.6.1 # via moto, paramiko, pyopenssl
dnspython==1.16.0
docker-pycreds==0.4.0 # via docker
docker==3.7.0
docutils==0.14 # via botocore
ecdsa==0.13 # via python-jose
enum34==1.1.6 # via cryptography
funcsigs==1.0.2 # via pytest
functools32==3.2.3.post2 # via jsonschema
future==0.17.1 # via python-jose
futures==3.2.0 ; python_version < "3.0"
gitdb2==2.0.5 # via gitpython
gitpython==2.1.11
google-auth==1.6.3 # via kubernetes
idna==2.8 # via requests
ioflo==1.7.5
ipaddress==1.0.22 # via cryptography, docker, kubernetes
jaraco.functools==2.0 # via tempora
jinja2==2.10
jmespath==0.9.4 # via boto3, botocore
jsondiff==1.1.1 # via moto
jsonpickle==1.1 # via aws-xray-sdk
jsonschema==2.6.0
junos-eznc==2.2.0
jxmlease==1.0.1
keyring==5.7.1
kubernetes==3.0.0
lxml==4.3.2 # via junos-eznc, ncclient
markupsafe==1.1.1
mock==1.0.1
more-itertools==5.0.0
moto==1.3.7
msgpack-python==0.5.6
msgpack==0.6.1
ncclient==0.6.3 # via junos-eznc
netaddr==0.7.19 # via junos-eznc
paramiko==2.1.2
pathlib2==2.3.3 # via pytest
pluggy==0.9.0 # via pytest
portend==2.3 # via cherrypy
psutil==5.6.1
py==1.8.0 # via pytest
pyaml==18.11.0 # via moto
pyasn1-modules==0.2.4 # via google-auth
pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa
pycparser==2.19 # via cffi
pycrypto==2.6.1
pycryptodome==3.7.3 # via python-jose
pyinotify==0.9.6
pyopenssl==19.0.0
pyserial==3.4 # via junos-eznc
pytest-cov==2.6.1
pytest-helpers-namespace==2019.1.8
pytest-salt-runtests-bridge==2019.1.30
pytest-salt==2018.12.8
pytest-tempdir==2018.8.11
pytest-timeout==1.3.3
pytest==4.3.1
python-dateutil==2.8.0 # via botocore, kubernetes, moto
python-etcd==0.4.2
python-gnupg==0.4.4
python-jose==2.0.2 # via moto
pytz==2018.9 # via moto, tempora
pyvmomi==6.7.1.2018.12
pyyaml==3.13
pyzmq==18.0.1 ; python_version != "3.4"
requests==2.21.0
responses==0.10.5 # via moto
rfc3987==1.3.8
rsa==4.0 # via google-auth
s3transfer==0.2.0 # via boto3
salttesting==2017.6.1
scandir==1.10.0 # via pathlib2
scp==0.13.1 # via junos-eznc
selectors2==2.0.1 # via ncclient
setproctitle==1.1.10
singledispatch==3.4.0.3 # via tornado
six==1.12.0 # via cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kubernetes, more-itertools, moto, ncclient, pathlib2, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, singledispatch, tempora, websocket-client
smmap2==2.0.5 # via gitdb2
strict-rfc3339==0.7
tempora==1.14 # via portend
timelib==0.2.4
tornado==4.5.3 ; python_version < "3"
urllib3==1.24.1 # via botocore, kubernetes, python-etcd, requests
virtualenv==16.4.3
websocket-client==0.40.0 # via docker, kubernetes
werkzeug==0.14.1 # via moto
wrapt==1.11.1 # via aws-xray-sdk
xmltodict==0.12.0 # via moto
zc.lockfile==1.4 # via cherrypy

View File

@ -0,0 +1,37 @@
# This is a compilation of requirements installed on salt-jenkins git.salt state run
apache-libcloud==1.0.0
boto3
boto>=2.46.0
cffi
cherrypy==17.3.0
dnspython
docker
futures>=2.0; python_version < '3.0'
GitPython
ioflo
jsonschema<=2.6.0
junos-eznc
jxmlease
keyring==5.7.1
kubernetes<4.0
mock<1.1.0
more-itertools==5.0.0
moto
msgpack-python >= 0.4.2, != 0.5.5
paramiko==2.1.2
psutil
pycrypto>=2.6.1
pyinotify
pyopenssl
python-etcd==0.4.2
python-gnupg
pyvmomi
pyzmq
requests
rfc3987
salttesting==2017.6.1
setproctitle
strict_rfc3339
timelib
tornado<5.0
virtualenv

View File

@ -0,0 +1,118 @@
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile -o requirements/static/debian-9.txt requirements/zeromq.txt requirements/pytest.txt requirements/static/debian-9.in
#
apache-libcloud==1.0.0
asn1crypto==0.24.0 # via cryptography
atomicwrites==1.3.0 # via pytest
attrs==19.1.0 # via pytest
aws-xray-sdk==0.95 # via moto
backports-abc==0.5 # via tornado
backports.functools-lru-cache==1.5 # via cheroot, jaraco.functools
backports.ssl-match-hostname==3.7.0.1 # via docker, websocket-client
backports.tempfile==1.0 # via moto
backports.weakref==1.0.post1 # via backports.tempfile
boto3==1.9.115
boto==2.49.0
botocore==1.12.115 # via boto3, moto, s3transfer
cachetools==3.1.0 # via google-auth
certifi==2019.3.9 # via kubernetes, requests, tornado
cffi==1.12.2
chardet==3.0.4 # via requests
cheroot==6.5.4 # via cherrypy
cherrypy==17.3.0
contextlib2==0.5.5 # via cherrypy
cookies==2.2.1 # via responses
coverage==4.5.3 # via pytest-cov
cryptography==2.6.1 # via moto, paramiko, pyopenssl
dnspython==1.16.0
docker-pycreds==0.4.0 # via docker
docker==3.7.0
docutils==0.14 # via botocore
ecdsa==0.13 # via python-jose
enum34==1.1.6 # via cryptography
funcsigs==1.0.2 # via pytest
functools32==3.2.3.post2 # via jsonschema
future==0.17.1 # via python-jose
futures==3.2.0 ; python_version < "3.0"
gitdb2==2.0.5 # via gitpython
gitpython==2.1.11
google-auth==1.6.3 # via kubernetes
idna==2.8 # via requests
ioflo==1.7.5
ipaddress==1.0.22 # via cryptography, docker, kubernetes
jaraco.functools==2.0 # via tempora
jinja2==2.10
jmespath==0.9.4 # via boto3, botocore
jsondiff==1.1.1 # via moto
jsonpickle==1.1 # via aws-xray-sdk
jsonschema==2.6.0
junos-eznc==2.2.0
jxmlease==1.0.1
keyring==5.7.1
kubernetes==3.0.0
lxml==4.3.2 # via junos-eznc, ncclient
markupsafe==1.1.1
mock==1.0.1
more-itertools==5.0.0
moto==1.3.7
msgpack-python==0.5.6
msgpack==0.6.1
ncclient==0.6.3 # via junos-eznc
netaddr==0.7.19 # via junos-eznc
paramiko==2.1.2
pathlib2==2.3.3 # via pytest
pluggy==0.9.0 # via pytest
portend==2.3 # via cherrypy
psutil==5.6.1
py==1.8.0 # via pytest
pyaml==18.11.0 # via moto
pyasn1-modules==0.2.4 # via google-auth
pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa
pycparser==2.19 # via cffi
pycrypto==2.6.1
pycryptodome==3.7.3 # via python-jose
pyinotify==0.9.6
pyopenssl==19.0.0
pyserial==3.4 # via junos-eznc
pytest-cov==2.6.1
pytest-helpers-namespace==2019.1.8
pytest-salt-runtests-bridge==2019.1.30
pytest-salt==2018.12.8
pytest-tempdir==2018.8.11
pytest-timeout==1.3.3
pytest==4.3.1
python-dateutil==2.8.0 # via botocore, kubernetes, moto
python-etcd==0.4.2
python-gnupg==0.4.4
python-jose==2.0.2 # via moto
pytz==2018.9 # via moto, tempora
pyvmomi==6.7.1.2018.12
pyyaml==3.13
pyzmq==18.0.1 ; python_version != "3.4"
requests==2.21.0
responses==0.10.5 # via moto
rfc3987==1.3.8
rsa==4.0 # via google-auth
s3transfer==0.2.0 # via boto3
salttesting==2017.6.1
scandir==1.10.0 # via pathlib2
scp==0.13.1 # via junos-eznc
selectors2==2.0.1 # via ncclient
setproctitle==1.1.10
singledispatch==3.4.0.3 # via tornado
six==1.12.0 # via cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kubernetes, more-itertools, moto, ncclient, pathlib2, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, singledispatch, tempora, websocket-client
smmap2==2.0.5 # via gitdb2
strict-rfc3339==0.7
tempora==1.14 # via portend
timelib==0.2.4
tornado==4.5.3 ; python_version < "3"
urllib3==1.24.1 # via botocore, kubernetes, python-etcd, requests
virtualenv==16.4.3
websocket-client==0.40.0 # via docker, kubernetes
werkzeug==0.14.1 # via moto
wrapt==1.11.1 # via aws-xray-sdk
xmltodict==0.12.0 # via moto
zc.lockfile==1.4 # via cherrypy

View File

@ -0,0 +1,36 @@
# This is a compilation of requirements installed on salt-jenkins git.salt state run
apache-libcloud==1.0.0
boto3
boto>=2.46.0
cffi
cherrypy==17.3.0
dnspython
docker
futures>=2.0; python_version < '3.0'
GitPython
ioflo
jsonschema<=2.6.0
junos-eznc
jxmlease
keyring==5.7.1
kubernetes<4.0
mock<1.1.0
more-itertools==5.0.0
moto
msgpack-python >= 0.4.2, != 0.5.5
psutil
pycrypto>=2.6.1
pyinotify
pyopenssl
python-etcd==0.4.2
python-gnupg
pyvmomi
pyzmq
requests
rfc3987
salttesting==2017.6.1
setproctitle
strict_rfc3339
timelib
tornado<5.0
virtualenv

View File

@ -0,0 +1,120 @@
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile -o requirements/static/fedora-28.txt requirements/zeromq.txt requirements/pytest.txt requirements/static/fedora-28.in
#
apache-libcloud==1.0.0
asn1crypto==0.24.0 # via cryptography
atomicwrites==1.3.0 # via pytest
attrs==19.1.0 # via pytest
aws-xray-sdk==0.95 # via moto
backports-abc==0.5 # via tornado
backports.functools-lru-cache==1.5 # via cheroot, jaraco.functools
backports.ssl-match-hostname==3.7.0.1 # via docker, websocket-client
backports.tempfile==1.0 # via moto
backports.weakref==1.0.post1 # via backports.tempfile
bcrypt==3.1.6 # via paramiko
boto3==1.9.115
boto==2.49.0
botocore==1.12.115 # via boto3, moto, s3transfer
cachetools==3.1.0 # via google-auth
certifi==2019.3.9 # via kubernetes, requests, tornado
cffi==1.12.2
chardet==3.0.4 # via requests
cheroot==6.5.4 # via cherrypy
cherrypy==17.3.0
contextlib2==0.5.5 # via cherrypy
cookies==2.2.1 # via responses
coverage==4.5.3 # via pytest-cov
cryptography==2.6.1 # via moto, paramiko, pyopenssl
dnspython==1.16.0
docker-pycreds==0.4.0 # via docker
docker==3.7.0
docutils==0.14 # via botocore
ecdsa==0.13 # via python-jose
enum34==1.1.6 # via cryptography
funcsigs==1.0.2 # via pytest
functools32==3.2.3.post2 # via jsonschema
future==0.17.1 # via python-jose
futures==3.2.0 ; python_version < "3.0"
gitdb2==2.0.5 # via gitpython
gitpython==2.1.11
google-auth==1.6.3 # via kubernetes
idna==2.8 # via requests
ioflo==1.7.5
ipaddress==1.0.22 # via cryptography, docker, kubernetes
jaraco.functools==2.0 # via tempora
jinja2==2.10
jmespath==0.9.4 # via boto3, botocore
jsondiff==1.1.1 # via moto
jsonpickle==1.1 # via aws-xray-sdk
jsonschema==2.6.0
junos-eznc==2.2.0
jxmlease==1.0.1
keyring==5.7.1
kubernetes==3.0.0
lxml==4.3.2 # via junos-eznc, ncclient
markupsafe==1.1.1
mock==1.0.1
more-itertools==5.0.0
moto==1.3.7
msgpack-python==0.5.6
msgpack==0.6.1
ncclient==0.6.3 # via junos-eznc
netaddr==0.7.19 # via junos-eznc
paramiko==2.4.2 # via junos-eznc, ncclient, scp
pathlib2==2.3.3 # via pytest
pluggy==0.9.0 # via pytest
portend==2.3 # via cherrypy
psutil==5.6.1
py==1.8.0 # via pytest
pyaml==18.11.0 # via moto
pyasn1-modules==0.2.4 # via google-auth
pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa
pycparser==2.19 # via cffi
pycrypto==2.6.1
pycryptodome==3.7.3 # via python-jose
pyinotify==0.9.6
pynacl==1.3.0 # via paramiko
pyopenssl==19.0.0
pyserial==3.4 # via junos-eznc
pytest-cov==2.6.1
pytest-helpers-namespace==2019.1.8
pytest-salt-runtests-bridge==2019.1.30
pytest-salt==2018.12.8
pytest-tempdir==2018.8.11
pytest-timeout==1.3.3
pytest==4.3.1
python-dateutil==2.8.0 # via botocore, kubernetes, moto
python-etcd==0.4.2
python-gnupg==0.4.4
python-jose==2.0.2 # via moto
pytz==2018.9 # via moto, tempora
pyvmomi==6.7.1.2018.12
pyyaml==3.13
pyzmq==18.0.1 ; python_version != "3.4"
requests==2.21.0
responses==0.10.5 # via moto
rfc3987==1.3.8
rsa==4.0 # via google-auth
s3transfer==0.2.0 # via boto3
salttesting==2017.6.1
scandir==1.10.0 # via pathlib2
scp==0.13.1 # via junos-eznc
selectors2==2.0.1 # via ncclient
setproctitle==1.1.10
singledispatch==3.4.0.3 # via tornado
six==1.12.0 # via bcrypt, cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kubernetes, more-itertools, moto, ncclient, pathlib2, pynacl, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, singledispatch, tempora, websocket-client
smmap2==2.0.5 # via gitdb2
strict-rfc3339==0.7
tempora==1.14 # via portend
timelib==0.2.4
tornado==4.5.3 ; python_version < "3"
urllib3==1.24.1 # via botocore, kubernetes, python-etcd, requests
virtualenv==16.4.3
websocket-client==0.40.0 # via docker, kubernetes
werkzeug==0.14.1 # via moto
wrapt==1.11.1 # via aws-xray-sdk
xmltodict==0.12.0 # via moto
zc.lockfile==1.4 # via cherrypy

View File

@ -0,0 +1,36 @@
# This is a compilation of requirements installed on salt-jenkins git.salt state run
apache-libcloud==1.0.0
boto3
boto>=2.46.0
cffi
cherrypy==17.3.0
dnspython
docker
futures>=2.0; python_version < '3.0'
GitPython
ioflo
jsonschema<=2.6.0
junos-eznc
jxmlease
keyring==5.7.1
kubernetes<4.0
mock<1.1.0
more-itertools==5.0.0
moto
msgpack-python >= 0.4.2, != 0.5.5
psutil
pycrypto>=2.6.1
pyinotify
pyopenssl
python-etcd==0.4.2
python-gnupg
pyvmomi
pyzmq
requests
rfc3987
salttesting==2017.6.1
setproctitle
strict_rfc3339
timelib
tornado<5.0
virtualenv

View File

@ -0,0 +1,120 @@
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile -o requirements/static/fedora-29.txt requirements/zeromq.txt requirements/pytest.txt requirements/static/fedora-29.in
#
apache-libcloud==1.0.0
asn1crypto==0.24.0 # via cryptography
atomicwrites==1.3.0 # via pytest
attrs==19.1.0 # via pytest
aws-xray-sdk==0.95 # via moto
backports-abc==0.5 # via tornado
backports.functools-lru-cache==1.5 # via cheroot, jaraco.functools
backports.ssl-match-hostname==3.7.0.1 # via docker, websocket-client
backports.tempfile==1.0 # via moto
backports.weakref==1.0.post1 # via backports.tempfile
bcrypt==3.1.6 # via paramiko
boto3==1.9.115
boto==2.49.0
botocore==1.12.115 # via boto3, moto, s3transfer
cachetools==3.1.0 # via google-auth
certifi==2019.3.9 # via kubernetes, requests, tornado
cffi==1.12.2
chardet==3.0.4 # via requests
cheroot==6.5.4 # via cherrypy
cherrypy==17.3.0
contextlib2==0.5.5 # via cherrypy
cookies==2.2.1 # via responses
coverage==4.5.3 # via pytest-cov
cryptography==2.6.1 # via moto, paramiko, pyopenssl
dnspython==1.16.0
docker-pycreds==0.4.0 # via docker
docker==3.7.0
docutils==0.14 # via botocore
ecdsa==0.13 # via python-jose
enum34==1.1.6 # via cryptography
funcsigs==1.0.2 # via pytest
functools32==3.2.3.post2 # via jsonschema
future==0.17.1 # via python-jose
futures==3.2.0 ; python_version < "3.0"
gitdb2==2.0.5 # via gitpython
gitpython==2.1.11
google-auth==1.6.3 # via kubernetes
idna==2.8 # via requests
ioflo==1.7.5
ipaddress==1.0.22 # via cryptography, docker, kubernetes
jaraco.functools==2.0 # via tempora
jinja2==2.10
jmespath==0.9.4 # via boto3, botocore
jsondiff==1.1.1 # via moto
jsonpickle==1.1 # via aws-xray-sdk
jsonschema==2.6.0
junos-eznc==2.2.0
jxmlease==1.0.1
keyring==5.7.1
kubernetes==3.0.0
lxml==4.3.2 # via junos-eznc, ncclient
markupsafe==1.1.1
mock==1.0.1
more-itertools==5.0.0
moto==1.3.7
msgpack-python==0.5.6
msgpack==0.6.1
ncclient==0.6.3 # via junos-eznc
netaddr==0.7.19 # via junos-eznc
paramiko==2.4.2 # via junos-eznc, ncclient, scp
pathlib2==2.3.3 # via pytest
pluggy==0.9.0 # via pytest
portend==2.3 # via cherrypy
psutil==5.6.1
py==1.8.0 # via pytest
pyaml==18.11.0 # via moto
pyasn1-modules==0.2.4 # via google-auth
pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa
pycparser==2.19 # via cffi
pycrypto==2.6.1
pycryptodome==3.7.3 # via python-jose
pyinotify==0.9.6
pynacl==1.3.0 # via paramiko
pyopenssl==19.0.0
pyserial==3.4 # via junos-eznc
pytest-cov==2.6.1
pytest-helpers-namespace==2019.1.8
pytest-salt-runtests-bridge==2019.1.30
pytest-salt==2018.12.8
pytest-tempdir==2018.8.11
pytest-timeout==1.3.3
pytest==4.3.1
python-dateutil==2.8.0 # via botocore, kubernetes, moto
python-etcd==0.4.2
python-gnupg==0.4.4
python-jose==2.0.2 # via moto
pytz==2018.9 # via moto, tempora
pyvmomi==6.7.1.2018.12
pyyaml==3.13
pyzmq==18.0.1 ; python_version != "3.4"
requests==2.21.0
responses==0.10.5 # via moto
rfc3987==1.3.8
rsa==4.0 # via google-auth
s3transfer==0.2.0 # via boto3
salttesting==2017.6.1
scandir==1.10.0 # via pathlib2
scp==0.13.1 # via junos-eznc
selectors2==2.0.1 # via ncclient
setproctitle==1.1.10
singledispatch==3.4.0.3 # via tornado
six==1.12.0 # via bcrypt, cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kubernetes, more-itertools, moto, ncclient, pathlib2, pynacl, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, singledispatch, tempora, websocket-client
smmap2==2.0.5 # via gitdb2
strict-rfc3339==0.7
tempora==1.14 # via portend
timelib==0.2.4
tornado==4.5.3 ; python_version < "3"
urllib3==1.24.1 # via botocore, kubernetes, python-etcd, requests
virtualenv==16.4.3
websocket-client==0.40.0 # via docker, kubernetes
werkzeug==0.14.1 # via moto
wrapt==1.11.1 # via aws-xray-sdk
xmltodict==0.12.0 # via moto
zc.lockfile==1.4 # via cherrypy

View File

@ -0,0 +1,38 @@
# This is a compilation of requirements installed on salt-jenkins git.salt state run
apache-libcloud==1.0.0
boto3
boto>=2.46.0
certifi
cffi
cherrypy==17.3.0
dnspython
docker
futures>=2.0; python_version < '3.0'
GitPython
hgtools
ioflo
jsonschema<=2.6.0
keyring==5.7.1
kubernetes<4.0
mock<1.1.0
more-itertools==5.0.0
moto
msgpack-python >= 0.4.2, != 0.5.5
psutil
pycrypto>=2.6.1
pyinotify
pyopenssl
python-etcd==0.4.2
python-gnupg
pyvmomi
pyzmq
requests
rfc3987
salttesting==2017.6.1
setproctitle
setuptools-scm
strict_rfc3339
supervisor; python_version < '3'
timelib
tornado<5.0
virtualenv

View File

@ -0,0 +1,113 @@
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile -o requirements/static/opensuse-42.txt requirements/zeromq.txt requirements/pytest.txt requirements/static/opensuse-42.in
#
apache-libcloud==1.0.0
asn1crypto==0.24.0 # via cryptography
atomicwrites==1.3.0 # via pytest
attrs==19.1.0 # via pytest
aws-xray-sdk==0.95 # via moto
backports-abc==0.5 # via tornado
backports.functools-lru-cache==1.5 # via cheroot, jaraco.functools
backports.ssl-match-hostname==3.7.0.1 # via docker, websocket-client
backports.tempfile==1.0 # via moto
backports.weakref==1.0.post1 # via backports.tempfile
boto3==1.9.115
boto==2.49.0
botocore==1.12.115 # via boto3, moto, s3transfer
cachetools==3.1.0 # via google-auth
certifi==2019.3.9
cffi==1.12.2
chardet==3.0.4 # via requests
cheroot==6.5.4 # via cherrypy
cherrypy==17.3.0
contextlib2==0.5.5 # via cherrypy
cookies==2.2.1 # via responses
coverage==4.5.3 # via pytest-cov
cryptography==2.6.1 # via moto, pyopenssl
dnspython==1.16.0
docker-pycreds==0.4.0 # via docker
docker==3.7.0
docutils==0.14 # via botocore
ecdsa==0.13 # via python-jose
enum34==1.1.6 # via cryptography
funcsigs==1.0.2 # via pytest
functools32==3.2.3.post2 # via jsonschema
future==0.17.1 # via python-jose
futures==3.2.0 ; python_version < "3.0"
gitdb2==2.0.5 # via gitpython
gitpython==2.1.11
google-auth==1.6.3 # via kubernetes
hgtools==8.1.1
idna==2.8 # via requests
ioflo==1.7.5
ipaddress==1.0.22 # via cryptography, docker, kubernetes
jaraco.functools==2.0 # via tempora
jinja2==2.10
jmespath==0.9.4 # via boto3, botocore
jsondiff==1.1.1 # via moto
jsonpickle==1.1 # via aws-xray-sdk
jsonschema==2.6.0
keyring==5.7.1
kubernetes==3.0.0
markupsafe==1.1.1
meld3==1.0.2 # via supervisor
mock==1.0.1
more-itertools==5.0.0
moto==1.3.7
msgpack-python==0.5.6
msgpack==0.6.1
pathlib2==2.3.3 # via pytest
pluggy==0.9.0 # via pytest
portend==2.3 # via cherrypy
psutil==5.6.1
py==1.8.0 # via pytest
pyaml==18.11.0 # via moto
pyasn1-modules==0.2.4 # via google-auth
pyasn1==0.4.5 # via pyasn1-modules, rsa
pycparser==2.19 # via cffi
pycrypto==2.6.1
pycryptodome==3.7.3 # via python-jose
pyinotify==0.9.6
pyopenssl==19.0.0
pytest-cov==2.6.1
pytest-helpers-namespace==2019.1.8
pytest-salt-runtests-bridge==2019.1.30
pytest-salt==2018.12.8
pytest-tempdir==2018.8.11
pytest-timeout==1.3.3
pytest==4.3.1
python-dateutil==2.8.0 # via botocore, kubernetes, moto
python-etcd==0.4.2
python-gnupg==0.4.4
python-jose==2.0.2 # via moto
pytz==2018.9 # via moto, tempora
pyvmomi==6.7.1.2018.12
pyyaml==3.13
pyzmq==18.0.1 ; python_version != "3.4"
requests==2.21.0
responses==0.10.5 # via moto
rfc3987==1.3.8
rsa==4.0 # via google-auth
s3transfer==0.2.0 # via boto3
salttesting==2017.6.1
scandir==1.10.0 # via pathlib2
setproctitle==1.1.10
setuptools-scm==3.2.0
singledispatch==3.4.0.3 # via tornado
six==1.12.0 # via cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, kubernetes, more-itertools, moto, pathlib2, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, singledispatch, tempora, websocket-client
smmap2==2.0.5 # via gitdb2
strict-rfc3339==0.7
supervisor==3.3.5 ; python_version < "3"
tempora==1.14 # via portend
timelib==0.2.4
tornado==4.5.3 ; python_version < "3"
urllib3==1.24.1 # via botocore, kubernetes, python-etcd, requests
virtualenv==16.4.3
websocket-client==0.40.0 # via docker, kubernetes
werkzeug==0.14.1 # via moto
wrapt==1.11.1 # via aws-xray-sdk
xmltodict==0.12.0 # via moto
zc.lockfile==1.4 # via cherrypy

View File

@ -0,0 +1,37 @@
# This is a compilation of requirements installed on salt-jenkins git.salt state run
apache-libcloud==1.0.0
boto3
boto>=2.46.0
certifi
cffi
cherrypy==17.3.0
dnspython
docker
futures>=2.0; python_version < '3.0'
GitPython
hgtools
ioflo
jsonschema<=2.6.0
keyring==5.7.1
kubernetes<4.0
mock<1.1.0
more-itertools==5.0.0
moto
msgpack-python >= 0.4.2, != 0.5.5
psutil
pycrypto>=2.6.1
pyinotify
pyopenssl
python-etcd==0.4.2
python-gnupg
pyvmomi
pyzmq
requests
rfc3987
salttesting==2017.6.1
setproctitle
setuptools-scm
strict_rfc3339
timelib
tornado<5.0
virtualenv

View File

@ -0,0 +1,111 @@
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile -o requirements/static/opensuse-leap-15.txt requirements/zeromq.txt requirements/pytest.txt requirements/static/opensuse-leap-15.in
#
apache-libcloud==1.0.0
asn1crypto==0.24.0 # via cryptography
atomicwrites==1.3.0 # via pytest
attrs==19.1.0 # via pytest
aws-xray-sdk==0.95 # via moto
backports-abc==0.5 # via tornado
backports.functools-lru-cache==1.5 # via cheroot, jaraco.functools
backports.ssl-match-hostname==3.7.0.1 # via docker, websocket-client
backports.tempfile==1.0 # via moto
backports.weakref==1.0.post1 # via backports.tempfile
boto3==1.9.115
boto==2.49.0
botocore==1.12.115 # via boto3, moto, s3transfer
cachetools==3.1.0 # via google-auth
certifi==2019.3.9
cffi==1.12.2
chardet==3.0.4 # via requests
cheroot==6.5.4 # via cherrypy
cherrypy==17.3.0
contextlib2==0.5.5 # via cherrypy
cookies==2.2.1 # via responses
coverage==4.5.3 # via pytest-cov
cryptography==2.6.1 # via moto, pyopenssl
dnspython==1.16.0
docker-pycreds==0.4.0 # via docker
docker==3.7.0
docutils==0.14 # via botocore
ecdsa==0.13 # via python-jose
enum34==1.1.6 # via cryptography
funcsigs==1.0.2 # via pytest
functools32==3.2.3.post2 # via jsonschema
future==0.17.1 # via python-jose
futures==3.2.0 ; python_version < "3.0"
gitdb2==2.0.5 # via gitpython
gitpython==2.1.11
google-auth==1.6.3 # via kubernetes
hgtools==8.1.1
idna==2.8 # via requests
ioflo==1.7.5
ipaddress==1.0.22 # via cryptography, docker, kubernetes
jaraco.functools==2.0 # via tempora
jinja2==2.10
jmespath==0.9.4 # via boto3, botocore
jsondiff==1.1.1 # via moto
jsonpickle==1.1 # via aws-xray-sdk
jsonschema==2.6.0
keyring==5.7.1
kubernetes==3.0.0
markupsafe==1.1.1
mock==1.0.1
more-itertools==5.0.0
moto==1.3.7
msgpack-python==0.5.6
msgpack==0.6.1
pathlib2==2.3.3 # via pytest
pluggy==0.9.0 # via pytest
portend==2.3 # via cherrypy
psutil==5.6.1
py==1.8.0 # via pytest
pyaml==18.11.0 # via moto
pyasn1-modules==0.2.4 # via google-auth
pyasn1==0.4.5 # via pyasn1-modules, rsa
pycparser==2.19 # via cffi
pycrypto==2.6.1
pycryptodome==3.7.3 # via python-jose
pyinotify==0.9.6
pyopenssl==19.0.0
pytest-cov==2.6.1
pytest-helpers-namespace==2019.1.8
pytest-salt-runtests-bridge==2019.1.30
pytest-salt==2018.12.8
pytest-tempdir==2018.8.11
pytest-timeout==1.3.3
pytest==4.3.1
python-dateutil==2.8.0 # via botocore, kubernetes, moto
python-etcd==0.4.2
python-gnupg==0.4.4
python-jose==2.0.2 # via moto
pytz==2018.9 # via moto, tempora
pyvmomi==6.7.1.2018.12
pyyaml==3.13
pyzmq==18.0.1 ; python_version != "3.4"
requests==2.21.0
responses==0.10.5 # via moto
rfc3987==1.3.8
rsa==4.0 # via google-auth
s3transfer==0.2.0 # via boto3
salttesting==2017.6.1
scandir==1.10.0 # via pathlib2
setproctitle==1.1.10
setuptools-scm==3.2.0
singledispatch==3.4.0.3 # via tornado
six==1.12.0 # via cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, kubernetes, more-itertools, moto, pathlib2, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, singledispatch, tempora, websocket-client
smmap2==2.0.5 # via gitdb2
strict-rfc3339==0.7
tempora==1.14 # via portend
timelib==0.2.4
tornado==4.5.3 ; python_version < "3"
urllib3==1.24.1 # via botocore, kubernetes, python-etcd, requests
virtualenv==16.4.3
websocket-client==0.40.0 # via docker, kubernetes
werkzeug==0.14.1 # via moto
wrapt==1.11.1 # via aws-xray-sdk
xmltodict==0.12.0 # via moto
zc.lockfile==1.4 # via cherrypy

View File

@ -0,0 +1,37 @@
# This is a compilation of requirements installed on salt-jenkins git.salt state run
apache-libcloud==1.0.0
boto3
boto>=2.46.0
cffi
cherrypy==17.3.0
dnspython
docker
futures>=2.0; python_version < '3.0'
GitPython
ioflo
jsonschema<=2.6.0
junos-eznc
jxmlease
keyring==5.7.1
kubernetes<4.0
mock<1.1.0
more-itertools==5.0.0
moto
msgpack-python >= 0.4.2, != 0.5.5
paramiko==2.1.2
psutil
pycrypto>=2.6.1
pyinotify
pyopenssl
python-etcd==0.4.2
python-gnupg
pyvmomi
pyzmq
requests
rfc3987
salttesting==2017.6.1
setproctitle
strict_rfc3339
timelib
tornado<5.0
virtualenv

View File

@ -0,0 +1,118 @@
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile -o requirements/static/ubuntu-14.04.txt requirements/zeromq.txt requirements/pytest.txt requirements/static/ubuntu-14.04.in
#
apache-libcloud==1.0.0
asn1crypto==0.24.0 # via cryptography
atomicwrites==1.3.0 # via pytest
attrs==19.1.0 # via pytest
aws-xray-sdk==0.95 # via moto
backports-abc==0.5 # via tornado
backports.functools-lru-cache==1.5 # via cheroot, jaraco.functools
backports.ssl-match-hostname==3.7.0.1 # via docker, websocket-client
backports.tempfile==1.0 # via moto
backports.weakref==1.0.post1 # via backports.tempfile
boto3==1.9.115
boto==2.49.0
botocore==1.12.115 # via boto3, moto, s3transfer
cachetools==3.1.0 # via google-auth
certifi==2019.3.9 # via kubernetes, requests, tornado
cffi==1.12.2
chardet==3.0.4 # via requests
cheroot==6.5.4 # via cherrypy
cherrypy==17.3.0
contextlib2==0.5.5 # via cherrypy
cookies==2.2.1 # via responses
coverage==4.5.3 # via pytest-cov
cryptography==2.6.1 # via moto, paramiko, pyopenssl
dnspython==1.16.0
docker-pycreds==0.4.0 # via docker
docker==3.7.0
docutils==0.14 # via botocore
ecdsa==0.13 # via python-jose
enum34==1.1.6 # via cryptography
funcsigs==1.0.2 # via pytest
functools32==3.2.3.post2 # via jsonschema
future==0.17.1 # via python-jose
futures==3.2.0 ; python_version < "3.0"
gitdb2==2.0.5 # via gitpython
gitpython==2.1.11
google-auth==1.6.3 # via kubernetes
idna==2.8 # via requests
ioflo==1.7.5
ipaddress==1.0.22 # via cryptography, docker, kubernetes
jaraco.functools==2.0 # via tempora
jinja2==2.10
jmespath==0.9.4 # via boto3, botocore
jsondiff==1.1.1 # via moto
jsonpickle==1.1 # via aws-xray-sdk
jsonschema==2.6.0
junos-eznc==2.2.0
jxmlease==1.0.1
keyring==5.7.1
kubernetes==3.0.0
lxml==4.3.2 # via junos-eznc, ncclient
markupsafe==1.1.1
mock==1.0.1
more-itertools==5.0.0
moto==1.3.7
msgpack-python==0.5.6
msgpack==0.6.1
ncclient==0.6.3 # via junos-eznc
netaddr==0.7.19 # via junos-eznc
paramiko==2.1.2
pathlib2==2.3.3 # via pytest
pluggy==0.9.0 # via pytest
portend==2.3 # via cherrypy
psutil==5.6.1
py==1.8.0 # via pytest
pyaml==18.11.0 # via moto
pyasn1-modules==0.2.4 # via google-auth
pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa
pycparser==2.19 # via cffi
pycrypto==2.6.1
pycryptodome==3.7.3 # via python-jose
pyinotify==0.9.6
pyopenssl==19.0.0
pyserial==3.4 # via junos-eznc
pytest-cov==2.6.1
pytest-helpers-namespace==2019.1.8
pytest-salt-runtests-bridge==2019.1.30
pytest-salt==2018.12.8
pytest-tempdir==2018.8.11
pytest-timeout==1.3.3
pytest==4.3.1
python-dateutil==2.8.0 # via botocore, kubernetes, moto
python-etcd==0.4.2
python-gnupg==0.4.4
python-jose==2.0.2 # via moto
pytz==2018.9 # via moto, tempora
pyvmomi==6.7.1.2018.12
pyyaml==3.13
pyzmq==18.0.1 ; python_version != "3.4"
requests==2.21.0
responses==0.10.5 # via moto
rfc3987==1.3.8
rsa==4.0 # via google-auth
s3transfer==0.2.0 # via boto3
salttesting==2017.6.1
scandir==1.10.0 # via pathlib2
scp==0.13.1 # via junos-eznc
selectors2==2.0.1 # via ncclient
setproctitle==1.1.10
singledispatch==3.4.0.3 # via tornado
six==1.12.0 # via cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kubernetes, more-itertools, moto, ncclient, pathlib2, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, singledispatch, tempora, websocket-client
smmap2==2.0.5 # via gitdb2
strict-rfc3339==0.7
tempora==1.14 # via portend
timelib==0.2.4
tornado==4.5.3 ; python_version < "3"
urllib3==1.24.1 # via botocore, kubernetes, python-etcd, requests
virtualenv==16.4.3
websocket-client==0.40.0 # via docker, kubernetes
werkzeug==0.14.1 # via moto
wrapt==1.11.1 # via aws-xray-sdk
xmltodict==0.12.0 # via moto
zc.lockfile==1.4 # via cherrypy

View File

@ -0,0 +1,37 @@
# This is a compilation of requirements installed on salt-jenkins git.salt state run
apache-libcloud==1.0.0
boto3
boto>=2.46.0
cffi
cherrypy==17.3.0
dnspython
docker
futures>=2.0; python_version < '3.0'
GitPython
ioflo
jsonschema<=2.6.0
junos-eznc
jxmlease
keyring==5.7.1
kubernetes<4.0
mock<1.1.0
more-itertools==5.0.0
moto
msgpack-python >= 0.4.2, != 0.5.5
paramiko==2.1.2
psutil
pycrypto>=2.6.1
pyinotify
pyopenssl
python-etcd==0.4.2
python-gnupg
pyvmomi
pyzmq
requests
rfc3987
salttesting==2017.6.1
setproctitle
strict_rfc3339
timelib
tornado<5.0
virtualenv

View File

@ -0,0 +1,118 @@
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile -o requirements/static/ubuntu-16.04.txt requirements/zeromq.txt requirements/pytest.txt requirements/static/ubuntu-16.04.in
#
apache-libcloud==1.0.0
asn1crypto==0.24.0 # via cryptography
atomicwrites==1.3.0 # via pytest
attrs==19.1.0 # via pytest
aws-xray-sdk==0.95 # via moto
backports-abc==0.5 # via tornado
backports.functools-lru-cache==1.5 # via cheroot, jaraco.functools
backports.ssl-match-hostname==3.7.0.1 # via docker, websocket-client
backports.tempfile==1.0 # via moto
backports.weakref==1.0.post1 # via backports.tempfile
boto3==1.9.115
boto==2.49.0
botocore==1.12.115 # via boto3, moto, s3transfer
cachetools==3.1.0 # via google-auth
certifi==2019.3.9 # via kubernetes, requests, tornado
cffi==1.12.2
chardet==3.0.4 # via requests
cheroot==6.5.4 # via cherrypy
cherrypy==17.3.0
contextlib2==0.5.5 # via cherrypy
cookies==2.2.1 # via responses
coverage==4.5.3 # via pytest-cov
cryptography==2.6.1 # via moto, paramiko, pyopenssl
dnspython==1.16.0
docker-pycreds==0.4.0 # via docker
docker==3.7.0
docutils==0.14 # via botocore
ecdsa==0.13 # via python-jose
enum34==1.1.6 # via cryptography
funcsigs==1.0.2 # via pytest
functools32==3.2.3.post2 # via jsonschema
future==0.17.1 # via python-jose
futures==3.2.0 ; python_version < "3.0"
gitdb2==2.0.5 # via gitpython
gitpython==2.1.11
google-auth==1.6.3 # via kubernetes
idna==2.8 # via requests
ioflo==1.7.5
ipaddress==1.0.22 # via cryptography, docker, kubernetes
jaraco.functools==2.0 # via tempora
jinja2==2.10
jmespath==0.9.4 # via boto3, botocore
jsondiff==1.1.1 # via moto
jsonpickle==1.1 # via aws-xray-sdk
jsonschema==2.6.0
junos-eznc==2.2.0
jxmlease==1.0.1
keyring==5.7.1
kubernetes==3.0.0
lxml==4.3.2 # via junos-eznc, ncclient
markupsafe==1.1.1
mock==1.0.1
more-itertools==5.0.0
moto==1.3.7
msgpack-python==0.5.6
msgpack==0.6.1
ncclient==0.6.3 # via junos-eznc
netaddr==0.7.19 # via junos-eznc
paramiko==2.1.2
pathlib2==2.3.3 # via pytest
pluggy==0.9.0 # via pytest
portend==2.3 # via cherrypy
psutil==5.6.1
py==1.8.0 # via pytest
pyaml==18.11.0 # via moto
pyasn1-modules==0.2.4 # via google-auth
pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa
pycparser==2.19 # via cffi
pycrypto==2.6.1
pycryptodome==3.7.3 # via python-jose
pyinotify==0.9.6
pyopenssl==19.0.0
pyserial==3.4 # via junos-eznc
pytest-cov==2.6.1
pytest-helpers-namespace==2019.1.8
pytest-salt-runtests-bridge==2019.1.30
pytest-salt==2018.12.8
pytest-tempdir==2018.8.11
pytest-timeout==1.3.3
pytest==4.3.1
python-dateutil==2.8.0 # via botocore, kubernetes, moto
python-etcd==0.4.2
python-gnupg==0.4.4
python-jose==2.0.2 # via moto
pytz==2018.9 # via moto, tempora
pyvmomi==6.7.1.2018.12
pyyaml==3.13
pyzmq==18.0.1 ; python_version != "3.4"
requests==2.21.0
responses==0.10.5 # via moto
rfc3987==1.3.8
rsa==4.0 # via google-auth
s3transfer==0.2.0 # via boto3
salttesting==2017.6.1
scandir==1.10.0 # via pathlib2
scp==0.13.1 # via junos-eznc
selectors2==2.0.1 # via ncclient
setproctitle==1.1.10
singledispatch==3.4.0.3 # via tornado
six==1.12.0 # via cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kubernetes, more-itertools, moto, ncclient, pathlib2, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, singledispatch, tempora, websocket-client
smmap2==2.0.5 # via gitdb2
strict-rfc3339==0.7
tempora==1.14 # via portend
timelib==0.2.4
tornado==4.5.3 ; python_version < "3"
urllib3==1.24.1 # via botocore, kubernetes, python-etcd, requests
virtualenv==16.4.3
websocket-client==0.40.0 # via docker, kubernetes
werkzeug==0.14.1 # via moto
wrapt==1.11.1 # via aws-xray-sdk
xmltodict==0.12.0 # via moto
zc.lockfile==1.4 # via cherrypy

View File

@ -0,0 +1,37 @@
# This is a compilation of requirements installed on salt-jenkins git.salt state run
apache-libcloud==1.0.0
boto3
boto>=2.46.0
cffi
cherrypy==17.3.0
dnspython
docker
futures>=2.0; python_version < '3.0'
GitPython
ioflo
jsonschema<=2.6.0
junos-eznc
jxmlease
keyring==5.7.1
kubernetes<4.0
mock<1.1.0
more-itertools==5.0.0
moto
msgpack-python >= 0.4.2, != 0.5.5
paramiko==2.1.2
psutil
pycrypto>=2.6.1
pyinotify
pyopenssl
python-etcd==0.4.2
python-gnupg
pyvmomi
pyzmq
requests
rfc3987
salttesting==2017.6.1
setproctitle
strict_rfc3339
timelib
tornado<5.0
virtualenv

View File

@ -0,0 +1,118 @@
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile -o requirements/static/ubuntu-18.04.txt requirements/zeromq.txt requirements/pytest.txt requirements/static/ubuntu-18.04.in
#
apache-libcloud==1.0.0
asn1crypto==0.24.0 # via cryptography
atomicwrites==1.3.0 # via pytest
attrs==19.1.0 # via pytest
aws-xray-sdk==0.95 # via moto
backports-abc==0.5 # via tornado
backports.functools-lru-cache==1.5 # via cheroot, jaraco.functools
backports.ssl-match-hostname==3.7.0.1 # via docker, websocket-client
backports.tempfile==1.0 # via moto
backports.weakref==1.0.post1 # via backports.tempfile
boto3==1.9.115
boto==2.49.0
botocore==1.12.115 # via boto3, moto, s3transfer
cachetools==3.1.0 # via google-auth
certifi==2019.3.9 # via kubernetes, requests, tornado
cffi==1.12.2
chardet==3.0.4 # via requests
cheroot==6.5.4 # via cherrypy
cherrypy==17.3.0
contextlib2==0.5.5 # via cherrypy
cookies==2.2.1 # via responses
coverage==4.5.3 # via pytest-cov
cryptography==2.6.1 # via moto, paramiko, pyopenssl
dnspython==1.16.0
docker-pycreds==0.4.0 # via docker
docker==3.7.0
docutils==0.14 # via botocore
ecdsa==0.13 # via python-jose
enum34==1.1.6 # via cryptography
funcsigs==1.0.2 # via pytest
functools32==3.2.3.post2 # via jsonschema
future==0.17.1 # via python-jose
futures==3.2.0 ; python_version < "3.0"
gitdb2==2.0.5 # via gitpython
gitpython==2.1.11
google-auth==1.6.3 # via kubernetes
idna==2.8 # via requests
ioflo==1.7.5
ipaddress==1.0.22 # via cryptography, docker, kubernetes
jaraco.functools==2.0 # via tempora
jinja2==2.10
jmespath==0.9.4 # via boto3, botocore
jsondiff==1.1.1 # via moto
jsonpickle==1.1 # via aws-xray-sdk
jsonschema==2.6.0
junos-eznc==2.2.0
jxmlease==1.0.1
keyring==5.7.1
kubernetes==3.0.0
lxml==4.3.2 # via junos-eznc, ncclient
markupsafe==1.1.1
mock==1.0.1
more-itertools==5.0.0
moto==1.3.7
msgpack-python==0.5.6
msgpack==0.6.1
ncclient==0.6.3 # via junos-eznc
netaddr==0.7.19 # via junos-eznc
paramiko==2.1.2
pathlib2==2.3.3 # via pytest
pluggy==0.9.0 # via pytest
portend==2.3 # via cherrypy
psutil==5.6.1
py==1.8.0 # via pytest
pyaml==18.11.0 # via moto
pyasn1-modules==0.2.4 # via google-auth
pyasn1==0.4.5 # via paramiko, pyasn1-modules, rsa
pycparser==2.19 # via cffi
pycrypto==2.6.1
pycryptodome==3.7.3 # via python-jose
pyinotify==0.9.6
pyopenssl==19.0.0
pyserial==3.4 # via junos-eznc
pytest-cov==2.6.1
pytest-helpers-namespace==2019.1.8
pytest-salt-runtests-bridge==2019.1.30
pytest-salt==2018.12.8
pytest-tempdir==2018.8.11
pytest-timeout==1.3.3
pytest==4.3.1
python-dateutil==2.8.0 # via botocore, kubernetes, moto
python-etcd==0.4.2
python-gnupg==0.4.4
python-jose==2.0.2 # via moto
pytz==2018.9 # via moto, tempora
pyvmomi==6.7.1.2018.12
pyyaml==3.13
pyzmq==18.0.1 ; python_version != "3.4"
requests==2.21.0
responses==0.10.5 # via moto
rfc3987==1.3.8
rsa==4.0 # via google-auth
s3transfer==0.2.0 # via boto3
salttesting==2017.6.1
scandir==1.10.0 # via pathlib2
scp==0.13.1 # via junos-eznc
selectors2==2.0.1 # via ncclient
setproctitle==1.1.10
singledispatch==3.4.0.3 # via tornado
six==1.12.0 # via cheroot, cherrypy, cryptography, docker, docker-pycreds, google-auth, junos-eznc, kubernetes, more-itertools, moto, ncclient, pathlib2, pyopenssl, pytest, python-dateutil, python-jose, pyvmomi, responses, salttesting, singledispatch, tempora, websocket-client
smmap2==2.0.5 # via gitdb2
strict-rfc3339==0.7
tempora==1.14 # via portend
timelib==0.2.4
tornado==4.5.3 ; python_version < "3"
urllib3==1.24.1 # via botocore, kubernetes, python-etcd, requests
virtualenv==16.4.3
websocket-client==0.40.0 # via docker, kubernetes
werkzeug==0.14.1 # via moto
wrapt==1.11.1 # via aws-xray-sdk
xmltodict==0.12.0 # via moto
zc.lockfile==1.4 # via cherrypy

View File

@ -0,0 +1,37 @@
apache-libcloud==1.0.0
boto3
boto>=2.46.0
dmidecode
dnspython
docker==2.7.0
ioflo
jsonschema<=2.6.0
keyring==5.7.1
kubernetes<4.0
mock<1.1.0
more-itertools==5.0.0
msgpack-python >= 0.4.2, != 0.5.5
patch
psutil
pycryptodomex
pyopenssl
python-etcd==0.4.2
python-gnupg
pyvmomi
rfc3987
salttesting==2017.6.1
sed
setproctitle
strict_rfc3339
supervisor; python_version < '3'
timelib
tornado<5.0
virtualenv
# If running under windows, please uncomment the following 2 requirements before running
# pip-compile -o requirements/static/windows.txt requirements/zeromq.txt requirements/raet.txt requirements/pytest.txt requirements/static/windows.in
#
# On non windows, please copy the following 2 requirements to the generated windows.txt, un-commented
#pywin32==223
#wmi==1.4.9

View File

@ -0,0 +1,88 @@
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile -o requirements/static/windows.txt requirements/zeromq.txt requirements/pytest.txt requirements/static/windows.in
#
apache-libcloud==1.0.0
asn1crypto==0.24.0 # via cryptography
atomicwrites==1.3.0 # via pytest
attrs==19.1.0 # via pytest
backports-abc==0.5 # via tornado
backports.ssl-match-hostname==3.7.0.1 # via docker, websocket-client
boto3==1.9.117
boto==2.49.0
botocore==1.12.117 # via boto3, s3transfer
cachetools==3.1.0 # via google-auth
certifi==2019.3.9 # via kubernetes, requests, tornado
cffi==1.12.2 # via cryptography
chardet==3.0.4 # via requests
coverage==4.5.3 # via pytest-cov
cryptography==2.6.1 # via pyopenssl
dmidecode==0.9.0
dnspython==1.16.0
docker-pycreds==0.4.0 # via docker
docker==2.7.0
docutils==0.14 # via botocore
enum34==1.1.6 # via cryptography
funcsigs==1.0.2 # via pytest
functools32==3.2.3.post2 # via jsonschema
futures==3.2.0 ; python_version < "3.0"
google-auth==1.6.3 # via kubernetes
idna==2.8 # via requests
ioflo==1.7.5
ipaddress==1.0.22 # via cryptography, docker, kubernetes
jinja2==2.10
jmespath==0.9.4 # via boto3, botocore
jsonschema==2.6.0
keyring==5.7.1
kubernetes==3.0.0
markupsafe==1.1.1
meld3==1.0.2 # via supervisor
mock==1.0.1
more-itertools==5.0.0
msgpack-python==0.5.6
msgpack==0.6.1
patch==1.16
pathlib2==2.3.3 # via pytest
pluggy==0.9.0 # via pytest
psutil==5.6.1
py==1.8.0 # via pytest
pyasn1-modules==0.2.4 # via google-auth
pyasn1==0.4.5 # via pyasn1-modules, rsa
pycparser==2.19 # via cffi
pycrypto==2.6.1
pycryptodomex==3.7.3
pyopenssl==19.0.0
pytest-cov==2.6.1
pytest-helpers-namespace==2019.1.8
pytest-salt-runtests-bridge==2019.1.30
pytest-salt==2018.12.8
pytest-tempdir==2018.8.11
pytest-timeout==1.3.3
pytest==4.3.1
python-dateutil==2.8.0 # via botocore, kubernetes
python-etcd==0.4.2
python-gnupg==0.4.4
pyvmomi==6.7.1.2018.12
pyyaml==3.13
pyzmq==18.0.1 ; python_version != "3.4"
requests==2.21.0
rfc3987==1.3.8
rsa==4.0 # via google-auth
s3transfer==0.2.0 # via boto3
salttesting==2017.6.1
scandir==1.10.0 # via pathlib2
sed==0.3.1
setproctitle==1.1.10
singledispatch==3.4.0.3 # via tornado
six==1.12.0 # via cryptography, docker, docker-pycreds, google-auth, kubernetes, more-itertools, pathlib2, pyopenssl, pytest, python-dateutil, pyvmomi, salttesting, singledispatch, websocket-client
strict-rfc3339==0.7
supervisor==3.3.5 ; python_version < "3"
timelib==0.2.4
tornado==4.5.3 ; python_version < "3"
urllib3==1.24.1 # via botocore, kubernetes, python-etcd, requests
virtualenv==16.4.3
websocket-client==0.40.0 # via docker, kubernetes
pywin32==223
wmi==1.4.9

View File

@ -1294,16 +1294,16 @@ class Cloud(object):
start = int(time.time()) start = int(time.time())
while int(time.time()) < start + 60: while int(time.time()) < start + 60:
# We'll try every <timeout> seconds, up to a minute # We'll try every <timeout> seconds, up to a minute
mopts_ = salt.config.DEFAULT_MINION_OPTS mopts_ = salt.config.DEFAULT_MASTER_OPTS
conf_path = '/'.join(self.opts['conf_file'].split('/')[:-1]) conf_path = '/'.join(self.opts['conf_file'].split('/')[:-1])
mopts_.update( mopts_.update(
salt.config.minion_config( salt.config.master_config(
os.path.join(conf_path, os.path.join(conf_path,
'minion') 'master')
) )
) )
client = salt.client.get_local_client(mopts=self.opts) client = salt.client.get_local_client(mopts=mopts_)
ret = client.cmd( ret = client.cmd(
vm_['name'], vm_['name'],

View File

@ -1495,6 +1495,10 @@ def _parse_cpe_name(cpe):
Info: https://csrc.nist.gov/projects/security-content-automation-protocol/scap-specifications/cpe Info: https://csrc.nist.gov/projects/security-content-automation-protocol/scap-specifications/cpe
Note: cpe:2.3:part:vendor:product:version:update:edition:lang:sw_edition:target_sw:target_hw:other
however some OS's do not have the full 13 elements, for example:
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
:param cpe: :param cpe:
:return: :return:
''' '''
@ -1510,7 +1514,11 @@ def _parse_cpe_name(cpe):
ret['vendor'], ret['product'], ret['version'] = cpe[2:5] ret['vendor'], ret['product'], ret['version'] = cpe[2:5]
ret['phase'] = cpe[5] if len(cpe) > 5 else None ret['phase'] = cpe[5] if len(cpe) > 5 else None
ret['part'] = part.get(cpe[1][1:]) ret['part'] = part.get(cpe[1][1:])
elif len(cpe) == 13 and cpe[1] == '2.3': # WFN to a string elif len(cpe) == 6 and cpe[1] == '2.3': # WFN to a string
ret['vendor'], ret['product'], ret['version'] = [x if x != '*' else None for x in cpe[3:6]]
ret['phase'] = None
ret['part'] = part.get(cpe[2])
elif len(cpe) > 7 and len(cpe) <= 13 and cpe[1] == '2.3': # WFN to a string
ret['vendor'], ret['product'], ret['version'], ret['phase'] = [x if x != '*' else None for x in cpe[3:7]] ret['vendor'], ret['product'], ret['version'], ret['phase'] = [x if x != '*' else None for x in cpe[3:7]]
ret['part'] = part.get(cpe[2]) ret['part'] = part.get(cpe[2])

View File

@ -846,6 +846,13 @@ def _get_create_kwargs(skip_translate=None,
Take input kwargs and return a kwargs dict to pass to docker-py's Take input kwargs and return a kwargs dict to pass to docker-py's
create_container() function. create_container() function.
''' '''
networks = kwargs.pop('networks', {})
if kwargs.get('network_mode', '') in networks:
networks = {kwargs['network_mode']: networks[kwargs['network_mode']]}
else:
networks = {}
kwargs = __utils__['docker.translate_input']( kwargs = __utils__['docker.translate_input'](
salt.utils.docker.translate.container, salt.utils.docker.translate.container,
skip_translate=skip_translate, skip_translate=skip_translate,
@ -853,6 +860,9 @@ def _get_create_kwargs(skip_translate=None,
validate_ip_addrs=validate_ip_addrs, validate_ip_addrs=validate_ip_addrs,
**__utils__['args.clean_kwargs'](**kwargs)) **__utils__['args.clean_kwargs'](**kwargs))
if networks:
kwargs['networking_config'] = _create_networking_config(networks)
if client_args is None: if client_args is None:
try: try:
client_args = get_client_args(['create_container', 'host_config']) client_args = get_client_args(['create_container', 'host_config'])
@ -2388,6 +2398,11 @@ def version():
return ret return ret
def _create_networking_config(networks):
log.debug("creating networking config from {}".format(networks))
return _client_wrapper('create_networking_config',
{k: _client_wrapper('create_endpoint_config', **v) for k, v in networks.items()})
# Functions to manage containers # Functions to manage containers
@_refresh_mine_cache @_refresh_mine_cache
def create(image, def create(image,

View File

@ -133,7 +133,7 @@ try:
# Default to `en-US` (1033) # Default to `en-US` (1033)
windll = ctypes.windll.kernel32 windll = ctypes.windll.kernel32
INSTALL_LANGUAGE = locale.windows_locale.get( INSTALL_LANGUAGE = locale.windows_locale.get(
windll.GetSystemDefaultUILanguage(), 1033).replace('_', '-') windll.GetSystemDefaultUILanguage(), 'en_US').replace('_', '-')
except ImportError: except ImportError:
HAS_WINDOWS_MODULES = False HAS_WINDOWS_MODULES = False

View File

@ -1673,6 +1673,8 @@ def running(name,
try: try:
networks = _parse_networks(networks) networks = _parse_networks(networks)
if networks:
kwargs['networks'] = networks
image_id = _resolve_image(ret, image, client_timeout) image_id = _resolve_image(ret, image, client_timeout)
except CommandExecutionError as exc: except CommandExecutionError as exc:
ret['result'] = False ret['result'] = False

View File

@ -5059,6 +5059,10 @@ def append(name,
if makedirs is True: if makedirs is True:
dirname = os.path.dirname(name) dirname = os.path.dirname(name)
if __opts__['test']:
ret['comment'] = 'Directory {0} is set to be updated'.format(dirname)
ret['result'] = None
else:
if not __salt__['file.directory_exists'](dirname): if not __salt__['file.directory_exists'](dirname):
try: try:
_makedirs(name=name) _makedirs(name=name)

View File

@ -29,6 +29,7 @@ Ensure a Linux ACL does not exist
# Import Python libs # Import Python libs
from __future__ import absolute_import, print_function, unicode_literals from __future__ import absolute_import, print_function, unicode_literals
import logging
import os import os
# Import salt libs # Import salt libs
@ -36,6 +37,8 @@ from salt.ext import six
from salt.exceptions import CommandExecutionError from salt.exceptions import CommandExecutionError
import salt.utils.path import salt.utils.path
log = logging.getLogger(__name__)
__virtualname__ = 'acl' __virtualname__ = 'acl'
@ -60,6 +63,7 @@ def present(name, acl_type, acl_name='', perms='', recurse=False):
'comment': ''} 'comment': ''}
_octal = {'r': 4, 'w': 2, 'x': 1, '-': 0} _octal = {'r': 4, 'w': 2, 'x': 1, '-': 0}
_octal_lookup = {0: '-', 1: 'r', 2: 'w', 4: 'x'}
if not os.path.exists(name): if not os.path.exists(name):
ret['comment'] = '{0} does not exist'.format(name) ret['comment'] = '{0} does not exist'.format(name)
@ -111,18 +115,22 @@ def present(name, acl_type, acl_name='', perms='', recurse=False):
if not need_refresh: if not need_refresh:
ret['comment'] = 'Permissions are in the desired state' ret['comment'] = 'Permissions are in the desired state'
else: else:
_num = user[_search_name]['octal']
new_perms = '{}{}{}'.format(_octal_lookup[_num & 1],
_octal_lookup[_num & 2],
_octal_lookup[_num & 4])
changes = {'new': {'acl_name': acl_name, changes = {'new': {'acl_name': acl_name,
'acl_type': acl_type, 'acl_type': acl_type,
'perms': perms}, 'perms': perms},
'old': {'acl_name': acl_name, 'old': {'acl_name': acl_name,
'acl_type': acl_type, 'acl_type': acl_type,
'perms': six.text_type(user[_search_name]['octal'])}} 'perms': new_perms}}
if __opts__['test']: if __opts__['test']:
ret.update({'comment': 'Updated permissions will be applied for ' ret.update({'comment': 'Updated permissions will be applied for '
'{0}: {1} -> {2}'.format( '{0}: {1} -> {2}'.format(
acl_name, acl_name,
six.text_type(user[_search_name]['octal']), new_perms,
perms), perms),
'result': None, 'pchanges': changes}) 'result': None, 'pchanges': changes})
return ret return ret

View File

@ -292,7 +292,7 @@ def private_key_managed(name,
x509.private_key_managed: x509.private_key_managed:
- bits: 4096 - bits: 4096
- new: True - new: True
{% if salt['file.file_exists']('/etc/pki/ca.key') -%} {% if salt['file.file_exists']('/etc/pki/www.key') -%}
- prereq: - prereq:
- x509: /etc/pki/www.crt - x509: /etc/pki/www.crt
{%- endif %} {%- endif %}

View File

@ -18,7 +18,8 @@ import tornado
import tornado.gen import tornado.gen
import tornado.netutil import tornado.netutil
import tornado.concurrent import tornado.concurrent
from tornado.locks import Semaphore import tornado.queues
from tornado.locks import Lock
from tornado.ioloop import IOLoop, TimeoutError as TornadoTimeoutError from tornado.ioloop import IOLoop, TimeoutError as TornadoTimeoutError
from tornado.iostream import IOStream from tornado.iostream import IOStream
# Import Salt libs # Import Salt libs
@ -582,11 +583,116 @@ class IPCMessagePublisher(object):
self.close() self.close()
class IPCMessageSubscriber(IPCClient): class IPCMessageSubscriberService(IPCClient):
'''
IPC message subscriber service that is a standalone singleton class starting once for a number
of IPCMessageSubscriber instances feeding all of them with data. It closes automatically when
there are no more subscribers.
To use this refer to IPCMessageSubscriber documentation.
'''
def __singleton_init__(self, socket_path, io_loop=None):
super(IPCMessageSubscriberService, self).__singleton_init__(
socket_path, io_loop=io_loop)
self.saved_data = []
self._read_in_progress = Lock()
self.handlers = weakref.WeakSet()
def _subscribe(self, handler):
self.handlers.add(handler)
def unsubscribe(self, handler):
self.handlers.discard(handler)
def _has_subscribers(self):
return bool(self.handlers)
def _feed_subscribers(self, data):
for subscriber in self.handlers:
subscriber._feed(data)
@tornado.gen.coroutine
def _read(self, timeout, callback=None):
try:
yield self._read_in_progress.acquire(timeout=0)
except tornado.gen.TimeoutError:
raise tornado.gen.Return(None)
log.debug('IPC Subscriber Service is starting reading')
# If timeout is not specified we need to set some here to make the service able to check
# is there any handler waiting for data.
if timeout is None:
timeout = 5
read_stream_future = None
while self._has_subscribers():
if read_stream_future is None:
read_stream_future = self.stream.read_bytes(4096, partial=True)
try:
wire_bytes = yield FutureWithTimeout(self.io_loop,
read_stream_future,
timeout)
read_stream_future = None
self.unpacker.feed(wire_bytes)
msgs = [msg['body'] for msg in self.unpacker]
self._feed_subscribers(msgs)
except TornadoTimeoutError:
# Continue checking are there alive waiting handlers
# Keep 'read_stream_future' alive to wait it more in the next loop
continue
except tornado.iostream.StreamClosedError as exc:
log.trace('Subscriber disconnected from IPC %s', self.socket_path)
self._feed_subscribers([None])
break
except Exception as exc:
log.error('Exception occurred in Subscriber while handling stream: %s', exc)
self._feed_subscribers([exc])
break
log.debug('IPC Subscriber Service is stopping due to a lack of subscribers')
self._read_in_progress.release()
raise tornado.gen.Return(None)
@tornado.gen.coroutine
def read(self, handler, timeout=None):
'''
Asynchronously read messages and invoke a callback when they are ready.
:param callback: A callback with the received data
'''
self._subscribe(handler)
while not self.connected():
try:
yield self.connect(timeout=5)
except tornado.iostream.StreamClosedError:
log.trace('Subscriber closed stream on IPC %s before connect', self.socket_path)
yield tornado.gen.sleep(1)
except Exception as exc:
log.error('Exception occurred while Subscriber connecting: %s', exc)
yield tornado.gen.sleep(1)
self._read(timeout)
def close(self):
'''
Routines to handle any cleanup before the instance shuts down.
Sockets and filehandles should be closed explicitly, to prevent
leaks.
'''
if not self._closing:
super(IPCMessageSubscriberService, self).close()
def __del__(self):
if IPCMessageSubscriberService in globals():
self.close()
class IPCMessageSubscriber(object):
''' '''
Salt IPC message subscriber Salt IPC message subscriber
Create an IPC client to receive messages from IPC publisher Create or reuse an IPC client to receive messages from IPC publisher
An example of a very simple IPCMessageSubscriber connecting to an IPCMessagePublisher. An example of a very simple IPCMessageSubscriber connecting to an IPCMessagePublisher.
This example assumes an already running IPCMessagePublisher. This example assumes an already running IPCMessagePublisher.
@ -615,147 +721,60 @@ class IPCMessageSubscriber(IPCClient):
# Wait for some data # Wait for some data
package = ipc_subscriber.read_sync() package = ipc_subscriber.read_sync()
''' '''
def __singleton_init__(self, socket_path, io_loop=None): def __init__(self, socket_path, io_loop=None):
super(IPCMessageSubscriber, self).__singleton_init__( self.service = IPCMessageSubscriberService(socket_path, io_loop)
socket_path, io_loop=io_loop) self.queue = tornado.queues.Queue()
self._read_sync_future = None
self._read_stream_future = None def connected(self):
self._sync_ioloop_running = False return self.service.connected()
self.saved_data = []
self._sync_read_in_progress = Semaphore() def connect(self, callback=None, timeout=None):
return self.service.connect(callback=callback, timeout=timeout)
@tornado.gen.coroutine @tornado.gen.coroutine
def _read_sync(self, timeout): def _feed(self, msgs):
yield self._sync_read_in_progress.acquire() for msg in msgs:
exc_to_raise = None yield self.queue.put(msg)
ret = None
try:
while True:
if self._read_stream_future is None:
self._read_stream_future = self.stream.read_bytes(4096, partial=True)
if timeout is None:
wire_bytes = yield self._read_stream_future
else:
future_with_timeout = FutureWithTimeout(
self.io_loop, self._read_stream_future, timeout)
wire_bytes = yield future_with_timeout
self._read_stream_future = None
# Remove the timeout once we get some data or an exception
# occurs. We will assume that the rest of the data is already
# there or is coming soon if an exception doesn't occur.
timeout = None
self.unpacker.feed(wire_bytes)
first = True
for framed_msg in self.unpacker:
if first:
ret = framed_msg['body']
first = False
else:
self.saved_data.append(framed_msg['body'])
if not first:
# We read at least one piece of data
break
except TornadoTimeoutError:
# In the timeout case, just return None.
# Keep 'self._read_stream_future' alive.
ret = None
except tornado.iostream.StreamClosedError as exc:
log.trace('Subscriber disconnected from IPC %s', self.socket_path)
self._read_stream_future = None
exc_to_raise = exc
except Exception as exc:
log.error('Exception occurred in Subscriber while handling stream: %s', exc)
self._read_stream_future = None
exc_to_raise = exc
if self._sync_ioloop_running:
# Stop the IO Loop so that self.io_loop.start() will return in
# read_sync().
self.io_loop.spawn_callback(self.io_loop.stop)
if exc_to_raise is not None:
raise exc_to_raise # pylint: disable=E0702
self._sync_read_in_progress.release()
raise tornado.gen.Return(ret)
def read_sync(self, timeout=None):
'''
Read a message from an IPC socket
The socket must already be connected.
The associated IO Loop must NOT be running.
:param int timeout: Timeout when receiving message
:return: message data if successful. None if timed out. Will raise an
exception for all other error conditions.
'''
if self.saved_data:
return self.saved_data.pop(0)
self._sync_ioloop_running = True
self._read_sync_future = self._read_sync(timeout)
self.io_loop.start()
self._sync_ioloop_running = False
ret_future = self._read_sync_future
self._read_sync_future = None
return ret_future.result()
@tornado.gen.coroutine @tornado.gen.coroutine
def _read_async(self, callback): def read_async(self, callback, timeout=None):
while not self.stream.closed():
try:
self._read_stream_future = self.stream.read_bytes(4096, partial=True)
wire_bytes = yield self._read_stream_future
self._read_stream_future = None
self.unpacker.feed(wire_bytes)
for framed_msg in self.unpacker:
body = framed_msg['body']
self.io_loop.spawn_callback(callback, body)
except tornado.iostream.StreamClosedError:
log.trace('Subscriber disconnected from IPC %s', self.socket_path)
break
except Exception as exc:
log.error('Exception occurred while Subscriber handling stream: %s', exc)
@tornado.gen.coroutine
def read_async(self, callback):
''' '''
Asynchronously read messages and invoke a callback when they are ready. Asynchronously read messages and invoke a callback when they are ready.
:param callback: A callback with the received data :param callback: A callback with the received data
''' '''
while not self.connected(): self.service.read(self)
while True:
try: try:
yield self.connect(timeout=5) if timeout is not None:
except tornado.iostream.StreamClosedError: deadline = time.time() + timeout
log.trace('Subscriber closed stream on IPC %s before connect', self.socket_path) else:
yield tornado.gen.sleep(1) deadline = None
except Exception as exc: data = yield self.queue.get(timeout=deadline)
log.error('Exception occurred while Subscriber connecting: %s', exc) except tornado.gen.TimeoutError:
yield tornado.gen.sleep(1) raise tornado.gen.Return(None)
yield self._read_async(callback) if data is None:
break
elif isinstance(data, Exception):
raise data
elif callback:
self.service.io_loop.spawn_callback(callback, data)
else:
raise tornado.gen.Return(data)
def read_sync(self, timeout=None):
'''
Read a message from an IPC socket
The associated IO Loop must NOT be running.
:param int timeout: Timeout when receiving message
:return: message data if successful. None if timed out. Will raise an
exception for all other error conditions.
'''
return self.service.io_loop.run_sync(lambda: self.read_async(None, timeout))
def close(self): def close(self):
''' self.service.unsubscribe(self)
Routines to handle any cleanup before the instance shuts down.
Sockets and filehandles should be closed explicitly, to prevent
leaks.
'''
if not self._closing:
IPCClient.close(self)
# This will prevent this message from showing up:
# '[ERROR ] Future exception was never retrieved:
# StreamClosedError'
if self._read_sync_future is not None and self._read_sync_future.done():
self._read_sync_future.exception()
if self._read_stream_future is not None and self._read_stream_future.done():
self._read_stream_future.exception()
def __del__(self): def __del__(self):
if IPCMessageSubscriber in globals():
self.close() self.close()

View File

@ -17,6 +17,7 @@ from tests.support.helpers import destructiveTest, flaky, skip_if_not_root
# Import Salt libs # Import Salt libs
import salt.utils.files import salt.utils.files
import salt.utils.platform import salt.utils.platform
import salt.modules.shadow
from salt.ext.six.moves import range from salt.ext.six.moves import range
@ -27,11 +28,6 @@ class ShadowModuleTest(ModuleCase):
Validate the linux shadow system module Validate the linux shadow system module
''' '''
def __init__(self, arg):
super(self.__class__, self).__init__(arg)
self._test_user = self.__random_string()
self._no_user = self.__random_string()
def setUp(self): def setUp(self):
''' '''
Get current settings Get current settings
@ -47,12 +43,9 @@ class ShadowModuleTest(ModuleCase):
**os_grain **os_grain
) )
) )
self._test_user = self.__random_string()
def tearDown(self): self._no_user = self.__random_string()
''' self._password = salt.modules.shadow.gen_password('Password1234')
Reset to original settings
'''
self.run_function('user.delete', [self._test_user])
def __random_string(self, size=6): def __random_string(self, size=6):
''' '''
@ -68,6 +61,7 @@ class ShadowModuleTest(ModuleCase):
''' '''
Test shadow.info Test shadow.info
''' '''
self.addCleanup(self.run_function, 'user.delete', [self._test_user])
self.run_function('user.add', [self._test_user]) self.run_function('user.add', [self._test_user])
# Correct Functionality # Correct Functionality
@ -83,6 +77,7 @@ class ShadowModuleTest(ModuleCase):
''' '''
Test shadow.del_password Test shadow.del_password
''' '''
self.addCleanup(self.run_function, 'user.delete', [self._test_user])
self.run_function('user.add', [self._test_user]) self.run_function('user.add', [self._test_user])
# Correct Functionality # Correct Functionality
@ -98,6 +93,7 @@ class ShadowModuleTest(ModuleCase):
''' '''
Test shadow.set_password Test shadow.set_password
''' '''
self.addCleanup(self.run_function, 'user.delete', [self._test_user])
self.run_function('user.add', [self._test_user]) self.run_function('user.add', [self._test_user])
# Correct Functionality # Correct Functionality
@ -111,6 +107,7 @@ class ShadowModuleTest(ModuleCase):
''' '''
Test shadow.set_inactdays Test shadow.set_inactdays
''' '''
self.addCleanup(self.run_function, 'user.delete', [self._test_user])
self.run_function('user.add', [self._test_user]) self.run_function('user.add', [self._test_user])
# Correct Functionality # Correct Functionality
@ -124,6 +121,7 @@ class ShadowModuleTest(ModuleCase):
''' '''
Test shadow.set_maxdays Test shadow.set_maxdays
''' '''
self.addCleanup(self.run_function, 'user.delete', [self._test_user])
self.run_function('user.add', [self._test_user]) self.run_function('user.add', [self._test_user])
# Correct Functionality # Correct Functionality
@ -137,6 +135,7 @@ class ShadowModuleTest(ModuleCase):
''' '''
Test shadow.set_mindays Test shadow.set_mindays
''' '''
self.addCleanup(self.run_function, 'user.delete', [self._test_user])
self.run_function('user.add', [self._test_user]) self.run_function('user.add', [self._test_user])
# Correct Functionality # Correct Functionality
@ -151,6 +150,7 @@ class ShadowModuleTest(ModuleCase):
''' '''
Test shadow.lock_password Test shadow.lock_password
''' '''
self.addCleanup(self.run_function, 'user.delete', [self._test_user])
self.run_function('user.add', [self._test_user]) self.run_function('user.add', [self._test_user])
self.run_function('shadow.set_password', [self._test_user, self._password]) self.run_function('shadow.set_password', [self._test_user, self._password])
@ -165,6 +165,7 @@ class ShadowModuleTest(ModuleCase):
''' '''
Test shadow.lock_password Test shadow.lock_password
''' '''
self.addCleanup(self.run_function, 'user.delete', [self._test_user])
self.run_function('user.add', [self._test_user]) self.run_function('user.add', [self._test_user])
self.run_function('shadow.set_password', [self._test_user, self._password]) self.run_function('shadow.set_password', [self._test_user, self._password])
@ -179,6 +180,7 @@ class ShadowModuleTest(ModuleCase):
''' '''
Test shadow.set_warndays Test shadow.set_warndays
''' '''
self.addCleanup(self.run_function, 'user.delete', [self._test_user])
self.run_function('user.add', [self._test_user]) self.run_function('user.add', [self._test_user])
# Correct Functionality # Correct Functionality
@ -192,6 +194,7 @@ class ShadowModuleTest(ModuleCase):
''' '''
Test shadow.set_date Test shadow.set_date
''' '''
self.addCleanup(self.run_function, 'user.delete', [self._test_user])
self.run_function('user.add', [self._test_user]) self.run_function('user.add', [self._test_user])
# Correct Functionality # Correct Functionality
@ -205,6 +208,7 @@ class ShadowModuleTest(ModuleCase):
''' '''
Test shadow.set_exipre Test shadow.set_exipre
''' '''
self.addCleanup(self.run_function, 'user.delete', [self._test_user])
self.run_function('user.add', [self._test_user]) self.run_function('user.add', [self._test_user])
# Correct Functionality # Correct Functionality
@ -221,16 +225,19 @@ class ShadowModuleTest(ModuleCase):
# saving shadow file # saving shadow file
if not os.access("/etc/shadow", os.R_OK | os.W_OK): if not os.access("/etc/shadow", os.R_OK | os.W_OK):
self.skipTest('Could not save initial state of /etc/shadow') self.skipTest('Could not save initial state of /etc/shadow')
with salt.utils.files.fopen('/etc/shadow', 'r') as sFile:
shadow = sFile.read() def restore_shadow_file(contents):
# restore shadow file
with salt.utils.fopen('/etc/shadow', 'w') as wfh:
wfh.write(contents)
with salt.utils.files.fopen('/etc/shadow', 'r') as rfh:
contents = rfh.read()
self.addCleanup(restore_shadow_file, contents)
# set root password # set root password
self.assertTrue(self.run_function('shadow.set_password', ['root', self._password])) self.assertTrue(self.run_function('shadow.set_password', ['root', self._password]))
self.assertEqual( self.assertEqual(self.run_function('shadow.info', ['root'])['passwd'], self._password)
self.run_function('shadow.info', ['root'])['passwd'], self._password)
# delete root password # delete root password
self.assertTrue(self.run_function('shadow.del_password', ['root'])) self.assertTrue(self.run_function('shadow.del_password', ['root']))
self.assertEqual( self.assertEqual(self.run_function('shadow.info', ['root'])['passwd'], '')
self.run_function('shadow.info', ['root'])['passwd'], '')
#restore shadow file
with salt.utils.files.fopen('/etc/shadow', 'w') as sFile:
sFile.write(shadow)

View File

@ -599,6 +599,33 @@ class DockerContainerTestCase(ModuleCase, SaltReturnAssertsMixin):
self.assertTrue('VAR2=value2' in ret['Config']['Env']) self.assertTrue('VAR2=value2' in ret['Config']['Env'])
self.assertTrue('VAR3=value3' not in ret['Config']['Env']) self.assertTrue('VAR3=value3' not in ret['Config']['Env'])
@with_network(subnet='10.247.197.96/27', create=True)
@container_name
def test_static_ip_one_network(self, container_name, net):
'''
Ensure that if a network is created and specified as network_mode, that is the only network, and
the static IP is applied.
'''
requested_ip = '10.247.197.100'
kwargs = {
'name': container_name,
'image': self.image,
'network_mode': net.name,
'networks': [{net.name: [{'ipv4_address': requested_ip}]}],
'shutdown_timeout': 1,
}
# Create a container
ret = self.run_state('docker_container.running', **kwargs)
self.assertSaltTrueReturn(ret)
inspect_result = self.run_function('docker.inspect_container',
[container_name])
connected_networks = inspect_result['NetworkSettings']['Networks']
self.assertEqual(list(connected_networks.keys()), [net.name])
self.assertEqual(inspect_result['HostConfig']['NetworkMode'], net.name)
self.assertEqual(connected_networks[net.name]['IPAMConfig']['IPv4Address'], requested_ip)
def _test_running(self, container_name, *nets): def _test_running(self, container_name, *nets):
''' '''
DRY function for testing static IPs DRY function for testing static IPs

Some files were not shown because too many files have changed in this diff Show More