From 822236810efd0e369fce636cb91e88c435885a8c Mon Sep 17 00:00:00 2001 From: John R Barker Date: Fri, 14 Sep 2018 12:33:23 +0100 Subject: [PATCH] BOTMETA Validator + Bulk tidyup, support:(core,community,network) (#44903) plugins/ is COMMUNITY Set sensible defaults for directories support:network for the platforms that we Networking SUPPORTS, everything else is COMMUNITY Mark other support:network (ansible-connection, etc) Infoblox is support:core contrib/ by definition should be support:community Remove duplicated labels Make yamllint happy(ier) Adds sanity test to ensure BOTMETA.yml is valid --- .github/BOTMETA.yml | 605 +++++++++++------- .../rst/dev_guide/testing/sanity/botmeta.rst | 4 + test/sanity/code-smell/botmeta.json | 4 + test/sanity/code-smell/botmeta.py | 77 +++ 4 files changed, 463 insertions(+), 227 deletions(-) create mode 100644 docs/docsite/rst/dev_guide/testing/sanity/botmeta.rst create mode 100644 test/sanity/code-smell/botmeta.json create mode 100755 test/sanity/code-smell/botmeta.py diff --git a/.github/BOTMETA.yml b/.github/BOTMETA.yml index 4ca0555df78..baf7e24c966 100644 --- a/.github/BOTMETA.yml +++ b/.github/BOTMETA.yml @@ -27,7 +27,8 @@ # ignored - these people should never be notified # deprecated - this file is deprecated but probably not yet renamed # keywords - used to identify this file based on the issue description -# support - used for files without internal metadata +# support - used for files without internal ANSIBLE_METADATA, see +# https://github.com/ansible/ansible/labels?q=support for full list # labels - list of GitHub labels to apply. Path components of 'file' parent key # which are valid GitHub labels are automatically added. # @@ -151,7 +152,7 @@ files: ignored: astorije maintainers: $team_ansible $modules/files/assemble.py: $team_ansible - $modules/files/copy.py: $team_ansible ptux + $modules/files/copy.py: $team_ansible $modules/files/fetch.py: $team_ansible $modules/files/file.py: $team_ansible $modules/files/find.py: $team_ansible @@ -210,7 +211,6 @@ files: $modules/network/asa/: ogenstad gdpak $modules/network/avi/: $team_avi $modules/network/bigswitch/: jayakody tedelhourani vuile - $modules/network/citrix/netscaler.py: $team_ansible $modules/network/cloudengine/: QijunPan $modules/network/cnos/: dkasberg amuraleedhar $modules/network/cumulus/: $team_cumulus @@ -245,11 +245,7 @@ files: $modules/network/nxos/: $team_nxos $modules/network/nso/: $team_nso $modules/network/onyx/: $team_onyx - $modules/network/openvswitch/: - ignored: stygstra - maintainers: $team_networking $modules/network/ordnance/: alexanderturner djh00t - $modules/network/opx/: $team_dell $modules/network/ovs/: ignored: stygstra maintainers: rcarrillocruz @@ -262,7 +258,7 @@ files: $modules/network/system/: $team_networking $modules/network/voss/: $team_extreme $modules/network/vyos/: Qalthos samdoran - $modules/notification/osx_say.py: $team_ansible + $modules/notification/_osx_say.py: $team_ansible $modules/notification/rocketchat.py: ignored: ramondelafuente maintainers: Deepakkothandan @@ -301,7 +297,7 @@ files: $modules/remote_management/imc/: dagwieers $modules/remote_management/ipmi/: cloudnull $modules/remote_management/manageiq/: $team_manageiq - $modules/remote_management/redfish/: $team_redfish + $modules/remote_management/redfish/: jose-delarosa $modules/remote_management/stacki/stacki_host.py: bbyhuy bsanders $modules/remote_management/ucs/: $team_ucs $modules/source_control/git.py: $team_ansible @@ -350,7 +346,7 @@ files: $modules/web_infrastructure/ansible_tower/: $team_tower $modules/web_infrastructure/django_manage.py: scottanderson42 $modules/web_infrastructure/htpasswd.py: $team_ansible - $modules/web_infrastructure/jboss/: $team_jboss + $modules/web_infrastructure/jboss: $team_jboss $modules/web_infrastructure/jira.py: Slezhuk $modules/windows/: maintainers: $team_windows @@ -358,257 +354,325 @@ files: $modules/windows/win_security_policy.py: defionscode bin/ansible-connection: keywords: - - persistent connection - labels: - - networking - maintainers: $team_networking + - persistent connection + labels: networking + contrib/: + support: community contrib/inventory: keywords: - - dynamic inventory script - - dynamic inventory - - inventory script + - dynamic inventory script + - dynamic inventory + - inventory script labels: c:inventory/contrib_script support: community contrib/inventory/digital_ocean.py: keywords: - - digital_ocean dynamic inventory script + - digital_ocean dynamic inventory script maintainers: BondAnthony labels: - - cloud + - cloud support: community contrib/inventory/linode.py: keywords: - - linode dynamic inventory script + - linode dynamic inventory script maintainers: intheclouddan lwm zbal labels: cloud - contrib/inventory/openstack.py: + contrib/inventory/openstack_inventory.py: keywords: - - openstack dynamic inventory script + - openstack dynamic inventory script maintainers: $team_openstack labels: - - cloud + - cloud + contrib/inventory/ovirt4.py: + maintainers: machacekondra + labels: + - ovirt + - cloud contrib/inventory/infoblox.py: keywords: - infoblox dynamic inventory script labels: - ipam + - nios - networking maintainers: $team_networking contrib/inventory/azure_rm.py: keywords: - - azure inventory - - azure rm inventory - - azure azure_rm dynamic inventory script + - azure inventory + - azure rm inventory + - azure azure_rm dynamic inventory script labels: - - cloud - - azure + - cloud + - azure maintainers: $team_azure contrib/inventory/ec2: keywords: - - aws dynamic inventory - - aws inventory - - ec2 inventory - - ec2 dynamic inventory - - ec2.py dynamic inventory script - - ec2.py inventory script - - ec2.py inventory + - aws dynamic inventory + - aws inventory + - ec2 inventory + - ec2 dynamic inventory + - ec2.py dynamic inventory script + - ec2.py inventory script + - ec2.py inventory labels: - - cloud - - aws + - cloud + - aws notified: ryansb s-hertel willthames contrib/inventory/vmware.py: keywords: - - vmware inventory - - vmware dynamic inventory script + - vmware inventory + - vmware dynamic inventory script labels: - - cloud + - cloud maintainers: $team_vmware contrib/inventory/vmware_inventory.py: keywords: - - vmware inventory - - vmware dynamic inventory script + - vmware inventory + - vmware dynamic inventory script labels: - - cloud - - vmware + - cloud + - vmware maintainers: $team_vmware lib/ansible/inventory: keywords: - - core inventory - - inventory - - inventory parsing + - core inventory + - inventory + - inventory parsing +############################################# +# MODULE_UTILS + $module_utils: + support: community + $module_utils/azure_rm_common.py: + maintainers: $team_azure + labels: + - azure + - cloud + $module_utils/acme.py: + maintainers: resmo felixfontein + $module_utils/cloudstack.py: + maintainers: $team_cloudstack + labels: cloudstack + $module_utils/crypto.py: + maintainers: Spredzy + $module_utils/docker_common.py: + maintainers: $team_ansible dariko felixfontein jwitko kassiansun tbouvet + $module_utils/ipa.py: + maintainers: $team_ipa + $module_utils/k8s: + maintainers: chouseknecht maxamillion fabianvf flaper87 willthames + labels: clustering + $module_utils/keycloak.py: + maintainers: eikef + $module_utils/manageiq.py: + maintainers: $team_manageiq $module_utils/net_tools/nios/: + support: core labels: - networking - infoblox maintainers: $team_networking sganesh-infoblox + $module_utils/network: + labels: networking $module_utils/network/a10: maintainers: ericchou1 mischapeters - labels: networking $module_utils/network/aci: maintainers: $team_aci - labels: networking - support: community - $module_utils/acme.py: - maintainers: resmo felixfontein - $module_utils/ipa.py: - maintainers: $team_ipa $module_utils/network/aireos: maintainers: jmighion - labels: networking $module_utils/network/aos: maintainers: dgarros jeremyschulman - labels: networking - $module_utils/azure_rm_common.py: - maintainers: $team_azure - labels: - - azure - - cloud $module_utils/network/aruba: maintainers: jmighion - labels: networking $module_utils/network/asa: maintainers: ogenstad gdpak - labels: networking $module_utils/network/avi: maintainers: $team_avi - labels: networking $module_utils/network/bigswitch: maintainers: jayakody tedelhourani vuile - labels: networking $module_utils/network/cloudengine: maintainers: QijunPan - labels: networking - $module_utils/cloudstack.py: - maintainers: $team_cloudstack - labels: cloudstack $module_utils/network/cnos: maintainers: dkasberg amuraleedhar - labels: networking - $module_utils/crypto.py: - maintainers: Spredzy + $module_utils/network/common: + support: network + maintainers: $team_networking $module_utils/network/dellos6: maintainers: skg-net - labels: networking $module_utils/network/dellos9: maintainers: skg-net - labels: networking $module_utils/network/dellos10: maintainers: skg-net - labels: networking $module_utils/network/enos: maintainers: amuraleedhar - labels: networking + $module_utils/network/eos: + support: network + maintainers: $team_networking $module_utils/network/exos: maintainers: rdvencioneck - labels: networking + $module_utils/network/f5: + maintainers: caphrim007 $module_utils/f5_utils.py: maintainers: caphrim007 labels: - - f5 - - networking + - f5 $module_utils/network/fortios: maintainers: bjolivot - labels: networking + $module_utils/network/ios: + support: network + maintainers: $team_networking + $module_utils/network/iosxr: + support: network + maintainers: $team_networking $module_utils/network/ironware: maintainers: paulquack - labels: networking - $module_utils/k8s: - maintainers: chouseknecht maxamillion fabianvf flaper87 willthames - labels: clustering - $module_utils/keycloak.py: - maintainers: eikef - $module_utils/manageiq.py: - maintainers: $team_manageiq + $module_utils/network/junos: + support: network $module_utils/network/meraki: maintainers: $team_meraki - labels: networking - support: community $module_utils/network/netconf: + support: network maintainers: $team_networking - labels: networking $module_utils/network/netscaler: maintainers: $team_netscaler - labels: networking $module_utils/network/nos: maintainers: $team_extreme - labels: networking $module_utils/network/nso: maintainers: $team_nso - labels: networking + $module_utils/network/nxos: + support: network + maintainers: $team_nxos $module_utils/network/onyx: maintainers: $team_onyx - labels: networking + $module_utils/network/ordnance: + maintainers: alexanderturner djh00t $module_utils/network/routeros: maintainers: heuels - labels: networking $module_utils/network/slxos: maintainers: $team_extreme - labels: networking + $module_utils/network/voss: + maintainers: $team_extreme + $module_utils/network/vyos: + support: network + maintainers: $team_networking $module_utils/openstack.py: maintainers: $team_openstack labels: - - cloud - $module_utils/network/ordnance: - maintainers: alexanderturner djh00t - labels: networking + - cloud $module_utils/ovirt.py: maintainers: joshainglis karmab machacekondra labels: - - cloud + - cloud $module_utils/powershell: + support: core maintainers: $team_windows_core labels: - - windows + - windows $module_utils/redfish_utils.py: - maintainers: $team_redfish + maintainers: jose-delarosa $module_utils/remote_management/ucs: maintainers: $team_ucs labels: ucs - $module_utils/netapp: $team_netapp + $module_utils/netapp: + maintainers: $team_netapp $module_utils/vultr.py: &vultr maintainers: $team_vultr labels: - - cloud + - cloud $module_utils/vmware: + support: core maintainers: $team_vmware - support: community - $module_utils/network/voss: - maintainers: $team_extreme - labels: networking - $module_utils/network: - maintainers: $team_networking - labels: networking - $module_utils/onepassword.py: - maintainers: samdoran $module_utils/memset.py: maintainers: analbeard labels: cloud - $module_utils/jboss/: - maintainers: $team_jboss $module_utils/scaleway.py: &scaleway maintainers: $team_scaleway labels: - cloud - support: community lib/ansible/playbook/handler.py: keywords: - - handlers + - handlers lib/ansible/playbook/role: keywords: - - roles path - - roles_path - - role - - role path + - roles path + - roles_path + - role + - role path lib/ansible/playbook/role/include.py: keywords: - - include role - - include_role - - role include + - include role + - include_role + - role include lib/ansible/playbook/role/requirement.py: keywords: - - role dependencies - - role dep - - role dependency + - role dependencies + - role dep + - role dependency +############################### +# plugins + + lib/ansible/plugins: + support: community + lib/ansible/plugins/action/add_host.py: + support: core + lib/ansible/plugins/action/assemble.py: + support: core + lib/ansible/plugins/action/assert.py: + support: core + lib/ansible/plugins/action/aws_s3.py: + support: core + lib/ansible/plugins/action/command.py: + support: core + lib/ansible/plugins/action/cli: + support: network + lib/ansible/plugins/action/copy.py: + support: core + lib/ansible/plugins/action/debug.py: + support: core + lib/ansible/plugins/action/fail.py: + support: core + lib/ansible/plugins/action/fetch.py: + support: core + lib/ansible/plugins/action/group_by.py: + support: core + lib/ansible/plugins/action/include_vars.py: + support: core + lib/ansible/plugins/action/__init__.py: + support: core + lib/ansible/plugins/action/normal.py: + support: core + lib/ansible/plugins/action/package.py: + support: core + lib/ansible/plugins/action/patch.py: + support: core + lib/ansible/plugins/action/pause.py: + support: core + lib/ansible/plugins/action/raw.py: + support: core + lib/ansible/plugins/action/reboot.py: + support: core + lib/ansible/plugins/action/script.py: + support: core + lib/ansible/plugins/action/service.py: + support: core + lib/ansible/plugins/action/set_fact.py: + support: core + lib/ansible/plugins/action/shell.py: + support: core + lib/ansible/plugins/action/synchronize.py: + support: core + lib/ansible/plugins/action/telnet.py: + support: core + lib/ansible/plugins/action/template.py: + support: core + lib/ansible/plugins/action/uri.py: + support: core + lib/ansible/plugins/action/wait_for_connection.py: + support: core + lib/ansible/plugins/action/win: + support: core + labels: windows + lib/ansible/plugins/action/yum.py: + support: core lib/ansible/plugins/action/asa: maintainers: ogenstad gdpak labels: networking @@ -622,25 +686,34 @@ files: maintainers: skg-net labels: networking lib/ansible/plugins/action/eos: + support: network maintainers: $team_networking labels: networking lib/ansible/plugins/action/ios: + support: network + maintainers: $team_networking + labels: networking + lib/ansible/plugins/action/iosxr: + support: network maintainers: $team_networking labels: networking lib/ansible/plugins/action/ironware: maintainers: paulquack labels: networking lib/ansible/plugins/action/junos: + support: network maintainers: $team_networking labels: networking lib/ansible/plugins/action/net: + support: network maintainers: $team_networking labels: networking lib/ansible/plugins/action/nxos: + support: network maintainers: $team_networking labels: - - networking - - nxos + - networking + - nxos lib/ansible/plugins/action/onyx_config.py: maintainers: $team_onyx labels: networking @@ -648,181 +721,267 @@ files: maintainers: $team_networking labels: networking lib/ansible/plugins/action/vyos: + support: network maintainers: $team_networking labels: networking - lib/ansible/plugins/callback/unixy.py: - support: community - maintainers: akatch +############################### +# plugins/cache + lib/ansible/plugins/cache/__init__.py: + support: core + lib/ansible/plugins/cache/base.py: + support: core +############################### +# plugins/callbacks + lib/ansible/plugins/callback/__init__.py: + support: core + lib/ansible/plugins/callback/debug: + support: core + lib/ansible/plugins/callback/default: + support: core lib/ansible/plugins/callback/grafana_annotations.py: - support: community maintainers: rrey + lib/ansible/plugins/callback/junit: + support: core + lib/ansible/plugins/callback/minimal: + support: core + lib/ansible/plugins/callback/oneline: + support: core + lib/ansible/plugins/callback/profile: + support: core lib/ansible/plugins/callback/sumologic.py: - support: community maintainers: ryancurrah + lib/ansible/plugins/callback/tree: + support: core + lib/ansible/plugins/callback/unixy.py: + maintainers: akatch +############################### +# plugins/cliconf + + lib/ansible/plugins/cliconf/: - maintainers: $team_networking labels: networking + lib/ansible/plugins/cliconf/eos.py: + support: network + maintainers: $team_networking lib/ansible/plugins/cliconf/exos.py: maintainers: rdvencioneck - labels: networking + lib/ansible/plugins/cliconf/ios.py: + support: network + maintainers: $team_networking + lib/ansible/plugins/cliconf/iosxr.py: + support: network + maintainers: $team_networking lib/ansible/plugins/cliconf/ironware.py: maintainers: paulquack - labels: networking + lib/ansible/plugins/cliconf/junos.py: + support: network + maintainers: $team_networking lib/ansible/plugins/cliconf/nos.py: maintainers: $team_extreme - labels: networking lib/ansible/plugins/cliconf/nxos.py: + support: network maintainers: $team_nxos - labels: - - networking + labels: nxos lib/ansible/plugins/cliconf/onyx.py: maintainers: $team_onyx - labels: networking lib/ansible/plugins/cliconf/routeros.py: maintainers: heuels - labels: networking lib/ansible/plugins/cliconf/slxos.py: maintainers: $team_extreme + lib/ansible/plugins/cliconf/voss.py: + maintainers: $team_extreme + labels: networking + lib/ansible/plugins/cliconf/vyos.py: + support: network + maintainers: $team_networking +############################### +# plugins/connection + lib/ansible/plugins/connection/: + support: core + lib/ansible/plugins/connection/docker.py: + support: community + maintainers: $team_ansible dariko felixfontein jwitko kassiansun tbouvet + lib/ansible/plugins/connection/httpapi.py: + support: network + maintainers: $team_networking labels: networking lib/ansible/plugins/connection/lxd.py: maintainers: mattclay lib/ansible/plugins/connection/netconf.py: + support: network maintainers: $team_networking labels: networking + lib/ansible/plugins/connection/oc.py: + support: community + maintainers: chouseknecht maxamillion fabianvf flaper87 willthames lib/ansible/plugins/connection/network_cli.py: + support: network maintainers: $team_networking labels: networking lib/ansible/plugins/connection/persistent.py: maintainers: $team_networking labels: networking + lib/ansible/plugins/connection/winrm.py: + maintainers: $team_windows_core + labels: + - windows +############################### +# plugins/filter + lib/ansible/plugins/filter/: + support: core + lib/ansible/plugins/filter/network.py: + support: network + maintainers: $team_networking + labels: networking +############################### +# plugins/httpapi + lib/ansible/plugins/httpapi: + support: network + maintainers: $team_networking + labels: networking lib/ansible/plugins/httpapi/ftd.py: + support: community maintainers: annikulin $team_networking - labels: networking +############################### +# plugins/inventory + lib/ansible/plugins/inventory/__init__.py: + support: core + lib/ansible/plugins/inventory/ini.py: + support: core lib/ansible/plugins/inventory/openstack.py: maintainers: $team_openstack keywords: - - openstack - - inventory - labels: - - cloud - lib/ansible/plugins/cliconf/voss.py: - maintainers: $team_extreme - labels: networking - lib/ansible/plugins/connection/winrm.py: - maintainers: $team_windows_core + - openstack + - inventory labels: - - windows - lib/ansible/plugins/inventory/ovirt4.py: - maintainers: machacekondra - labels: - - ovirt - cloud lib/ansible/plugins/inventory/vultr.py: *vultr lib/ansible/plugins/inventory/scaleway.py: *scaleway - lib/ansible/plugins/filter/network.py: - maintainers: $team_networking - labels: networking - lib/ansible/plugins/lookup/nios.py: - maintainers: $team_networking sganesh-infoblox - labels: - - networking - - infoblox - lib/ansible/plugins/lookup/nios_next_ip.py: - maintainers: $team_networking - labels: networking - lib/ansible/plugins/lookup/dig: - maintainers: jpmens - labels: community + lib/ansible/plugins/inventory/yaml.py: + support: core +############################### +# plugins/loader + lib/ansible/plugins/loader: + support: core + +############################### +# plugins/lookup + lib/ansible/plugins/lookup/__init__.py: + support: core lib/ansible/plugins/lookup/conjur_variable.py: maintainers: $team_cyberark_conjur notified: cyberark-bizdev + lib/ansible/plugins/lookup/dig: + maintainers: jpmens + labels: community lib/ansible/plugins/lookup/cyberarkpassword.py: notified: cyberark-bizdev + lib/ansible/plugins/lookup/nios: + support: core + maintainers: $team_networking sganesh-infoblox + labels: + - networking + - infoblox + lib/ansible/plugins/lookup/onepassword: + maintainers: samdoran + ignored: azenk +############################### +# plugins/netconf lib/ansible/plugins/netconf/: + support: network maintainers: $team_networking labels: networking - lib/ansible/plugins/lookup/onepassword.py: - maintainers: samdoran - ignored: azenk - lib/ansible/plugins/lookup/onepassword_raw.py: - maintainers: samdoran - ignored: azenk lib/ansible/plugins/netconf/sros.py: maintainers: wisotzky $team_networking labels: networking +############################### +# plugins/shell + lib/ansible/plugins/shell/: + support: core lib/ansible/plugins/shell/powershell.py: + support: core maintainers: $team_windows_core labels: - - windows - lib/ansible/plugins/terminal/aireos.py: - maintainers: jmighion - labels: networking - lib/ansible/plugins/terminal/aruba.py: - maintainers: jmighion - labels: networking + - windows +############################### +# plugins/strategy + lib/ansible/plugins/strategy/: + support: core +############################### +# plugins/terminal + lib/ansible/plugins/terminal/: + labels: networking + lib/ansible/plugins/terminal/__init__.py: + support: network lib/ansible/plugins/terminal/asa.py: maintainers: ogenstad gdpak - labels: networking lib/ansible/plugins/terminal/dellos10: maintainers: skg-net - labels: networking lib/ansible/plugins/terminal/edgeos.py: maintainers: samdoran - labels: networking lib/ansible/plugins/terminal/eos.py: + support: network maintainers: $team_networking - labels: networking lib/ansible/plugins/terminal/exos.py: maintainers: rdvencioneck - labels: networking lib/ansible/plugins/terminal/ios.py: + support: network maintainers: $team_networking - labels: networking lib/ansible/plugins/terminal/iosxr.py: + support: network maintainers: $team_networking - labels: networking lib/ansible/plugins/terminal/ironware.py: maintainers: paulquack - labels: networking lib/ansible/plugins/terminal/junos.py: + support: network maintainers: $team_networking - labels: networking lib/ansible/plugins/terminal/nos.py: maintainers: $team_extreme - labels: networking lib/ansible/plugins/terminal/nxos.py: + support: network maintainers: $team_networking - labels: - - networking lib/ansible/plugins/terminal/onyx.py: maintainers: $team_onyx - labels: networking lib/ansible/plugins/terminal/routeros.py: maintainers: heuels - labels: networking lib/ansible/plugins/terminal/slxos.py: maintainers: $team_extreme - labels: networking lib/ansible/plugins/terminal/sros.py: maintainers: $team_networking - labels: networking lib/ansible/plugins/terminal/voss.py: maintainers: $team_extreme - labels: networking lib/ansible/plugins/terminal/vyos.py: + support: network maintainers: $team_networking samdoran - labels: networking +############################### +# plugins/test + lib/ansible/plugins/test: + support: core +############################### +# plugins/test + lib/ansible/plugins/vars: + support: core +############################### +############################### +############################### lib/ansible/release.py: notified: mattclay nitzmahone +############################### +# plugins/terminal lib/ansible/template: keywords: - - jinja - - jinja2 + - jinja + - jinja2 lib/ansible/utils/module_docs_fragments/acme.py: + support: community maintainers: resmo felixfontein test/sanity/validate-modules: + notified: + - gundalow + - mattclay + - sivel keywords: - - validate-modules + - validate-modules docs/: maintainers: - acozine @@ -834,35 +993,28 @@ files: docs/docsite/rst/scenario_guides/guide_aci.rst: maintainers: $team_aci labels: - - aci - - networking - packaging/: - test/: - # 'test' is a component path, then 'test' label will be automatically added + - aci + - networking +############################### +# 'test' is a component path, then 'test' label will be automatically added test/runner/: notified: mattclay test/sanity/: notified: mattclay test/utils/shippable/: notified: mattclay - test/integration/group_vars/: - notified: mattclay - test/integration/host_vars/: - notified: mattclay - test/integration/roles/: - notified: mattclay test/integration/targets/aci: maintainers: $team_aci labels: - - networking + - networking test/integration/targets/meraki: maintainers: $team_meraki labels: - - networking + - networking test/integration/targets/nxos: maintainers: $team_nxos labels: - - networking + - networking test/integration/targets/setup_acme: maintainers: resmo felixfontein test/integration/targets/setup_zabbix: @@ -870,21 +1022,22 @@ files: test/integration/targets/ucs: maintainers: $team_ucs labels: - - remote_management + - remote_management + test/legacy/: + notified: mattclay test/units/modules/network: maintainers: $team_networking labels: networking test/units/modules/network/nxos: maintainers: $team_nxos labels: - - networking + - networking test/sanity/pep8/legacy-files.txt: + notified: mattclay hacking/report.py: notified: mattclay shippable.yml: notified: mattclay - .yamllint: - notified: mattclay tox.ini: notified: mattclay macros: @@ -897,7 +1050,6 @@ macros: team_cloudstack: resmo dpassante team_cumulus: isharacomix jrrivers team_cyberark_conjur: jvanderhoof ryanprior - team_dell: skg-net manjuv1 dhivyap abirami-n team_extreme: bigmstone LindsayHill team_ipa: Nosmoht Akasurde fxfitz team_jboss: jairojunior wbrefvem Wolfant @@ -913,7 +1065,6 @@ macros: team_openstack: emonty omgjlk juliakreger rcarrillocruz shrews thingee dagnello team_openswitch: Qalthos gdpak team_rabbitmq: chrishoffman manuel-sousa hyperized - team_redfish: jose-delarosa mraineri tomasg2012 billdodd team_rhn: alikins barnabycourt flossware vritant team_scaleway: sieben hekonsek Spredzy team_tower: ghjm jlaska matburt wwitzel3 simfarm ryanpetrello rooftopcellist AlanCoding diff --git a/docs/docsite/rst/dev_guide/testing/sanity/botmeta.rst b/docs/docsite/rst/dev_guide/testing/sanity/botmeta.rst new file mode 100644 index 00000000000..d899603dc21 --- /dev/null +++ b/docs/docsite/rst/dev_guide/testing/sanity/botmeta.rst @@ -0,0 +1,4 @@ +Sanity Tests ยป botmeta +====================== + +Verifies that ``./github/BOTMETA.yml`` is valid. diff --git a/test/sanity/code-smell/botmeta.json b/test/sanity/code-smell/botmeta.json new file mode 100644 index 00000000000..39ac4bd57f0 --- /dev/null +++ b/test/sanity/code-smell/botmeta.json @@ -0,0 +1,4 @@ +{ + "always": true, + "output": "path-message" +} diff --git a/test/sanity/code-smell/botmeta.py b/test/sanity/code-smell/botmeta.py new file mode 100755 index 00000000000..ded347bbc13 --- /dev/null +++ b/test/sanity/code-smell/botmeta.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python +"""Make sure the data in BOTMETA.yml is valid""" + +import os.path +import glob +import sys +import yaml + +from voluptuous import Any, MultipleInvalid, Required, Schema +from voluptuous.humanize import humanize_error + +from ansible.module_utils.six import string_types +list_string_types = list(string_types) + + +def main(): + """Validate BOTMETA""" + path = '.github/BOTMETA.yml' + with open(path, 'r') as f_path: + botmeta = yaml.safe_load(f_path) + f_path.close() + + files_schema = Any( + Schema(*string_types), + Schema({ + 'ignored': Any(list_string_types, *string_types), + 'keywords': Any(list_string_types, *string_types), + 'labels': Any(list_string_types, *string_types), + 'maintainers': Any(list_string_types, *string_types), + 'notified': Any(list_string_types, *string_types), + 'support': Any("core", "network", "community"), + }) + ) + + list_dict_file_schema = [{str_type: files_schema} + for str_type in string_types] + + schema = Schema({ + Required('automerge'): bool, + Required('files'): Any(None, *list_dict_file_schema), + Required('macros'): dict, # Any(*list_macros_schema), + }) + + # Ensure schema is valid + + try: + schema(botmeta) + except MultipleInvalid as ex: + for error in ex.errors: + # No way to get line numbers + print('%s: %s' % (path, humanize_error(botmeta, error))) + + # We have two macros to define locations, ensure they haven't been removed + if botmeta['macros']['module_utils'] != 'lib/ansible/module_utils': + print('%s: [macros][module_utils] has been removed' % path) + + if botmeta['macros']['modules'] != 'lib/ansible/modules': + print('%s: [macros][modules] has been removed' % path) + + # See if all `files:` are valid + for file in botmeta['files']: + file = file.replace('$module_utils', botmeta['macros']['module_utils']) + file = file.replace('$modules', botmeta['macros']['modules']) + if not os.path.exists(file): + # Not a file or directory, though maybe the prefix to one? + # https://github.com/ansible/ansibullbot/pull/1023 + if not glob.glob('%s*' % file): + print("%s: Can't find '%s.*' in this branch" % (path, file)) + + +if __name__ == '__main__': + main() + +# Possible future work +# * Schema for `macros:` - currently ignored due to team_ansible +# * Ensure that all $teams mention in `files:` exist in `$macros` +# * Validate GitHub names - possibly expensive lookup needed