62 lines
1.5 KiB
Python
Executable File
62 lines
1.5 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
from __future__ import absolute_import, division, print_function
|
|
__metaclass__ = type
|
|
|
|
import argparse
|
|
import json
|
|
import os
|
|
import sys
|
|
|
|
import yaml
|
|
|
|
from ansible.module_utils.urls import open_url
|
|
|
|
|
|
def _get_arg_parser():
|
|
parser = argparse.ArgumentParser(description="Validate role metadata")
|
|
parser.add_argument("role", nargs="+", help="role path")
|
|
return parser
|
|
|
|
|
|
def _validate_role_platforms(platforms):
|
|
url = "https://galaxy.ansible.com/api/v1/platforms/?name={0}&release={1}"
|
|
|
|
msgs = []
|
|
for platform in platforms:
|
|
for release in platform["versions"]:
|
|
resp = open_url(url.format(platform["name"], release))
|
|
if len(json.loads(resp.read())["results"]) != 1:
|
|
msgs.append(("ERROR", "Invalid platform '{0} {1}'".format(
|
|
platform["name"], release,
|
|
)))
|
|
|
|
return msgs
|
|
|
|
|
|
def _validate_role(role_path):
|
|
meta_file = os.path.join(role_path, "meta", "main.yml")
|
|
with open(meta_file) as fd:
|
|
galaxy_info = yaml.safe_load(fd)["galaxy_info"]
|
|
|
|
msgs = []
|
|
msgs.extend(_validate_role_platforms(galaxy_info["platforms"]))
|
|
|
|
return msgs
|
|
|
|
|
|
def main():
|
|
args = _get_arg_parser().parse_args()
|
|
no_msgs = 0
|
|
for role in args.role:
|
|
msgs = _validate_role(role)
|
|
for msg in msgs:
|
|
no_msgs += 1
|
|
print("{0}: {1}".format(*msg))
|
|
|
|
return 0 if no_msgs == 0 else 1
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|