diff --git a/.bumpversion.cfg b/.bumpversion.cfg index a8e05a9e4..c6188eba1 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.16.3 +current_version = 0.16.4 commit = False tag = False tag_name = {new_version} diff --git a/.gitmodules b/.gitmodules index da242f1fd..f939ab612 100644 --- a/.gitmodules +++ b/.gitmodules @@ -46,3 +46,6 @@ [submodule "src/watchmaker/static/salt/content"] path = src/watchmaker/static/salt/content url = https://github.com/plus3it/watchmaker-salt-content.git +[submodule "src/watchmaker/static/salt/formulas/fup-formula"] + path = src/watchmaker/static/salt/formulas/fup-formula + url = https://github.com/plus3it/fup-formula.git diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a94c3e7b..a867f86d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ ## Changelog +### 0.16.4 + +**Commit Delta**: [Change from 0.16.3 release](https://github.com/plus3it/watchmaker/compare/0.16.3...0.16.4) + +**Released**: 2019.08.23 + +**Summary**: + +* Updates documentation on pip usage in Linux to always use `python3 -m pip...` +* dotnet4-formula + - Adds .NET Framework 4.8 version and associated KB to lookup tables +* fup-formula + - New salt formula to install packages via URL +* scap-formula + - (Windows) Adds configuration to allow scan results to be generated when using SCC v5.0.2 and higher +* watchmaker-salt-content + - (Windows) Adds .NET Framework 4.8 info to dotnet winrepo package content + ### 0.16.3 **Commit Delta**: [Change from 0.16.2 release](https://github.com/plus3it/watchmaker/compare/0.16.2...0.16.3) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1fcdb2391..5f0e7057d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -151,20 +151,20 @@ specify something like this for EC2 userdata: PYPI_URL=https://pypi.org/simple # Install pip - python3 -m ensurepip --upgrade --default-pip + python3 -m ensurepip # Install git yum -y install git # Upgrade pip and setuptools - pip install --index-url="$PYPI_URL" --upgrade pip setuptools + python3 -m pip install --index-url="$PYPI_URL" --upgrade pip setuptools # Clone watchmaker git clone "$GIT_REPO" --branch "$GIT_BRANCH" --recursive # Install watchmaker cd watchmaker - pip install --index-url "$PYPI_URL" --editable . + python3 -m pip install --index-url "$PYPI_URL" --editable . # Run watchmaker watchmaker --log-level debug --log-dir=/var/log/watchmaker diff --git a/docs/installation.md b/docs/installation.md index a39f9517d..057bf8ab8 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -14,7 +14,7 @@ The preferred method to install `watchmaker` is from the Python Package Index the most recent stable release. ```bash -pip install watchmaker +python3 -m pip install watchmaker ``` If you do not have Python or [pip][0], this [Python installation guide][1] @@ -57,7 +57,7 @@ The sources for `watchmaker` are available from the [GitHub repo][2]. 3. Then you can install Watchmaker: ```bash - pip install . + python3 -m pip install . ``` ## From standalone executable package (Beta feature) diff --git a/docs/usage.md b/docs/usage.md index f5d48e8e0..7ef5d29b1 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -121,13 +121,13 @@ export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 # Install pip -python3 -m ensurepip --upgrade --default-pip +python3 -m ensurepip # Install setup dependencies -pip install --index-url="$PYPI_URL" --upgrade pip setuptools +python3 -m pip install --index-url="$PYPI_URL" --upgrade pip setuptools # Install Watchmaker -pip install --index-url="$PYPI_URL" --upgrade watchmaker +python3 -m pip install --index-url="$PYPI_URL" --upgrade watchmaker # Run Watchmaker watchmaker --log-level debug --log-dir=/var/log/watchmaker @@ -147,13 +147,13 @@ runcmd: export LANG=en_US.UTF-8 # Install pip - python3 -m ensurepip --upgrade --default-pip + python3 -m ensurepip # Install setup dependencies - pip install --index-url="$PYPI_URL" --upgrade pip setuptools + python3 -m pip install --index-url="$PYPI_URL" --upgrade pip setuptools # Install Watchmaker - pip install --index-url="$PYPI_URL" --upgrade watchmaker + python3 -m pip install --index-url="$PYPI_URL" --upgrade watchmaker # Run Watchmaker watchmaker --log-level debug --log-dir=/var/log/watchmaker diff --git a/requirements/check.txt b/requirements/check.txt index 105b99db1..f453fffab 100644 --- a/requirements/check.txt +++ b/requirements/check.txt @@ -1,15 +1,15 @@ check-manifest==0.39 flake8==3.7.8 -flake8-bugbear==19.3.0 +flake8-bugbear==19.8.0 flake8-builtins==1.4.1 flake8-docstrings==1.3.1 flake8-isort==2.7.0 -flake8-future-import==0.4.5 +flake8-future-import==0.4.6 flake8-print==3.1.0 isort==4.3.21 m2r==0.2.1 pep8-naming==0.8.2 -pydocstyle==3.0.0 +pydocstyle==4.0.1 pygments==2.4.2 pylint==2.3.1 readme-renderer==24.0 diff --git a/requirements/docs.txt b/requirements/docs.txt index 9c19c58fa..2f42e476c 100644 --- a/requirements/docs.txt +++ b/requirements/docs.txt @@ -1,4 +1,4 @@ m2r==0.2.1 -setuptools==41.0.1 -sphinx==2.1.2 +setuptools==41.2.0 +sphinx==2.2.0 sphinx-rtd-theme==0.4.3 diff --git a/requirements/pip.txt b/requirements/pip.txt index 83ee0cfd9..1ad90b64e 100644 --- a/requirements/pip.txt +++ b/requirements/pip.txt @@ -1 +1 @@ -pip==19.2.1 +pip==19.2.2 diff --git a/requirements/test.txt b/requirements/test.txt index 20af8e961..103efab78 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -2,7 +2,7 @@ mock==2.0.0;python_version=="2.6" # pyup: ==2.0.0 mock==3.0.5;python_version>="2.7" pytest==3.2.5;python_version=="2.6" or python_version=="3.3" # pyup: ==3.2.5 pytest==4.6.3;python_version=="2.7" or python_version=="3.4" -pytest==5.0.1;python_version>="3.5" +pytest==5.1.1;python_version>="3.5" pytest-travis-fold==1.3.0 pytest-catchlog==1.2.2;python_version=="2.6" pytest-cov==2.5.1;python_version=="2.6" # pyup: ==2.5.1 diff --git a/setup.cfg b/setup.cfg index 32f8cb7a1..db2fb9af5 100644 --- a/setup.cfg +++ b/setup.cfg @@ -3,7 +3,7 @@ [metadata] name = watchmaker description = Applied Configuration Management -version = 0.16.3 +version = 0.16.4 author = Plus3IT Maintainers of Watchmaker author_email = projects@plus3it.com url = https://github.com/plus3it/watchmaker @@ -67,7 +67,7 @@ exclude = dist, htmlcov, */static/salt/formulas/* -ignore = FI15,FI16,FI17,FI5,D107,W503,W504 +ignore = FI15,FI16,FI17,FI18,FI5,D107,W503,W504 [tool:pytest] mock_use_standalone_module = true diff --git a/src/watchmaker/__init__.py b/src/watchmaker/__init__.py index 9e97ce945..7c07071f9 100644 --- a/src/watchmaker/__init__.py +++ b/src/watchmaker/__init__.py @@ -163,6 +163,7 @@ class Arguments(dict): # This list would be converted to the following dict and merged # into the parameters passed to the worker configurations: {'arg1': 'value1', 'arg2': 'value2'} + """ def __init__( @@ -203,6 +204,7 @@ class Client(object): Keyword Arguments: arguments: (:obj:`Arguments`) A dictionary of arguments. See :class:`watchmaker.Arguments`. + """ def __init__(self, arguments): diff --git a/src/watchmaker/logger/__init__.py b/src/watchmaker/logger/__init__.py index c936fcf16..fd0e13e8d 100644 --- a/src/watchmaker/logger/__init__.py +++ b/src/watchmaker/logger/__init__.py @@ -84,6 +84,7 @@ def make_log_dir(log_dir): Args: log_dir: (:obj:`str`) Path to a directory. + """ if not os.path.exists(log_dir): os.makedirs(log_dir) @@ -123,6 +124,7 @@ def prepare_logging(log_dir, log_level): - ``warning`` - ``info`` - ``debug`` + """ logformat = ( '%(asctime)s [%(name)s][%(levelname)-5s][%(process)s]: %(message)s' diff --git a/src/watchmaker/managers/platform.py b/src/watchmaker/managers/platform.py index a3588d891..905f77133 100644 --- a/src/watchmaker/managers/platform.py +++ b/src/watchmaker/managers/platform.py @@ -71,6 +71,7 @@ def retrieve_file(self, url, filename): filename: (:obj:`str`) Path where the file will be saved. + """ # Convert a local path to a URI url = watchmaker.utils.uri_from_filepath(url) @@ -268,6 +269,7 @@ def extract_contents(self, filepath, to_directory, create_dir=False): Switch to control the creation of a subdirectory within ``to_directory`` named for the filename of the compressed file. (*Default*: ``False``) + """ if filepath.endswith('.zip'): self.log.debug('File Type: zip') diff --git a/src/watchmaker/static/salt/content b/src/watchmaker/static/salt/content index 156cfaa74..354763d7d 160000 --- a/src/watchmaker/static/salt/content +++ b/src/watchmaker/static/salt/content @@ -1 +1 @@ -Subproject commit 156cfaa741ca28331dfe8c5edb692e2e2639bc72 +Subproject commit 354763d7defcd4bfdef1906e822fa599d5fa4cf2 diff --git a/src/watchmaker/static/salt/formulas/ash-linux-formula b/src/watchmaker/static/salt/formulas/ash-linux-formula index a673063b0..a42581d7c 160000 --- a/src/watchmaker/static/salt/formulas/ash-linux-formula +++ b/src/watchmaker/static/salt/formulas/ash-linux-formula @@ -1 +1 @@ -Subproject commit a673063b0e8d29467a890f81e97b237bc260ae3b +Subproject commit a42581d7c346c17c44b96bd21dbaa6bc7440e271 diff --git a/src/watchmaker/static/salt/formulas/dotnet4-formula b/src/watchmaker/static/salt/formulas/dotnet4-formula index 00b01d24a..af6ceaf68 160000 --- a/src/watchmaker/static/salt/formulas/dotnet4-formula +++ b/src/watchmaker/static/salt/formulas/dotnet4-formula @@ -1 +1 @@ -Subproject commit 00b01d24ad0ea2d649c580953090f99237e66588 +Subproject commit af6ceaf68f92b4ddf4c64d431eb5a5e2402b6218 diff --git a/src/watchmaker/static/salt/formulas/fup-formula b/src/watchmaker/static/salt/formulas/fup-formula new file mode 160000 index 000000000..b8bf2e0b3 --- /dev/null +++ b/src/watchmaker/static/salt/formulas/fup-formula @@ -0,0 +1 @@ +Subproject commit b8bf2e0b37f88acf933e794e5f81f03bcb9931c5 diff --git a/src/watchmaker/static/salt/formulas/join-domain-formula b/src/watchmaker/static/salt/formulas/join-domain-formula index a03aafe55..91b0ed5c9 160000 --- a/src/watchmaker/static/salt/formulas/join-domain-formula +++ b/src/watchmaker/static/salt/formulas/join-domain-formula @@ -1 +1 @@ -Subproject commit a03aafe554d7f4e4778d851dbf2d2b5f709ee4df +Subproject commit 91b0ed5c90222656df2e4de4f1fbe0b45e55b25b diff --git a/src/watchmaker/static/salt/formulas/scap-formula b/src/watchmaker/static/salt/formulas/scap-formula index 62c09292b..5e8bf597e 160000 --- a/src/watchmaker/static/salt/formulas/scap-formula +++ b/src/watchmaker/static/salt/formulas/scap-formula @@ -1 +1 @@ -Subproject commit 62c09292b0fcd11c74e541d60574559a38b56cf8 +Subproject commit 5e8bf597e623abbbf618a41bd6227ce527781f5b diff --git a/src/watchmaker/utils/__init__.py b/src/watchmaker/utils/__init__.py index e072b9409..6748e3b0b 100644 --- a/src/watchmaker/utils/__init__.py +++ b/src/watchmaker/utils/__init__.py @@ -77,6 +77,7 @@ def copytree(src, dst, force=False, **kwargs): force: (:obj:`bool`) Whether to delete destination prior to copy. (*Default*: ``False``) + """ if force and os.path.exists(dst): shutil.rmtree(dst) diff --git a/src/watchmaker/workers/salt.py b/src/watchmaker/workers/salt.py index a80fbdb1d..52060d2ab 100644 --- a/src/watchmaker/workers/salt.py +++ b/src/watchmaker/workers/salt.py @@ -83,6 +83,7 @@ class SaltBase(WorkerBase, PlatformManagerBase): computer account will be created when joining a domain. E.g. ``"OU=SuperCoolApp,DC=example,DC=com"`` (*Default*: ``''``) + """ def __init__(self, *args, **kwargs): @@ -319,6 +320,7 @@ def run_salt(self, command, **kwargs): Watchmaker will always begin the command with the options ``--local``, ``--retcode-passthrough``, and ``--no-color``, so do not specify those options in the command. + """ cmd = [ self.salt_call, @@ -551,6 +553,7 @@ class SaltLinux(SaltBase, LinuxPlatformManager): A git reference present in ``git_repo``, such as a commit or a tag. If not specified, the HEAD of the default branch is used. (*Default*: ``''``) + """ def __init__(self, *args, **kwargs): @@ -706,6 +709,7 @@ class SaltWindows(SaltBase, WindowsPlatformManager): salt formula. E.g. ``"MemberServer"``, ``"DomainController"``, or ``"Workstation"`` (*Default*: ``''``) + """ def __init__(self, *args, **kwargs): diff --git a/src/watchmaker/workers/yum.py b/src/watchmaker/workers/yum.py index 718632510..c3ae66848 100644 --- a/src/watchmaker/workers/yum.py +++ b/src/watchmaker/workers/yum.py @@ -21,6 +21,7 @@ class Yum(WorkerBase, LinuxPlatformManager): repo_map: (:obj:`list`) List of dictionaries containing a map of yum repo files to systems. (*Default*: ``[]``) + """ SUPPORTED_DISTS = ('amazon', 'centos', 'red hat') diff --git a/tests/test_saltworker.py b/tests/test_saltworker.py index 20164d662..a4841e1b7 100644 --- a/tests/test_saltworker.py +++ b/tests/test_saltworker.py @@ -32,6 +32,7 @@ def test_default_valid_environments(saltworker_client): Args: saltworker_client: (:obj:`src.workers.SaltBase`) + """ # test that the defaults work assert saltworker_client.before_install() is None @@ -43,6 +44,7 @@ def test_bogus_environment(saltworker_client): Args: saltworker_client: (:obj:`src.workers.SaltBase`) + """ # ensure InvalidValue is raised when a bogus environment type is selected with pytest.raises(InvalidValue): @@ -57,6 +59,7 @@ def test_valid_environment(saltworker_client): Args: saltworker_client: (:obj:`src.workers.SaltBase`) + """ saltworker_client.ent_env = 'dev' saltworker_client.valid_envs = [None, 'dev', 'test', 'prod']