forked from saltstack/salt
/
lvs_service.py
136 lines (117 loc) · 4.64 KB
/
lvs_service.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# -*- coding: utf-8 -*-
'''
Management of LVS (Linux Virtual Server) Service
================================================
'''
# Import Python libs
from __future__ import absolute_import, print_function, unicode_literals
def __virtual__():
'''
Only load if the lvs module is available in __salt__
'''
return 'lvs_service' if 'lvs.get_rules' in __salt__ else False
def present(name,
protocol=None,
service_address=None,
scheduler='wlc',
):
'''
Ensure that the named service is present.
name
The LVS service name
protocol
The service protocol
service_address
The LVS service address
scheduler
Algorithm for allocating TCP connections and UDP datagrams to real servers.
.. code-block:: yaml
lvstest:
lvs_service.present:
- service_address: 1.1.1.1:80
- protocol: tcp
- scheduler: rr
'''
ret = {'name': name,
'changes': {},
'result': True,
'comment': ''}
#check service
service_check = __salt__['lvs.check_service'](protocol=protocol,
service_address=service_address)
if service_check is True:
service_rule_check = __salt__['lvs.check_service'](protocol=protocol,
service_address=service_address,
scheduler=scheduler)
if service_rule_check is True:
ret['comment'] = 'LVS Service {0} is present'.format(name)
return ret
else:
if __opts__['test']:
ret['result'] = None
ret['comment'] = 'LVS Service {0} is present but some options should update'.format(name)
return ret
else:
service_edit = __salt__['lvs.edit_service'](protocol=protocol,
service_address=service_address,
scheduler=scheduler)
if service_edit is True:
ret['comment'] = 'LVS Service {0} has been updated'.format(name)
ret['changes'][name] = 'Update'
return ret
else:
ret['result'] = False
ret['comment'] = 'LVS Service {0} update failed'.format(name)
return ret
else:
if __opts__['test']:
ret['comment'] = 'LVS Service {0} is not present and needs to be created'.format(name)
ret['result'] = None
return ret
else:
service_add = __salt__['lvs.add_service'](protocol=protocol,
service_address=service_address,
scheduler=scheduler)
if service_add is True:
ret['comment'] = 'LVS Service {0} has been created'.format(name)
ret['changes'][name] = 'Present'
return ret
else:
ret['comment'] = 'LVS Service {0} create failed({1})'.format(name, service_add)
ret['result'] = False
return ret
def absent(name, protocol=None, service_address=None):
'''
Ensure the LVS service is absent.
name
The name of the LVS service
protocol
The service protocol
service_address
The LVS service address
'''
ret = {'name': name,
'changes': {},
'result': True,
'comment': ''}
#check if service exists and remove it
service_check = __salt__['lvs.check_service'](protocol=protocol,
service_address=service_address)
if service_check is True:
if __opts__['test']:
ret['result'] = None
ret['comment'] = 'LVS Service {0} is present and needs to be removed'.format(name)
return ret
service_delete = __salt__['lvs.delete_service'](protocol=protocol,
service_address=service_address)
if service_delete is True:
ret['comment'] = 'LVS Service {0} has been removed'.format(name)
ret['changes'][name] = 'Absent'
return ret
else:
ret['comment'] = 'LVS Service {0} removed failed({1})'.format(name, service_delete)
ret['result'] = False
return ret
else:
ret['comment'] = 'LVS Service {0} is not present, so it cannot be removed'.format(name)
return ret