Files
offline_kubespray/collection/sensu/sensu_go/tests/sanity/validate-role-metadata.py
ByeonJungHun 360c6eef4a offline 작업
2024-02-19 16:02:29 +09:00

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())