Support Apex with services in containers
[doctor.git] / doctor_tests / installer / common / set_config.py
1 ##############################################################################
2 # Copyright (c) 2017 ZTE Corporation and others.
3 #
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
9 import os
10 import shutil
11 import yaml
12
13
14 cbase = "/var/lib/config-data/puppet-generated/ceilometer"
15 if not os.path.isdir(cbase):
16     cbase = ""
17
18
19 def set_notifier_topic():
20     ep_file = cbase + '/etc/ceilometer/event_pipeline.yaml'
21     ep_file_bak = cbase + '/etc/ceilometer/event_pipeline.yaml.bak'
22     event_notifier_topic = 'notifier://?topic=alarm.all'
23     config_modified = False
24
25     if not os.path.isfile(ep_file):
26         raise Exception("File doesn't exist: %s." % ep_file)
27
28     with open(ep_file, 'r') as file:
29         config = yaml.safe_load(file)
30
31     sinks = config['sinks']
32     for sink in sinks:
33         if sink['name'] == 'event_sink':
34             publishers = sink['publishers']
35             if event_notifier_topic not in publishers:
36                 print('Add event notifier in ceilometer')
37                 publishers.append(event_notifier_topic)
38                 config_modified = True
39             else:
40                 print('NOTE: event notifier is configured'
41                       'in ceilometer as we needed')
42
43     if config_modified:
44         shutil.copyfile(ep_file, ep_file_bak)
45         with open(ep_file, 'w+') as file:
46             file.write(yaml.safe_dump(config))
47
48
49 def set_event_definitions():
50     ed_file = cbase + '/etc/ceilometer/event_definitions.yaml'
51     ed_file_bak = cbase + '/etc/ceilometer/event_definitions.bak'
52     orig_ed_file_exist = True
53     modify_config = False
54
55     if not os.path.isfile(ed_file):
56         # Deployment did not modify file, so it did not exist
57         src_file = '/etc/ceilometer/event_definitions.yaml'
58         if not os.path.isfile(src_file):
59             config = []
60             orig_ed_file_exist = False
61         else:
62             shutil.copyfile('/etc/ceilometer/event_definitions.yaml', ed_file)
63     if orig_ed_file_exist:
64         with open(ed_file, 'r') as file:
65             config = yaml.safe_load(file)
66
67     et_list = [et['event_type'] for et in config]
68
69     if 'compute.instance.update' in et_list:
70         print('NOTE: compute.instance.update allready configured')
71     else:
72         print('NOTE: add compute.instance.update to event_definitions.yaml')
73         modify_config = True
74         instance_update = {
75             'event_type': 'compute.instance.update',
76             'traits': {
77                 'deleted_at': {'fields': 'payload.deleted_at',
78                                'type': 'datetime'},
79                 'disk_gb': {'fields': 'payload.disk_gb',
80                             'type': 'int'},
81                 'display_name': {'fields': 'payload.display_name'},
82                 'ephemeral_gb': {'fields': 'payload.ephemeral_gb',
83                                  'type': 'int'},
84                 'host': {'fields': 'publisher_id.`split(., 1, 1)`'},
85                 'instance_id': {'fields': 'payload.instance_id'},
86                 'instance_type': {'fields': 'payload.instance_type'},
87                 'instance_type_id': {'fields': 'payload.instance_type_id',
88                                      'type': 'int'},
89                 'launched_at': {'fields': 'payload.launched_at',
90                                 'type': 'datetime'},
91                 'memory_mb': {'fields': 'payload.memory_mb',
92                               'type': 'int'},
93                 'old_state': {'fields': 'payload.old_state'},
94                 'os_architecture': {
95                     'fields':
96                     "payload.image_meta.'org.openstack__1__architecture'"},
97                 'os_distro': {
98                     'fields':
99                     "payload.image_meta.'org.openstack__1__os_distro'"},
100                 'os_version': {
101                     'fields':
102                     "payload.image_meta.'org.openstack__1__os_version'"},
103                 'resource_id': {'fields': 'payload.instance_id'},
104                 'root_gb': {'fields': 'payload.root_gb',
105                             'type': 'int'},
106                 'service': {'fields': 'publisher_id.`split(., 0, -1)`'},
107                 'state': {'fields': 'payload.state'},
108                 'tenant_id': {'fields': 'payload.tenant_id'},
109                 'user_id': {'fields': 'payload.user_id'},
110                 'vcpus': {'fields': 'payload.vcpus', 'type': 'int'}
111                 }
112             }
113         config.append(instance_update)
114
115     if 'maintenance.scheduled' in et_list:
116         print('NOTE: maintenance.scheduled allready configured')
117     else:
118         print('NOTE: add maintenance.scheduled to event_definitions.yaml')
119         modify_config = True
120         mscheduled = {
121             'event_type': 'maintenance.scheduled',
122             'traits': {
123                 'allowed_actions': {'fields': 'payload.allowed_actions'},
124                 'instance_ids': {'fields': 'payload.instance_ids'},
125                 'reply_url': {'fields': 'payload.reply_url'},
126                 'actions_at': {'fields': 'payload.actions_at',
127                                'type': 'datetime'},
128                 'state': {'fields': 'payload.state'},
129                 'session_id': {'fields': 'payload.session_id'},
130                 'project_id': {'fields': 'payload.project_id'},
131                 'metadata': {'fields': 'payload.metadata'}
132                 }
133             }
134         config.append(mscheduled)
135
136     if 'maintenance.host' in et_list:
137         print('NOTE: maintenance.host allready configured')
138     else:
139         print('NOTE: add maintenance.host to event_definitions.yaml')
140         modify_config = True
141         mhost = {
142             'event_type': 'maintenance.host',
143             'traits': {
144                 'host': {'fields': 'payload.host'},
145                 'project_id': {'fields': 'payload.project_id'},
146                 'state': {'fields': 'payload.state'},
147                 'session_id': {'fields': 'payload.session_id'}
148                 }
149             }
150         config.append(mhost)
151
152     if modify_config:
153         if orig_ed_file_exist:
154             shutil.copyfile(ed_file, ed_file_bak)
155         else:
156             with open(ed_file_bak, 'w+') as file:
157                 file.close()
158         with open(ed_file, 'w+') as file:
159             file.write(yaml.safe_dump(config))
160
161 set_notifier_topic()
162 set_event_definitions()