smart_proxy_salt 3.1.0 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/smart_proxy_salt/version.rb +1 -1
- data/salt/report_upload/README.md +31 -0
- data/salt/report_upload/master.snippet +3 -0
- data/salt/report_upload/srv/salt/_runners/foreman_report_upload.py +92 -0
- data/salt/report_upload/srv/salt/foreman_report_upload.sls +6 -0
- metadata +6 -58
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e76b784ec95950584ee9dc9601fd4b16502d24e948570f5c2e5cca2fc37cf48
|
4
|
+
data.tar.gz: be2a3a41b1bda928582f8f3f97b47e2fe544272efdba65ae11ca06d937b44551
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ae10fb0bc8ca6451ef5c519fa9a229d34cb72e4fa06a4c1446e286bfb3f7abebb3019e0d8ad0911efee1304104d369da7214698716f285bfc011acc6c5b2adc
|
7
|
+
data.tar.gz: b1414a95f7fa718cf1b8720b5e592ab23177ff60c7180df87e9d928b6629925343276bb057e26ac56da4e77bf34826f7079f7daebb3bd6af910243d7abd0a80c
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# Foreman Salt Report Upload
|
2
|
+
|
3
|
+
Currently, there are two possibilites to upload the salt report to Foreman:
|
4
|
+
1. Use /usr/sbin/upload-salt-reports which is called by a cron job every 10 minutes by default
|
5
|
+
2. Upload the report immediately by using a Salt Reactor.
|
6
|
+
|
7
|
+
This README, handles the second option and how to configure it
|
8
|
+
|
9
|
+
## Setup
|
10
|
+
Add the content of 'master.snippet' to '/etc/salt/master' which configures a reactor.
|
11
|
+
In case there is already a reactor configured, you need to adapt it using the options mentioned in 'master.snippet'.
|
12
|
+
|
13
|
+
In case '/srv/salt' is configured as 'file_roots' in your '/etc/salt/master' config, setup the necessary salt state file and Salt runner functions:
|
14
|
+
|
15
|
+
```
|
16
|
+
/srv/salt/foreman_report_upload.sls
|
17
|
+
/srv/salt/_runners/foreman_report_upload.py
|
18
|
+
```
|
19
|
+
|
20
|
+
After changing the salt master run:
|
21
|
+
|
22
|
+
```
|
23
|
+
systemctl restart salt-master
|
24
|
+
```
|
25
|
+
|
26
|
+
After adding the foreman_report_upload.sls and foreman_report_upload.py, run the following:
|
27
|
+
|
28
|
+
```
|
29
|
+
salt-run saltutil.sync_all
|
30
|
+
```
|
31
|
+
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
'''
|
3
|
+
Uploads reports from the Salt job cache to Foreman
|
4
|
+
'''
|
5
|
+
from __future__ import absolute_import, print_function, unicode_literals
|
6
|
+
|
7
|
+
FOREMAN_CONFIG = '/etc/salt/foreman.yaml'
|
8
|
+
|
9
|
+
try:
|
10
|
+
from http.client import HTTPConnection, HTTPSConnection
|
11
|
+
except ImportError:
|
12
|
+
from httplib import HTTPSConnection, HTTPSConnection
|
13
|
+
|
14
|
+
import ssl
|
15
|
+
import json
|
16
|
+
import yaml
|
17
|
+
import os
|
18
|
+
import sys
|
19
|
+
import base64
|
20
|
+
|
21
|
+
# Import python libs
|
22
|
+
import logging
|
23
|
+
|
24
|
+
log = logging.getLogger(__name__)
|
25
|
+
|
26
|
+
|
27
|
+
def salt_config():
|
28
|
+
with open(FOREMAN_CONFIG, 'r') as f:
|
29
|
+
config = yaml.load(f.read())
|
30
|
+
return config
|
31
|
+
|
32
|
+
|
33
|
+
def upload(report):
|
34
|
+
config = salt_config()
|
35
|
+
headers = {'Accept': 'application/json',
|
36
|
+
'Content-Type': 'application/json'}
|
37
|
+
|
38
|
+
if config[':proto'] == 'https':
|
39
|
+
ctx = ssl.create_default_context()
|
40
|
+
ctx.load_cert_chain(certfile=config[':ssl_cert'], keyfile=config[':ssl_key'])
|
41
|
+
if config[':ssl_ca']:
|
42
|
+
ctx.load_verify_locations(cafile=config[':ssl_ca'])
|
43
|
+
connection = HTTPSConnection(config[':host'],
|
44
|
+
port=config[':port'], context=ctx)
|
45
|
+
else:
|
46
|
+
connection = HTTPConnection(config[':host'],
|
47
|
+
port=config[':port'])
|
48
|
+
if ':username' in config and ':password' in config:
|
49
|
+
token = base64.b64encode('{}:{}'.format(config[':username'],
|
50
|
+
config[':password']))
|
51
|
+
headers['Authorization'] = 'Basic {}'.format(token)
|
52
|
+
|
53
|
+
connection.request('POST', '/salt/api/v2/jobs/upload',
|
54
|
+
json.dumps(report), headers)
|
55
|
+
response = connection.getresponse()
|
56
|
+
|
57
|
+
if response.status == 200:
|
58
|
+
info_msg = 'Success {0}: {1}'.format(report['job']['job_id'], response.read())
|
59
|
+
log.info(info_msg)
|
60
|
+
else:
|
61
|
+
log.error("Unable to upload job - aborting report upload")
|
62
|
+
log.error(response.read())
|
63
|
+
|
64
|
+
|
65
|
+
def create_report(json_str):
|
66
|
+
msg = json.loads(json_str)
|
67
|
+
|
68
|
+
return {'job':
|
69
|
+
{
|
70
|
+
'result': {
|
71
|
+
msg['id']: msg['return'],
|
72
|
+
},
|
73
|
+
'function': 'state.highstate',
|
74
|
+
'job_id': msg['jid']
|
75
|
+
}
|
76
|
+
}
|
77
|
+
|
78
|
+
|
79
|
+
def now(highstate):
|
80
|
+
'''
|
81
|
+
Upload a highstate to Foreman
|
82
|
+
highstate :
|
83
|
+
dictionary containing a highstate (generated by a Salt reactor)
|
84
|
+
'''
|
85
|
+
log.debug('Upload highstate to Foreman')
|
86
|
+
|
87
|
+
try:
|
88
|
+
report = create_report(highstate)
|
89
|
+
upload(report)
|
90
|
+
except Exception as exc:
|
91
|
+
log.error('Exception encountered: %s', exc)
|
92
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smart_proxy_salt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Moll
|
@@ -9,64 +9,8 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-
|
12
|
+
date: 2019-11-05 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: json
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
requirements:
|
18
|
-
- - ">="
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: '0'
|
21
|
-
type: :runtime
|
22
|
-
prerelease: false
|
23
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
|
-
requirements:
|
25
|
-
- - ">="
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
version: '0'
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
name: rack
|
30
|
-
requirement: !ruby/object:Gem::Requirement
|
31
|
-
requirements:
|
32
|
-
- - ">="
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: '1.1'
|
35
|
-
type: :runtime
|
36
|
-
prerelease: false
|
37
|
-
version_requirements: !ruby/object:Gem::Requirement
|
38
|
-
requirements:
|
39
|
-
- - ">="
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
version: '1.1'
|
42
|
-
- !ruby/object:Gem::Dependency
|
43
|
-
name: sinatra
|
44
|
-
requirement: !ruby/object:Gem::Requirement
|
45
|
-
requirements:
|
46
|
-
- - ">="
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: '0'
|
49
|
-
type: :runtime
|
50
|
-
prerelease: false
|
51
|
-
version_requirements: !ruby/object:Gem::Requirement
|
52
|
-
requirements:
|
53
|
-
- - ">="
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version: '0'
|
56
|
-
- !ruby/object:Gem::Dependency
|
57
|
-
name: logging
|
58
|
-
requirement: !ruby/object:Gem::Requirement
|
59
|
-
requirements:
|
60
|
-
- - ">="
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: '0'
|
63
|
-
type: :runtime
|
64
|
-
prerelease: false
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
66
|
-
requirements:
|
67
|
-
- - ">="
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '0'
|
70
14
|
- !ruby/object:Gem::Dependency
|
71
15
|
name: test-unit
|
72
16
|
requirement: !ruby/object:Gem::Requirement
|
@@ -178,6 +122,10 @@ files:
|
|
178
122
|
- lib/smart_proxy_salt_core/salt_runner.rb
|
179
123
|
- lib/smart_proxy_salt_core/salt_task_launcher.rb
|
180
124
|
- lib/smart_proxy_salt_core/version.rb
|
125
|
+
- salt/report_upload/README.md
|
126
|
+
- salt/report_upload/master.snippet
|
127
|
+
- salt/report_upload/srv/salt/_runners/foreman_report_upload.py
|
128
|
+
- salt/report_upload/srv/salt/foreman_report_upload.sls
|
181
129
|
- sbin/upload-salt-reports
|
182
130
|
- settings.d/salt.saltfile.example
|
183
131
|
- settings.d/salt.yml.example
|