| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #!/usr/bin/env python
- # Created by Wazuh, Inc. <info@wazuh.com>.
- # This program is a free software; you can redistribute it and/or modify it under the terms of GPLv2
- import json
- import sys
- import argparse
- from datetime import date, datetime, timedelta
- import time
- from os.path import dirname, abspath
- import re
- try:
- from elasticsearch import Elasticsearch
- except Exception as e:
- print("No module 'elasticsearch' found.")
- sys.exit()
- def read_elatic_config(auth_path):
- return json.load(open(auth_path))
- def read_snapshots_conf(conf_path):
- return json.load(open(conf_path))
- def log(msg):
- now_date = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
- final_msg = "{0} wazuh-snapshot: {1}".format(now_date, msg)
- print(final_msg)
- if output_file:
- foutput.write(final_msg + "\n")
- def create_repo(repo_config):
- try:
- if repo_config['repository_type'] == "local":
- body_data = { "type": "fs", "settings": { "location": repo_config['repository'] } }
- elif repo_config['repository_type'] == "s3":
- body_data = { "type": repo_config['repository_type'], "settings": { "bucket": repo_config['bucket'], "region": repo_config['region'], "base_path": repo_config['base_path'] } }
- es.snapshot.create_repository(repository=repo_config['repository'],body=body_data)
- except Exception as e:
- log("Error: {0}: {1}".format(repo_config['repository'], str(e)))
- sys.exit()
- if __name__ == "__main__":
- # Args
- parser = argparse.ArgumentParser(description='Create snapshots repository Elastic')
- parser.add_argument('-o', '--output_file', metavar='output_file', type=str, required = False, help='Output filename.')
- args = parser.parse_args()
- # Vars
- current_path = dirname(abspath(__file__))
- SLEEP_TIME = 10
- LOG_ITERATIONS = 5
- output_file = None
- if args.output_file:
- output_file = args.output_file
- foutput = open(output_file, 'a')
- # Config
- config = read_snapshots_conf('{0}/snapshots_conf.json'.format(current_path))
- es_conf = read_elatic_config(config['es_config_path'])
- repo_type = config['repository_type']
- if es_conf['settings']['elasticsearch']['auth'] == 'True':
- http_auth_value=(es_conf['credentials']['elasticsearch']['user'], es_conf['credentials']['elasticsearch']['pass'])
- else:
- http_auth_value=False
- # Elastic connectivity
- es = Elasticsearch(
- [es_conf['settings']['elasticsearch']['hostname']],
- http_auth=http_auth_value,
- port=es_conf['settings']['elasticsearch']['port'],
- ca_certs=es_conf['settings']['elasticsearch']['ca_cert'],
- use_ssl=es_conf['settings']['elasticsearch']['use_ssl'],
- )
- try:
- create_repo(config)
- except Exception as e:
- print(" Elasticsearch error: {0}".format(str(e)))
- sys.exit(1)
- if output_file:
- foutput.close()
|