From 6ef1a6aeb686d67cf57733473cf0cb8bfa790f53 Mon Sep 17 00:00:00 2001 From: Matt Clay Date: Fri, 27 Jan 2017 12:34:00 -0800 Subject: [PATCH] Add `pep8` to `ansible-test`. (#20745) The rule sets and legacy file list are a first draft. It is likely that they will need to be revised. --- test/runner/lib/executor.py | 127 +++++- test/runner/lib/target.py | 3 + test/runner/requirements/sanity.txt | 1 + test/sanity/pep8/README.md | 26 ++ test/sanity/pep8/current-ignore.txt | 30 ++ test/sanity/pep8/legacy-files.txt | 615 ++++++++++++++++++++++++++++ test/sanity/pep8/legacy-ignore.txt | 25 ++ test/sanity/pep8/skip.txt | 0 8 files changed, 826 insertions(+), 1 deletion(-) create mode 100644 test/sanity/pep8/README.md create mode 100644 test/sanity/pep8/current-ignore.txt create mode 100644 test/sanity/pep8/legacy-files.txt create mode 100644 test/sanity/pep8/legacy-ignore.txt create mode 100644 test/sanity/pep8/skip.txt diff --git a/test/runner/lib/executor.py b/test/runner/lib/executor.py index 742585cc77e..544259bb138 100644 --- a/test/runner/lib/executor.py +++ b/test/runner/lib/executor.py @@ -2,7 +2,6 @@ from __future__ import absolute_import, print_function -import errno import glob import os import tempfile @@ -15,6 +14,7 @@ import random import pipes import string import atexit +import re import lib.pytar import lib.thread @@ -817,6 +817,130 @@ def command_sanity_shellcheck(args, targets): run_command(args, ['shellcheck'] + paths) +def command_sanity_pep8(args, targets): + """ + :type args: SanityConfig + :type targets: SanityTargets + """ + skip_path = 'test/sanity/pep8/skip.txt' + legacy_path = 'test/sanity/pep8/legacy-files.txt' + + with open(skip_path, 'r') as skip_fd: + skip_paths = set(skip_fd.read().splitlines()) + + with open(legacy_path, 'r') as legacy_fd: + legacy_paths = set(legacy_fd.read().splitlines()) + + with open('test/sanity/pep8/legacy-ignore.txt', 'r') as ignore_fd: + legacy_ignore = set(ignore_fd.read().splitlines()) + + with open('test/sanity/pep8/current-ignore.txt', 'r') as ignore_fd: + current_ignore = sorted(ignore_fd.read().splitlines()) + + paths = sorted(i.path for i in targets.include if os.path.splitext(i.path)[1] == '.py' and i.path not in skip_paths) + + if not paths: + display.info('No tests applicable.', verbosity=1) + return + + cmd = [ + 'pep8', + '--max-line-length', '160', + '--config', '/dev/null', + '--ignore', ','.join(sorted(current_ignore)), + ] + paths + + try: + stdout, stderr = run_command(args, cmd, capture=True) + status = 0 + except SubprocessError as ex: + stdout = ex.stdout + stderr = ex.stderr + status = ex.status + + if stderr: + raise SubprocessError(cmd=cmd, status=status, stderr=stderr) + + pattern = '^(?P[^:]*):(?P[0-9]+):(?P[0-9]+): (?P[A-Z0-9]{4}) (?P.*)$' + + results = [re.search(pattern, line).groupdict() for line in stdout.splitlines()] + + for result in results: + for key in 'line', 'column': + result[key] = int(result[key]) + + failed_result_paths = set([result['path'] for result in results]) + passed_legacy_paths = set([path for path in paths if path in legacy_paths and path not in failed_result_paths]) + + errors = [] + summary = {} + + for path in sorted(passed_legacy_paths): + # Keep files out of the list which no longer require the relaxed rule set. + errors.append('PEP 8: %s: Passes current rule set. Remove from legacy list (%s).' % (path, legacy_path)) + + for path in sorted(skip_paths): + if not os.path.exists(path): + # Keep files out of the list which no longer exist in the repo. + errors.append('PEP 8: %s: Does not exist. Remove from skip list (%s).' % (path, skip_path)) + + for path in sorted(legacy_paths): + if not os.path.exists(path): + # Keep files out of the list which no longer exist in the repo. + errors.append('PEP 8: %s: Does not exist. Remove from legacy list (%s).' % (path, legacy_path)) + + for result in results: + path = result['path'] + line = result['line'] + column = result['column'] + code = result['code'] + message = result['message'] + + msg = 'PEP 8: %s:%s:%s: %s %s' % (path, line, column, code, message) + + if path in legacy_paths: + msg += ' (legacy)' + else: + msg += ' (current)' + + if path in legacy_paths and code in legacy_ignore: + # Files on the legacy list are permitted to have errors on the legacy ignore list. + # However, we want to report on their existence to track progress towards eliminating these exceptions. + display.info(msg, verbosity=3) + + key = '%s %s' % (code, re.sub('[0-9]+', 'NNN', message)) + + if key not in summary: + summary[key] = 0 + + summary[key] += 1 + else: + # Files not on the legacy list and errors not on the legacy ignore list are PEP 8 policy errors. + errors.append(msg) + + for error in errors: + display.error(error) + + if summary: + lines = [] + count = 0 + + for key in sorted(summary): + count += summary[key] + lines.append('PEP 8: %5d %s' % (summary[key], key)) + + display.info('PEP 8: There were %d different legacy issues found (%d total):' % + (len(summary), count), verbosity=1) + + display.info('PEP 8: Count Code Message', verbosity=1) + + for line in lines: + display.info(line, verbosity=1) + + if errors: + raise ApplicationError('PEP 8: There are %d issues which need to be resolved.' % len(errors)) + + def command_sanity_yamllint(args, targets): """ :type args: SanityConfig @@ -1339,6 +1463,7 @@ SANITY_TESTS = ( SanityFunc('code-smell', command_sanity_code_smell, intercept=False), # tests which honor include/exclude SanityFunc('shellcheck', command_sanity_shellcheck, intercept=False), + SanityFunc('pep8', command_sanity_pep8, intercept=False), SanityFunc('yamllint', command_sanity_yamllint, intercept=False), SanityFunc('validate-modules', command_sanity_validate_modules, intercept=False), SanityFunc('ansible-doc', command_sanity_ansible_doc), diff --git a/test/runner/lib/target.py b/test/runner/lib/target.py index 1ea925e5cc9..f1126cfb06c 100644 --- a/test/runner/lib/target.py +++ b/test/runner/lib/target.py @@ -284,6 +284,9 @@ def walk_test_targets(path=None, module_path=None, extensions=None, prefix=None) if root.endswith('/__pycache__'): continue + if '/.tox/' in root: + continue + if path is None: root = root[2:] diff --git a/test/runner/requirements/sanity.txt b/test/runner/requirements/sanity.txt index 1a86edd4642..e1538122fc3 100644 --- a/test/runner/requirements/sanity.txt +++ b/test/runner/requirements/sanity.txt @@ -1,5 +1,6 @@ jinja2 mock +pep8 pylint voluptuous yamllint diff --git a/test/sanity/pep8/README.md b/test/sanity/pep8/README.md new file mode 100644 index 00000000000..2c1f068b835 --- /dev/null +++ b/test/sanity/pep8/README.md @@ -0,0 +1,26 @@ +# PEP 8 + +[PEP 8](https://www.python.org/dev/peps/pep-0008/) style guidelines are enforced by +[pep8](https://pypi.python.org/pypi/pep8) on all python files in the repository by default. + +## Current Rule Set + +By default all files are tested using the current rule set. +All `pep8` tests are executed, except those listed in the [current ignore list](current-ignore.txt). + +## Legacy Rule Set + +Files which are listed in the [legacy file list](legacy-files.txt) are tested using the legacy rule set. +All `pep8` tests are executed, except those listed in the [current ignore list](current-ignore.txt) or +[legacy ignore list](legacy-ignore.txt). + +> Files listed in the legacy file list which pass the current rule set will result in an error. +> This is intended to prevent regressions on style guidelines for files which pass the more stringent current rule set. + +## Skipping Tests + +Files listed in the [skip list](skip.txt) are not tested by `pep8`. + +## Removed Files + +Files which have been removed from the repository must be removed from the legacy file list and the skip list. diff --git a/test/sanity/pep8/current-ignore.txt b/test/sanity/pep8/current-ignore.txt new file mode 100644 index 00000000000..d09a3150be2 --- /dev/null +++ b/test/sanity/pep8/current-ignore.txt @@ -0,0 +1,30 @@ +E123 +E124 +E127 +E128 +E201 +E202 +E203 +E211 +E221 +E222 +E225 +E226 +E227 +E228 +E231 +E241 +E251 +E261 +E262 +E265 +E266 +E301 +E302 +E303 +E402 +E502 +E713 +E731 +W391 +W503 diff --git a/test/sanity/pep8/legacy-files.txt b/test/sanity/pep8/legacy-files.txt new file mode 100644 index 00000000000..e3cc1bc4c30 --- /dev/null +++ b/test/sanity/pep8/legacy-files.txt @@ -0,0 +1,615 @@ +contrib/inventory/abiquo.py +contrib/inventory/apache-libcloud.py +contrib/inventory/azure_rm.py +contrib/inventory/cloudstack.py +contrib/inventory/consul_io.py +contrib/inventory/digital_ocean.py +contrib/inventory/docker.py +contrib/inventory/ec2.py +contrib/inventory/fleet.py +contrib/inventory/freeipa.py +contrib/inventory/gce.py +contrib/inventory/linode.py +contrib/inventory/mdt_dynamic_inventory.py +contrib/inventory/openvz.py +contrib/inventory/rax.py +contrib/inventory/softlayer.py +contrib/inventory/spacewalk.py +contrib/inventory/ssh_config.py +contrib/inventory/stacki.py +contrib/inventory/vbox.py +contrib/inventory/vmware_inventory.py +contrib/inventory/windows_azure.py +contrib/inventory/zabbix.py +contrib/inventory/zone.py +docs/api/conf.py +docs/docsite/conf.py +docs/docsite/rst/conf.py +docs/docsite/rst/dev_guide/conf.py +examples/scripts/uptime.py +hacking/dump_playbook_attributes.py +hacking/metadata-tool.py +hacking/module_formatter.py +hacking/tests/gen_distribution_version_testcase.py +lib/ansible/cli/__init__.py +lib/ansible/cli/adhoc.py +lib/ansible/cli/console.py +lib/ansible/cli/galaxy.py +lib/ansible/cli/playbook.py +lib/ansible/compat/six/__init__.py +lib/ansible/constants.py +lib/ansible/errors/__init__.py +lib/ansible/executor/play_iterator.py +lib/ansible/executor/stats.py +lib/ansible/executor/task_executor.py +lib/ansible/galaxy/login.py +lib/ansible/galaxy/role.py +lib/ansible/galaxy/token.py +lib/ansible/inventory/dir.py +lib/ansible/inventory/script.py +lib/ansible/inventory/yaml.py +lib/ansible/module_utils/azure_rm_common.py +lib/ansible/module_utils/basic.py +lib/ansible/module_utils/docker_common.py +lib/ansible/module_utils/ec2.py +lib/ansible/module_utils/eos.py +lib/ansible/module_utils/f5.py +lib/ansible/module_utils/facts.py +lib/ansible/module_utils/gcp.py +lib/ansible/module_utils/known_hosts.py +lib/ansible/module_utils/mysql.py +lib/ansible/module_utils/nxos.py +lib/ansible/module_utils/redhat.py +lib/ansible/module_utils/vmware.py +lib/ansible/modules/cloud/amazon/_ec2_vpc.py +lib/ansible/modules/cloud/amazon/aws_kms.py +lib/ansible/modules/cloud/amazon/cloudformation.py +lib/ansible/modules/cloud/amazon/cloudformation_facts.py +lib/ansible/modules/cloud/amazon/cloudfront_facts.py +lib/ansible/modules/cloud/amazon/cloudtrail.py +lib/ansible/modules/cloud/amazon/cloudwatchevent_rule.py +lib/ansible/modules/cloud/amazon/dynamodb_table.py +lib/ansible/modules/cloud/amazon/ec2.py +lib/ansible/modules/cloud/amazon/ec2_ami.py +lib/ansible/modules/cloud/amazon/ec2_ami_copy.py +lib/ansible/modules/cloud/amazon/ec2_ami_find.py +lib/ansible/modules/cloud/amazon/ec2_asg.py +lib/ansible/modules/cloud/amazon/ec2_asg_facts.py +lib/ansible/modules/cloud/amazon/ec2_customer_gateway.py +lib/ansible/modules/cloud/amazon/ec2_elb.py +lib/ansible/modules/cloud/amazon/ec2_elb_facts.py +lib/ansible/modules/cloud/amazon/ec2_elb_lb.py +lib/ansible/modules/cloud/amazon/ec2_eni.py +lib/ansible/modules/cloud/amazon/ec2_eni_facts.py +lib/ansible/modules/cloud/amazon/ec2_facts.py +lib/ansible/modules/cloud/amazon/ec2_group.py +lib/ansible/modules/cloud/amazon/ec2_key.py +lib/ansible/modules/cloud/amazon/ec2_lc.py +lib/ansible/modules/cloud/amazon/ec2_lc_facts.py +lib/ansible/modules/cloud/amazon/ec2_metric_alarm.py +lib/ansible/modules/cloud/amazon/ec2_remote_facts.py +lib/ansible/modules/cloud/amazon/ec2_scaling_policy.py +lib/ansible/modules/cloud/amazon/ec2_snapshot_facts.py +lib/ansible/modules/cloud/amazon/ec2_tag.py +lib/ansible/modules/cloud/amazon/ec2_vol.py +lib/ansible/modules/cloud/amazon/ec2_vol_facts.py +lib/ansible/modules/cloud/amazon/ec2_vpc_dhcp_options.py +lib/ansible/modules/cloud/amazon/ec2_vpc_dhcp_options_facts.py +lib/ansible/modules/cloud/amazon/ec2_vpc_nacl.py +lib/ansible/modules/cloud/amazon/ec2_vpc_net.py +lib/ansible/modules/cloud/amazon/ec2_vpc_net_facts.py +lib/ansible/modules/cloud/amazon/ec2_vpc_peer.py +lib/ansible/modules/cloud/amazon/ec2_vpc_route_table.py +lib/ansible/modules/cloud/amazon/ec2_vpc_route_table_facts.py +lib/ansible/modules/cloud/amazon/ec2_vpc_subnet.py +lib/ansible/modules/cloud/amazon/ec2_vpc_subnet_facts.py +lib/ansible/modules/cloud/amazon/ec2_vpc_vgw.py +lib/ansible/modules/cloud/amazon/ec2_vpc_vgw_facts.py +lib/ansible/modules/cloud/amazon/ec2_win_password.py +lib/ansible/modules/cloud/amazon/ecs_service.py +lib/ansible/modules/cloud/amazon/ecs_service_facts.py +lib/ansible/modules/cloud/amazon/ecs_task.py +lib/ansible/modules/cloud/amazon/ecs_taskdefinition.py +lib/ansible/modules/cloud/amazon/elasticache.py +lib/ansible/modules/cloud/amazon/elasticache_subnet_group.py +lib/ansible/modules/cloud/amazon/iam.py +lib/ansible/modules/cloud/amazon/iam_cert.py +lib/ansible/modules/cloud/amazon/iam_policy.py +lib/ansible/modules/cloud/amazon/iam_role.py +lib/ansible/modules/cloud/amazon/lambda.py +lib/ansible/modules/cloud/amazon/rds.py +lib/ansible/modules/cloud/amazon/rds_param_group.py +lib/ansible/modules/cloud/amazon/rds_subnet_group.py +lib/ansible/modules/cloud/amazon/redshift.py +lib/ansible/modules/cloud/amazon/redshift_subnet_group.py +lib/ansible/modules/cloud/amazon/route53.py +lib/ansible/modules/cloud/amazon/route53_health_check.py +lib/ansible/modules/cloud/amazon/route53_zone.py +lib/ansible/modules/cloud/amazon/s3.py +lib/ansible/modules/cloud/amazon/s3_bucket.py +lib/ansible/modules/cloud/amazon/s3_lifecycle.py +lib/ansible/modules/cloud/amazon/s3_sync.py +lib/ansible/modules/cloud/amazon/s3_website.py +lib/ansible/modules/cloud/amazon/sns_topic.py +lib/ansible/modules/cloud/amazon/sqs_queue.py +lib/ansible/modules/cloud/amazon/sts_assume_role.py +lib/ansible/modules/cloud/amazon/sts_session_token.py +lib/ansible/modules/cloud/atomic/atomic_host.py +lib/ansible/modules/cloud/atomic/atomic_image.py +lib/ansible/modules/cloud/azure/azure.py +lib/ansible/modules/cloud/azure/azure_rm_deployment.py +lib/ansible/modules/cloud/azure/azure_rm_networkinterface.py +lib/ansible/modules/cloud/azure/azure_rm_networkinterface_facts.py +lib/ansible/modules/cloud/azure/azure_rm_securitygroup.py +lib/ansible/modules/cloud/azure/azure_rm_securitygroup_facts.py +lib/ansible/modules/cloud/azure/azure_rm_storageblob.py +lib/ansible/modules/cloud/azure/azure_rm_subnet.py +lib/ansible/modules/cloud/azure/azure_rm_virtualmachine.py +lib/ansible/modules/cloud/azure/azure_rm_virtualnetwork.py +lib/ansible/modules/cloud/centurylink/clc_loadbalancer.py +lib/ansible/modules/cloud/cloudscale/cloudscale_server.py +lib/ansible/modules/cloud/cloudstack/cs_firewall.py +lib/ansible/modules/cloud/cloudstack/cs_host.py +lib/ansible/modules/cloud/cloudstack/cs_instance.py +lib/ansible/modules/cloud/cloudstack/cs_instance_facts.py +lib/ansible/modules/cloud/cloudstack/cs_iso.py +lib/ansible/modules/cloud/cloudstack/cs_portforward.py +lib/ansible/modules/cloud/cloudstack/cs_securitygroup_rule.py +lib/ansible/modules/cloud/cloudstack/cs_sshkeypair.py +lib/ansible/modules/cloud/digital_ocean/digital_ocean.py +lib/ansible/modules/cloud/docker/_docker.py +lib/ansible/modules/cloud/docker/docker_container.py +lib/ansible/modules/cloud/docker/docker_image.py +lib/ansible/modules/cloud/docker/docker_service.py +lib/ansible/modules/cloud/google/gc_storage.py +lib/ansible/modules/cloud/google/gcdns_record.py +lib/ansible/modules/cloud/google/gcdns_zone.py +lib/ansible/modules/cloud/google/gce_img.py +lib/ansible/modules/cloud/google/gce_lb.py +lib/ansible/modules/cloud/google/gce_mig.py +lib/ansible/modules/cloud/google/gce_net.py +lib/ansible/modules/cloud/google/gce_pd.py +lib/ansible/modules/cloud/google/gce_tag.py +lib/ansible/modules/cloud/google/gcpubsub.py +lib/ansible/modules/cloud/google/gcpubsub_facts.py +lib/ansible/modules/cloud/linode/linode.py +lib/ansible/modules/cloud/misc/ovirt.py +lib/ansible/modules/cloud/misc/proxmox.py +lib/ansible/modules/cloud/misc/proxmox_kvm.py +lib/ansible/modules/cloud/misc/proxmox_template.py +lib/ansible/modules/cloud/misc/serverless.py +lib/ansible/modules/cloud/misc/virt.py +lib/ansible/modules/cloud/misc/virt_net.py +lib/ansible/modules/cloud/misc/xenserver_facts.py +lib/ansible/modules/cloud/openstack/_glance_image.py +lib/ansible/modules/cloud/openstack/_keystone_user.py +lib/ansible/modules/cloud/openstack/_nova_compute.py +lib/ansible/modules/cloud/openstack/_nova_keypair.py +lib/ansible/modules/cloud/openstack/_quantum_floating_ip.py +lib/ansible/modules/cloud/openstack/_quantum_floating_ip_associate.py +lib/ansible/modules/cloud/openstack/_quantum_network.py +lib/ansible/modules/cloud/openstack/_quantum_router.py +lib/ansible/modules/cloud/openstack/_quantum_router_gateway.py +lib/ansible/modules/cloud/openstack/_quantum_router_interface.py +lib/ansible/modules/cloud/openstack/_quantum_subnet.py +lib/ansible/modules/cloud/openstack/os_auth.py +lib/ansible/modules/cloud/openstack/os_client_config.py +lib/ansible/modules/cloud/openstack/os_nova_host_aggregate.py +lib/ansible/modules/cloud/openstack/os_object.py +lib/ansible/modules/cloud/openstack/os_project.py +lib/ansible/modules/cloud/openstack/os_project_facts.py +lib/ansible/modules/cloud/openstack/os_quota.py +lib/ansible/modules/cloud/openstack/os_recordset.py +lib/ansible/modules/cloud/openstack/os_zone.py +lib/ansible/modules/cloud/ovh/ovh_ip_loadbalancing_backend.py +lib/ansible/modules/cloud/packet/packet_device.py +lib/ansible/modules/cloud/packet/packet_sshkey.py +lib/ansible/modules/cloud/profitbricks/profitbricks.py +lib/ansible/modules/cloud/profitbricks/profitbricks_datacenter.py +lib/ansible/modules/cloud/profitbricks/profitbricks_nic.py +lib/ansible/modules/cloud/profitbricks/profitbricks_volume.py +lib/ansible/modules/cloud/profitbricks/profitbricks_volume_attachments.py +lib/ansible/modules/cloud/rackspace/rax_cbs.py +lib/ansible/modules/cloud/rackspace/rax_cbs_attachments.py +lib/ansible/modules/cloud/rackspace/rax_clb.py +lib/ansible/modules/cloud/rackspace/rax_facts.py +lib/ansible/modules/cloud/rackspace/rax_identity.py +lib/ansible/modules/cloud/rackspace/rax_network.py +lib/ansible/modules/cloud/rackspace/rax_queue.py +lib/ansible/modules/cloud/softlayer/sl_vm.py +lib/ansible/modules/cloud/vmware/vca_fw.py +lib/ansible/modules/cloud/vmware/vmware_guest.py +lib/ansible/modules/cloud/vmware/vmware_local_user_manager.py +lib/ansible/modules/cloud/vmware/vmware_vm_vss_dvs_migrate.py +lib/ansible/modules/cloud/vmware/vmware_vswitch.py +lib/ansible/modules/cloud/vmware/vsphere_copy.py +lib/ansible/modules/cloud/vmware/vsphere_guest.py +lib/ansible/modules/cloud/webfaction/webfaction_app.py +lib/ansible/modules/cloud/webfaction/webfaction_db.py +lib/ansible/modules/cloud/webfaction/webfaction_domain.py +lib/ansible/modules/cloud/webfaction/webfaction_mailbox.py +lib/ansible/modules/cloud/webfaction/webfaction_site.py +lib/ansible/modules/clustering/consul.py +lib/ansible/modules/clustering/consul_acl.py +lib/ansible/modules/clustering/consul_kv.py +lib/ansible/modules/clustering/consul_session.py +lib/ansible/modules/commands/command.py +lib/ansible/modules/commands/script.py +lib/ansible/modules/crypto/openssl_privatekey.py +lib/ansible/modules/crypto/openssl_publickey.py +lib/ansible/modules/database/influxdb/influxdb_retention_policy.py +lib/ansible/modules/database/misc/elasticsearch_plugin.py +lib/ansible/modules/database/misc/kibana_plugin.py +lib/ansible/modules/database/misc/mongodb_parameter.py +lib/ansible/modules/database/misc/mongodb_user.py +lib/ansible/modules/database/misc/redis.py +lib/ansible/modules/database/misc/riak.py +lib/ansible/modules/database/mssql/mssql_db.py +lib/ansible/modules/database/mysql/mysql_db.py +lib/ansible/modules/database/mysql/mysql_replication.py +lib/ansible/modules/database/mysql/mysql_user.py +lib/ansible/modules/database/mysql/mysql_variables.py +lib/ansible/modules/database/postgresql/postgresql_db.py +lib/ansible/modules/database/postgresql/postgresql_ext.py +lib/ansible/modules/database/postgresql/postgresql_lang.py +lib/ansible/modules/database/postgresql/postgresql_privs.py +lib/ansible/modules/database/postgresql/postgresql_schema.py +lib/ansible/modules/database/postgresql/postgresql_user.py +lib/ansible/modules/database/vertica/vertica_configuration.py +lib/ansible/modules/database/vertica/vertica_role.py +lib/ansible/modules/database/vertica/vertica_schema.py +lib/ansible/modules/database/vertica/vertica_user.py +lib/ansible/modules/files/acl.py +lib/ansible/modules/files/archive.py +lib/ansible/modules/files/copy.py +lib/ansible/modules/files/find.py +lib/ansible/modules/files/ini_file.py +lib/ansible/modules/files/lineinfile.py +lib/ansible/modules/files/patch.py +lib/ansible/modules/files/stat.py +lib/ansible/modules/files/synchronize.py +lib/ansible/modules/files/tempfile.py +lib/ansible/modules/files/unarchive.py +lib/ansible/modules/messaging/rabbitmq_binding.py +lib/ansible/modules/messaging/rabbitmq_exchange.py +lib/ansible/modules/messaging/rabbitmq_queue.py +lib/ansible/modules/monitoring/boundary_meter.py +lib/ansible/modules/monitoring/circonus_annotation.py +lib/ansible/modules/monitoring/datadog_monitor.py +lib/ansible/modules/monitoring/librato_annotation.py +lib/ansible/modules/monitoring/logicmonitor.py +lib/ansible/modules/monitoring/logicmonitor_facts.py +lib/ansible/modules/monitoring/monit.py +lib/ansible/modules/monitoring/nagios.py +lib/ansible/modules/monitoring/newrelic_deployment.py +lib/ansible/modules/monitoring/pagerduty.py +lib/ansible/modules/monitoring/pagerduty_alert.py +lib/ansible/modules/monitoring/pingdom.py +lib/ansible/modules/monitoring/sensu_check.py +lib/ansible/modules/monitoring/stackdriver.py +lib/ansible/modules/monitoring/statusio_maintenance.py +lib/ansible/modules/monitoring/zabbix_host.py +lib/ansible/modules/monitoring/zabbix_hostmacro.py +lib/ansible/modules/monitoring/zabbix_screen.py +lib/ansible/modules/network/a10/a10_server.py +lib/ansible/modules/network/a10/a10_server_axapi3.py +lib/ansible/modules/network/a10/a10_service_group.py +lib/ansible/modules/network/a10/a10_virtual_server.py +lib/ansible/modules/network/basics/get_url.py +lib/ansible/modules/network/basics/slurp.py +lib/ansible/modules/network/basics/uri.py +lib/ansible/modules/network/bigswitch/bigmon_chain.py +lib/ansible/modules/network/cloudengine/ce_command.py +lib/ansible/modules/network/cloudflare_dns.py +lib/ansible/modules/network/dellos10/dellos10_facts.py +lib/ansible/modules/network/dellos6/dellos6_facts.py +lib/ansible/modules/network/dellos9/dellos9_command.py +lib/ansible/modules/network/dellos9/dellos9_config.py +lib/ansible/modules/network/dellos9/dellos9_facts.py +lib/ansible/modules/network/dnsimple.py +lib/ansible/modules/network/dnsmadeeasy.py +lib/ansible/modules/network/eos/eos_eapi.py +lib/ansible/modules/network/exoscale/exo_dns_record.py +lib/ansible/modules/network/f5/bigip_facts.py +lib/ansible/modules/network/f5/bigip_monitor_tcp.py +lib/ansible/modules/network/f5/bigip_node.py +lib/ansible/modules/network/f5/bigip_pool.py +lib/ansible/modules/network/f5/bigip_pool_member.py +lib/ansible/modules/network/f5/bigip_virtual_server.py +lib/ansible/modules/network/haproxy.py +lib/ansible/modules/network/illumos/dladm_vlan.py +lib/ansible/modules/network/ios/ios_config.py +lib/ansible/modules/network/junos/junos_facts.py +lib/ansible/modules/network/lldp.py +lib/ansible/modules/network/nmcli.py +lib/ansible/modules/network/nxos/nxos_aaa_server.py +lib/ansible/modules/network/nxos/nxos_aaa_server_host.py +lib/ansible/modules/network/nxos/nxos_acl.py +lib/ansible/modules/network/nxos/nxos_acl_interface.py +lib/ansible/modules/network/nxos/nxos_bgp.py +lib/ansible/modules/network/nxos/nxos_bgp_af.py +lib/ansible/modules/network/nxos/nxos_bgp_neighbor.py +lib/ansible/modules/network/nxos/nxos_bgp_neighbor_af.py +lib/ansible/modules/network/nxos/nxos_evpn_global.py +lib/ansible/modules/network/nxos/nxos_evpn_vni.py +lib/ansible/modules/network/nxos/nxos_feature.py +lib/ansible/modules/network/nxos/nxos_file_copy.py +lib/ansible/modules/network/nxos/nxos_gir.py +lib/ansible/modules/network/nxos/nxos_gir_profile_management.py +lib/ansible/modules/network/nxos/nxos_hsrp.py +lib/ansible/modules/network/nxos/nxos_igmp.py +lib/ansible/modules/network/nxos/nxos_igmp_interface.py +lib/ansible/modules/network/nxos/nxos_igmp_snooping.py +lib/ansible/modules/network/nxos/nxos_install_os.py +lib/ansible/modules/network/nxos/nxos_interface.py +lib/ansible/modules/network/nxos/nxos_interface_ospf.py +lib/ansible/modules/network/nxos/nxos_ip_interface.py +lib/ansible/modules/network/nxos/nxos_mtu.py +lib/ansible/modules/network/nxos/nxos_ntp.py +lib/ansible/modules/network/nxos/nxos_ntp_auth.py +lib/ansible/modules/network/nxos/nxos_ntp_options.py +lib/ansible/modules/network/nxos/nxos_ospf.py +lib/ansible/modules/network/nxos/nxos_ospf_vrf.py +lib/ansible/modules/network/nxos/nxos_overlay_global.py +lib/ansible/modules/network/nxos/nxos_pim.py +lib/ansible/modules/network/nxos/nxos_pim_interface.py +lib/ansible/modules/network/nxos/nxos_pim_rp_address.py +lib/ansible/modules/network/nxos/nxos_ping.py +lib/ansible/modules/network/nxos/nxos_portchannel.py +lib/ansible/modules/network/nxos/nxos_reboot.py +lib/ansible/modules/network/nxos/nxos_rollback.py +lib/ansible/modules/network/nxos/nxos_smu.py +lib/ansible/modules/network/nxos/nxos_snapshot.py +lib/ansible/modules/network/nxos/nxos_snmp_community.py +lib/ansible/modules/network/nxos/nxos_snmp_contact.py +lib/ansible/modules/network/nxos/nxos_snmp_host.py +lib/ansible/modules/network/nxos/nxos_snmp_location.py +lib/ansible/modules/network/nxos/nxos_snmp_traps.py +lib/ansible/modules/network/nxos/nxos_snmp_user.py +lib/ansible/modules/network/nxos/nxos_static_route.py +lib/ansible/modules/network/nxos/nxos_switchport.py +lib/ansible/modules/network/nxos/nxos_udld.py +lib/ansible/modules/network/nxos/nxos_udld_interface.py +lib/ansible/modules/network/nxos/nxos_vlan.py +lib/ansible/modules/network/nxos/nxos_vpc.py +lib/ansible/modules/network/nxos/nxos_vpc_interface.py +lib/ansible/modules/network/nxos/nxos_vrf.py +lib/ansible/modules/network/nxos/nxos_vrf_af.py +lib/ansible/modules/network/nxos/nxos_vrf_interface.py +lib/ansible/modules/network/nxos/nxos_vrrp.py +lib/ansible/modules/network/nxos/nxos_vtp_domain.py +lib/ansible/modules/network/nxos/nxos_vtp_password.py +lib/ansible/modules/network/nxos/nxos_vtp_version.py +lib/ansible/modules/network/nxos/nxos_vxlan_vtep.py +lib/ansible/modules/network/nxos/nxos_vxlan_vtep_vni.py +lib/ansible/modules/network/ovs/openvswitch_port.py +lib/ansible/modules/network/panos/panos_nat_policy.py +lib/ansible/modules/network/snmp_facts.py +lib/ansible/modules/network/wakeonlan.py +lib/ansible/modules/notification/flowdock.py +lib/ansible/modules/notification/hall.py +lib/ansible/modules/notification/irc.py +lib/ansible/modules/notification/mqtt.py +lib/ansible/modules/notification/osx_say.py +lib/ansible/modules/notification/pushbullet.py +lib/ansible/modules/notification/sendgrid.py +lib/ansible/modules/notification/sns.py +lib/ansible/modules/packaging/language/bundler.py +lib/ansible/modules/packaging/language/composer.py +lib/ansible/modules/packaging/language/cpanm.py +lib/ansible/modules/packaging/language/maven_artifact.py +lib/ansible/modules/packaging/language/pear.py +lib/ansible/modules/packaging/os/apt.py +lib/ansible/modules/packaging/os/apt_key.py +lib/ansible/modules/packaging/os/apt_rpm.py +lib/ansible/modules/packaging/os/dnf.py +lib/ansible/modules/packaging/os/dpkg_selections.py +lib/ansible/modules/packaging/os/homebrew.py +lib/ansible/modules/packaging/os/layman.py +lib/ansible/modules/packaging/os/openbsd_pkg.py +lib/ansible/modules/packaging/os/opkg.py +lib/ansible/modules/packaging/os/pacman.py +lib/ansible/modules/packaging/os/pkg5_publisher.py +lib/ansible/modules/packaging/os/pkgin.py +lib/ansible/modules/packaging/os/pkgng.py +lib/ansible/modules/packaging/os/pkgutil.py +lib/ansible/modules/packaging/os/portinstall.py +lib/ansible/modules/packaging/os/redhat_subscription.py +lib/ansible/modules/packaging/os/rhn_channel.py +lib/ansible/modules/packaging/os/rhn_register.py +lib/ansible/modules/packaging/os/rpm_key.py +lib/ansible/modules/packaging/os/svr4pkg.py +lib/ansible/modules/packaging/os/swdepot.py +lib/ansible/modules/packaging/os/urpmi.py +lib/ansible/modules/packaging/os/yum.py +lib/ansible/modules/packaging/os/zypper.py +lib/ansible/modules/packaging/os/zypper_repository.py +lib/ansible/modules/remote_management/foreman/katello.py +lib/ansible/modules/remote_management/stacki/stacki_host.py +lib/ansible/modules/source_control/github_hooks.py +lib/ansible/modules/source_control/hg.py +lib/ansible/modules/storage/infinidat/infini_export.py +lib/ansible/modules/storage/infinidat/infini_export_client.py +lib/ansible/modules/storage/infinidat/infini_pool.py +lib/ansible/modules/storage/netapp/netapp_e_amg.py +lib/ansible/modules/storage/netapp/netapp_e_amg_sync.py +lib/ansible/modules/storage/netapp/netapp_e_auth.py +lib/ansible/modules/storage/netapp/netapp_e_host.py +lib/ansible/modules/storage/netapp/netapp_e_hostgroup.py +lib/ansible/modules/storage/netapp/netapp_e_snapshot_group.py +lib/ansible/modules/storage/netapp/netapp_e_snapshot_volume.py +lib/ansible/modules/storage/netapp/netapp_e_storage_system.py +lib/ansible/modules/storage/netapp/netapp_e_storagepool.py +lib/ansible/modules/system/authorized_key.py +lib/ansible/modules/system/capabilities.py +lib/ansible/modules/system/cron.py +lib/ansible/modules/system/debconf.py +lib/ansible/modules/system/facter.py +lib/ansible/modules/system/filesystem.py +lib/ansible/modules/system/firewalld.py +lib/ansible/modules/system/gconftool2.py +lib/ansible/modules/system/gluster_volume.py +lib/ansible/modules/system/group.py +lib/ansible/modules/system/known_hosts.py +lib/ansible/modules/system/locale_gen.py +lib/ansible/modules/system/lvg.py +lib/ansible/modules/system/lvol.py +lib/ansible/modules/system/modprobe.py +lib/ansible/modules/system/ohai.py +lib/ansible/modules/system/open_iscsi.py +lib/ansible/modules/system/openwrt_init.py +lib/ansible/modules/system/pam_limits.py +lib/ansible/modules/system/sefcontext.py +lib/ansible/modules/system/seport.py +lib/ansible/modules/system/setup.py +lib/ansible/modules/system/solaris_zone.py +lib/ansible/modules/system/sysctl.py +lib/ansible/modules/system/systemd.py +lib/ansible/modules/system/ufw.py +lib/ansible/modules/system/user.py +lib/ansible/modules/utilities/helper/_accelerate.py +lib/ansible/modules/utilities/helper/meta.py +lib/ansible/modules/utilities/logic/assert.py +lib/ansible/modules/utilities/logic/async_status.py +lib/ansible/modules/utilities/logic/include.py +lib/ansible/modules/utilities/logic/include_role.py +lib/ansible/modules/utilities/logic/include_vars.py +lib/ansible/modules/utilities/logic/pause.py +lib/ansible/modules/utilities/logic/set_fact.py +lib/ansible/modules/utilities/logic/wait_for.py +lib/ansible/modules/web_infrastructure/apache2_mod_proxy.py +lib/ansible/modules/web_infrastructure/apache2_module.py +lib/ansible/modules/web_infrastructure/django_manage.py +lib/ansible/modules/web_infrastructure/jenkins_job.py +lib/ansible/modules/web_infrastructure/jira.py +lib/ansible/modules/web_infrastructure/letsencrypt.py +lib/ansible/modules/web_infrastructure/nginx_status_facts.py +lib/ansible/modules/web_infrastructure/taiga_issue.py +lib/ansible/modules/windows/win_acl.py +lib/ansible/modules/windows/win_acl_inheritance.py +lib/ansible/modules/windows/win_chocolatey.py +lib/ansible/modules/windows/win_command.py +lib/ansible/modules/windows/win_feature.py +lib/ansible/modules/windows/win_lineinfile.py +lib/ansible/modules/windows/win_nssm.py +lib/ansible/modules/windows/win_package.py +lib/ansible/modules/windows/win_path.py +lib/ansible/modules/windows/win_regedit.py +lib/ansible/modules/windows/win_regmerge.py +lib/ansible/modules/windows/win_robocopy.py +lib/ansible/modules/windows/win_say.py +lib/ansible/modules/windows/win_share.py +lib/ansible/modules/windows/win_shell.py +lib/ansible/modules/windows/win_shortcut.py +lib/ansible/modules/windows/win_unzip.py +lib/ansible/modules/windows/win_updates.py +lib/ansible/modules/windows/win_uri.py +lib/ansible/modules/windows/win_webpicmd.py +lib/ansible/parsing/mod_args.py +lib/ansible/playbook/attribute.py +lib/ansible/playbook/block.py +lib/ansible/playbook/helpers.py +lib/ansible/playbook/play_context.py +lib/ansible/playbook/playbook_include.py +lib/ansible/playbook/role/__init__.py +lib/ansible/playbook/role/metadata.py +lib/ansible/playbook/role_include.py +lib/ansible/playbook/taggable.py +lib/ansible/plugins/action/__init__.py +lib/ansible/plugins/action/add_host.py +lib/ansible/plugins/action/async.py +lib/ansible/plugins/action/package.py +lib/ansible/plugins/action/service.py +lib/ansible/plugins/action/set_fact.py +lib/ansible/plugins/action/set_stats.py +lib/ansible/plugins/action/synchronize.py +lib/ansible/plugins/action/template.py +lib/ansible/plugins/cache/jsonfile.py +lib/ansible/plugins/callback/default.py +lib/ansible/plugins/callback/dense.py +lib/ansible/plugins/callback/foreman.py +lib/ansible/plugins/callback/jabber.py +lib/ansible/plugins/callback/logentries.py +lib/ansible/plugins/callback/oneline.py +lib/ansible/plugins/callback/profile_tasks.py +lib/ansible/plugins/callback/selective.py +lib/ansible/plugins/callback/syslog_json.py +lib/ansible/plugins/connection/accelerate.py +lib/ansible/plugins/connection/iocage.py +lib/ansible/plugins/connection/paramiko_ssh.py +lib/ansible/plugins/connection/ssh.py +lib/ansible/plugins/connection/winrm.py +lib/ansible/plugins/filter/core.py +lib/ansible/plugins/filter/ipaddr.py +lib/ansible/plugins/filter/mathstuff.py +lib/ansible/plugins/lookup/dig.py +lib/ansible/plugins/lookup/dnstxt.py +lib/ansible/plugins/lookup/first_found.py +lib/ansible/plugins/lookup/hashi_vault.py +lib/ansible/plugins/lookup/mongodb.py +lib/ansible/plugins/lookup/pipe.py +lib/ansible/plugins/lookup/random_choice.py +lib/ansible/plugins/lookup/sequence.py +lib/ansible/plugins/shell/fish.py +lib/ansible/plugins/shell/sh.py +lib/ansible/plugins/strategy/__init__.py +lib/ansible/plugins/strategy/debug.py +lib/ansible/plugins/strategy/linear.py +lib/ansible/template/__init__.py +lib/ansible/utils/cmd_functions.py +lib/ansible/utils/encrypt.py +lib/ansible/utils/helpers.py +lib/ansible/utils/module_docs.py +lib/ansible/utils/module_docs_fragments/auth_basic.py +lib/ansible/utils/module_docs_fragments/aws.py +lib/ansible/utils/module_docs_fragments/azure_tags.py +lib/ansible/utils/module_docs_fragments/cloudengine.py +lib/ansible/utils/module_docs_fragments/ec2.py +lib/ansible/utils/module_docs_fragments/files.py +lib/ansible/utils/module_docs_fragments/infinibox.py +lib/ansible/utils/module_docs_fragments/netapp.py +lib/ansible/utils/module_docs_fragments/ovirt.py +lib/ansible/utils/module_docs_fragments/ovirt_facts.py +lib/ansible/vars/__init__.py +setup.py +test/integration/cleanup_ec2.py +test/integration/cleanup_gce.py +test/integration/setup_gce.py +test/integration/targets/async/library/async_test.py +test/units/cli/test_galaxy.py +test/units/contrib/inventory/test_vmware_inventory.py +test/units/errors/test_errors.py +test/units/executor/test_playbook_executor.py +test/units/executor/test_task_executor.py +test/units/mock/yaml_helper.py +test/units/module_utils/basic/test__log_invocation.py +test/units/module_utils/basic/test_exit_json.py +test/units/module_utils/basic/test_log.py +test/units/module_utils/basic/test_no_log.py +test/units/module_utils/basic/test_safe_eval.py +test/units/module_utils/basic/test_set_mode_if_different.py +test/units/module_utils/gcp/test_auth.py +test/units/module_utils/json_utils/test_filter_non_json_lines.py +test/units/module_utils/test_basic.py +test/units/module_utils/test_distribution_version.py +test/units/module_utils/test_facts.py +test/units/module_utils/test_text.py +test/units/modules/cloud/amazon/test_ec2_vpc_nat_gateway.py +test/units/modules/cloud/google/test_gce_tag.py +test/units/parsing/test_mod_args.py +test/units/parsing/yaml/test_loader.py +test/units/playbook/test_block.py +test/units/playbook/test_helpers.py +test/units/playbook/test_play.py +test/units/playbook/test_play_context.py +test/units/playbook/test_task.py +test/units/plugins/action/test_raw.py +test/units/plugins/action/test_synchronize.py +test/units/plugins/lookup/test_ini.py +test/units/plugins/lookup/test_lastpass.py +test/units/plugins/lookup/test_password.py +test/units/plugins/strategy/test_strategy_base.py +test/units/template/test_templar.py +test/units/template/test_template_utilities.py +test/units/utils/test_vars.py +test/units/vars/test_variable_manager.py diff --git a/test/sanity/pep8/legacy-ignore.txt b/test/sanity/pep8/legacy-ignore.txt new file mode 100644 index 00000000000..7f0227203f5 --- /dev/null +++ b/test/sanity/pep8/legacy-ignore.txt @@ -0,0 +1,25 @@ +E101 +E111 +E114 +E115 +E116 +E121 +E122 +E125 +E126 +E129 +E131 +E271 +E272 +E401 +E501 +E701 +E703 +E704 +E711 +E712 +E721 +W191 +W291 +W292 +W293 diff --git a/test/sanity/pep8/skip.txt b/test/sanity/pep8/skip.txt new file mode 100644 index 00000000000..e69de29bb2d