/usr/lib/python2.7/dist-packages/os_faults/drivers/services/pcs.py is in python-os-faults 0.1.17-0ubuntu1.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 | # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.
import logging
from os_faults.drivers.services import process
LOG = logging.getLogger(__name__)
class PcsService(process.ServiceAsProcess):
"""Service as a resource in Pacemaker
Service that can be controlled by `pcs resource` CLI tool.
**Example configuration:**
.. code-block:: yaml
services:
app:
driver: pcs_service
args:
pcs_service: app
grep: my_app
port: ['tcp', 4242]
parameters:
- **pcs_service** - name of a service
- **grep** - regexp for grep to find process PID
- **port** - tuple with two values - protocol, port number (optional)
"""
NAME = 'pcs_service'
DESCRIPTION = 'Service in pacemaker'
CONFIG_SCHEMA = {
'type': 'object',
'properties': {
'pcs_service': {'type': 'string'},
'grep': {'type': 'string'},
'port': process.PORT_SCHEMA,
},
'required': ['grep', 'pcs_service'],
'additionalProperties': False,
}
def __init__(self, *args, **kwargs):
super(PcsService, self).__init__(*args, **kwargs)
self.pcs_service = self.config['pcs_service']
self.restart_cmd = 'pcs resource restart {} $(hostname)'.format(
self.pcs_service)
self.terminate_cmd = 'pcs resource ban {} $(hostname)'.format(
self.pcs_service)
self.start_cmd = 'pcs resource clear {} $(hostname)'.format(
self.pcs_service)
class PcsOrLinuxService(process.ServiceAsProcess):
"""Service as a resource in Pacemaker or Linux service
Service that can be controlled by `pcs resource` CLI tool or
linux `service` tool. This is a hybrid driver that tries to find
service in Pacemaker and uses linux `service` if it is not found
there.
**Example configuration:**
.. code-block:: yaml
services:
app:
driver: pcs_or_linux_service
args:
pcs_service: p_app
linux_service: app
grep: my_app
port: ['tcp', 4242]
parameters:
- **pcs_service** - name of a service in Pacemaker
- **linux_service** - name of a service in init.d
- **grep** - regexp for grep to find process PID
- **port** - tuple with two values - protocol, port number (optional)
"""
NAME = 'pcs_or_linux_service'
DESCRIPTION = 'Service in pacemaker or init.d'
CONFIG_SCHEMA = {
'type': 'object',
'properties': {
'pcs_service': {'type': 'string'},
'linux_service': {'type': 'string'},
'grep': {'type': 'string'},
'port': process.PORT_SCHEMA,
},
'required': ['grep', 'pcs_service', 'linux_service'],
'additionalProperties': False,
}
def __init__(self, *args, **kwargs):
super(PcsOrLinuxService, self).__init__(*args, **kwargs)
self.pcs_service = self.config.get('pcs_service')
self.linux_service = self.config.get('linux_service')
self.restart_cmd = (
'if pcs resource show {pcs_service}; '
'then pcs resource restart {pcs_service} $(hostname); '
'else service {linux_service} restart; fi').format(
linux_service=self.linux_service,
pcs_service=self.pcs_service)
self.terminate_cmd = (
'if pcs resource show {pcs_service}; '
'then pcs resource ban {pcs_service} $(hostname); '
'else service {linux_service} stop; fi').format(
linux_service=self.linux_service,
pcs_service=self.pcs_service)
self.start_cmd = (
'if pcs resource show {pcs_service}; '
'then pcs resource clear {pcs_service} $(hostname); '
'else service {linux_service} start; fi').format(
linux_service=self.linux_service,
pcs_service=self.pcs_service)
|