Update ansible-test sanity command. (#31958)

* Use correct pip version in ansible-test.
* Add git fallback for validate-modules.
* Run sanity tests in a docker container.
* Use correct python version for sanity tests.
* Pin docker completion images and add default.
* Split pylint execution into multiple contexts.
* Only test .py files in use-argspec-type-path test.
* Accept identical python interpeter name or binary.
* Switch cloud tests to default container.
* Remove unused extras from pip install.
* Filter out empty pip commands.
* Don't force running of pip list.
* Support delegation for windows and network tests.
* Fix ansible-test python version usage.
* Fix ansible-test python version skipping.
* Use absolute path for log in ansible-test.
* Run vyos_command test on python 3.
* Fix windows/network instance persistence.
* Add `test/cache` dir to classification.
* Enable more python versions for network tests.
* Fix cs_router test.
This commit is contained in:
Matt Clay 2017-10-26 00:21:46 -07:00 committed by GitHub
commit cf1337ca9a
37 changed files with 788 additions and 456 deletions

View file

@ -1,19 +0,0 @@
#!/bin/sh
cd test/runner/
pylint --max-line-length=160 --reports=n ./*.py ./*/*.py ./*/*/*.py \
--jobs 2 \
--rcfile /dev/null \
--function-rgx '[a-z_][a-z0-9_]{2,40}$' \
--method-rgx '[a-z_][a-z0-9_]{2,40}$' \
-d unused-import \
-d too-few-public-methods \
-d too-many-arguments \
-d too-many-branches \
-d too-many-locals \
-d too-many-statements \
-d too-many-nested-blocks \
-d too-many-instance-attributes \
-d too-many-lines \
-d too-many-return-statements

View file

@ -31,7 +31,7 @@ done
# GREP_FORMAT_WHITELIST has been formatted so that wordsplitting is wanted. Therefore no double quotes around the var
# shellcheck disable=SC2086
egrep -r 'expanduser' lib/ansible/modules | egrep -v $GREP_FORMAT_WHITELIST
egrep -r 'expanduser' lib/ansible/modules | egrep '\.py:' | egrep -v $GREP_FORMAT_WHITELIST
if [ $? -ne 1 ]; then
printf 'The module(s) listed above use expanduser.\n'

View file

@ -0,0 +1,19 @@
[MESSAGES CONTROL]
disable=
no-self-use,
too-few-public-methods,
too-many-arguments,
too-many-branches,
too-many-instance-attributes,
too-many-lines,
too-many-locals,
too-many-nested-blocks,
too-many-return-statements,
too-many-statements,
unused-import,
[BASIC]
method-rgx=[a-z_][a-z0-9_]{2,40}$
function-rgx=[a-z_][a-z0-9_]{2,40}$

View file

@ -0,0 +1,107 @@
[MESSAGES CONTROL]
disable=
abstract-method,
access-member-before-definition,
anomalous-backslash-in-string,
arguments-differ,
assignment-from-no-return,
attribute-defined-outside-init,
bad-continuation,
bad-indentation,
bad-mcs-classmethod-argument,
bad-whitespace,
bare-except,
blacklisted-name,
broad-except,
cell-var-from-loop,
consider-iterating-dictionary,
consider-merging-isinstance,
consider-using-enumerate,
consider-using-ternary,
deprecated-lambda,
deprecated-method,
deprecated-module,
eval-used,
exec-used,
expression-not-assigned,
fixme,
function-redefined,
global-at-module-level,
global-statement,
global-variable-not-assigned,
global-variable-undefined,
import-error,
import-self,
invalid-name,
invalid-sequence-index,
invalid-unary-operand-type,
len-as-condition,
line-too-long,
literal-comparison,
locally-disabled,
method-hidden,
misplaced-comparison-constant,
missing-docstring,
no-else-return,
no-init,
no-member,
no-name-in-module,
no-self-use,
no-value-for-parameter,
non-iterator-returned,
not-a-mapping,
not-an-iterable,
not-callable,
old-style-class,
pointless-statement,
pointless-string-statement,
protected-access,
redefined-argument-from-local,
redefined-builtin,
redefined-outer-name,
redefined-variable-type,
reimported,
relative-import,
signature-differs,
simplifiable-if-statement,
super-init-not-called,
superfluous-parens,
too-few-public-methods,
too-many-ancestors,
too-many-arguments,
too-many-boolean-expressions,
too-many-branches,
too-many-function-args,
too-many-instance-attributes,
too-many-lines,
too-many-locals,
too-many-nested-blocks,
too-many-public-methods,
too-many-return-statements,
too-many-statements,
trailing-comma-tuple,
unbalanced-tuple-unpacking,
undefined-loop-variable,
unexpected-keyword-arg,
ungrouped-imports,
unidiomatic-typecheck,
unneeded-not,
unsubscriptable-object,
unsupported-assignment-operation,
unsupported-delete-operation,
unsupported-membership-test,
unused-argument,
unused-import,
unused-variable,
unused-wildcard-import,
used-before-assignment,
useless-super-delegation,
wildcard-import,
wrong-import-order,
wrong-import-position,
[TYPECHECK]
ignored-modules=
_MovedItems,

View file

@ -1,99 +0,0 @@
abstract-method
access-member-before-definition
anomalous-backslash-in-string
arguments-differ
assignment-from-no-return
attribute-defined-outside-init
bad-continuation
bad-indentation
bad-mcs-classmethod-argument
bad-whitespace
bare-except
blacklisted-name
broad-except
cell-var-from-loop
consider-iterating-dictionary
consider-merging-isinstance
consider-using-enumerate
consider-using-ternary
deprecated-lambda
deprecated-method
deprecated-module
eval-used
exec-used
expression-not-assigned
fixme
function-redefined
global-at-module-level
global-statement
global-variable-not-assigned
global-variable-undefined
import-error
import-self
invalid-name
invalid-sequence-index
invalid-unary-operand-type
len-as-condition
line-too-long
literal-comparison
locally-disabled
method-hidden
misplaced-comparison-constant
missing-docstring
no-else-return
no-init
no-member
no-name-in-module
no-self-use
no-value-for-parameter
non-iterator-returned
not-a-mapping
not-an-iterable
not-callable
old-style-class
pointless-statement
pointless-string-statement
protected-access
pylint
redefined-argument-from-local
redefined-builtin
redefined-outer-name
redefined-variable-type
reimported
relative-import
signature-differs
simplifiable-if-statement
super-init-not-called
superfluous-parens
too-few-public-methods
too-many-ancestors
too-many-arguments
too-many-boolean-expressions
too-many-branches
too-many-function-args
too-many-instance-attributes
too-many-lines
too-many-locals
too-many-nested-blocks
too-many-public-methods
too-many-return-statements
too-many-statements
trailing-comma-tuple
unbalanced-tuple-unpacking
undefined-loop-variable
ungrouped-imports
unidiomatic-typecheck
unneeded-not
unsubscriptable-object
unsupported-assignment-operation
unsupported-delete-operation
unsupported-membership-test
unused-argument
unused-import
unused-variable
unused-wildcard-import
used-before-assignment
useless-super-delegation
wildcard-import
wrong-import-order
wrong-import-position

View file

@ -23,6 +23,7 @@ import abc
import argparse
import ast
import json
import errno
import os
import re
import subprocess
@ -1253,7 +1254,20 @@ class GitCache(object):
else:
self.base_tree = []
self.head_tree = self._git(['ls-tree', '-r', '--name-only', 'HEAD', 'lib/ansible/modules/'])
try:
self.head_tree = self._git(['ls-tree', '-r', '--name-only', 'HEAD', 'lib/ansible/modules/'])
except GitError as ex:
if ex.status == 128:
# fallback when there is no .git directory
self.head_tree = self._get_module_files()
else:
raise
except OSError as ex:
if ex.errno == errno.ENOENT:
# fallback when git is not installed
self.head_tree = self._get_module_files()
else:
raise
self.base_module_paths = dict((os.path.basename(p), p) for p in self.base_tree if os.path.splitext(p)[1] in ('.py', '.ps1'))
@ -1268,14 +1282,33 @@ class GitCache(object):
if os.path.islink(path):
self.head_aliased_modules.add(os.path.basename(os.path.realpath(path)))
@staticmethod
def _get_module_files():
module_files = []
for (dir_path, dir_names, file_names) in os.walk('lib/ansible/modules/'):
for file_name in file_names:
module_files.append(os.path.join(dir_path, file_name))
return module_files
@staticmethod
def _git(args):
cmd = ['git'] + args
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
if p.returncode != 0:
raise GitError(stderr, p.returncode)
return stdout.decode('utf-8').splitlines()
class GitError(Exception):
def __init__(self, message, status):
super(GitError, self).__init__(message)
self.status = status
if __name__ == '__main__':
try:
main()