#!/usr/bin/env python3 """ Apply elasticsearch mappings to given hosts. """ import argparse import json import requests from pathlib import Path from requests.adapters import HTTPAdapter from requests.packages.urllib3.util.retry import Retry HERE = Path(__file__).parent def apply_mappings_to_host(host: str): def _send_mapping(f): with f.open() as json_data: data = json.load(json_data) es_server = host url = f"{es_server}/_template/{f.stem}" session = requests.Session() adapter = HTTPAdapter(max_retries=Retry(5, backoff_factor=0.5)) session.mount('http://', adapter) session.delete(url) r = session.post( url, headers={"Content-Type": "application/json"}, data=json.dumps(data), ) return {"mapping": f.stem, "result": r.text} p = HERE / "mappings" return [ _send_mapping(f) for f in p.iterdir() if f.is_file() and f.suffix == ".json" ] def parse_args(): parser = argparse.ArgumentParser( description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter ) parser.add_argument("hosts", nargs="+") return parser.parse_args() def main(): for host in parse_args().hosts: print(">>>>> Applying mapping to " + host) res = apply_mappings_to_host(host) print(res) if __name__ == "__main__": main()