This file is indexed.

/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)