This file is indexed.

/usr/lib/python3/dist-packages/provisioningserver/drivers/power/moonshot.py is in python3-maas-provisioningserver 2.4.0~beta2-6865-gec43e47e6-0ubuntu1.

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
# Copyright 2015-2016 Canonical Ltd.  This software is licensed under the
# GNU Affero General Public License version 3 (see the file LICENSE).

"""Moonshot IPMI Power Driver."""

__all__ = []


import re

from provisioningserver.drivers import (
    make_ip_extractor,
    make_setting_field,
    SETTING_SCOPE,
)
from provisioningserver.drivers.power import (
    PowerActionError,
    PowerDriver,
)
from provisioningserver.utils import shell
from provisioningserver.utils.shell import (
    call_and_check,
    ExternalProcessError,
    get_env_with_locale,
)


class MoonshotIPMIPowerDriver(PowerDriver):

    name = 'moonshot'
    description = "HP Moonshot - iLO4 (IPMI)"
    settings = [
        make_setting_field('power_address', "Power address", required=True),
        make_setting_field('power_user', "Power user"),
        make_setting_field(
            'power_pass', "Power password", field_type='password'),
        make_setting_field(
            'power_hwaddress', "Power hardware address",
            scope=SETTING_SCOPE.NODE, required=True),
    ]
    ip_extractor = make_ip_extractor('power_address')

    def detect_missing_packages(self):
        if not shell.has_command_available('ipmitool'):
            return ['ipmitool']
        return []

    def _issue_ipmitool_command(
            self, power_change, power_address=None, power_user=None,
            power_pass=None, power_hwaddress=None, **extra):
        """Issue ipmitool command for HP Moonshot cartridge."""
        command = (
            'ipmitool', '-I', 'lanplus', '-H', power_address,
            '-U', power_user, '-P', power_pass
        ) + tuple(power_hwaddress.split())
        if power_change == 'pxe':
            command += ('chassis', 'bootdev', 'pxe')
        else:
            command += ('power', power_change)
        try:
            stdout = call_and_check(command, env=get_env_with_locale())
            stdout = stdout.decode('utf-8')
        except ExternalProcessError as e:
            raise PowerActionError(
                "Failed to execute %s for cartridge %s at %s: %s" % (
                    command, power_hwaddress,
                    power_address, e.output_as_unicode))
        else:
            # Return output if power query
            if power_change == 'status':
                match = re.search(r'\b(on|off)\b$', stdout)
                return stdout if match is None else match.group(0)

    def power_on(self, system_id, context):
        self._issue_ipmitool_command('pxe', **context)
        self._issue_ipmitool_command('on', **context)

    def power_off(self, system_id, context):
        self._issue_ipmitool_command('off', **context)

    def power_query(self, system_id, context):
        return self._issue_ipmitool_command('status', **context)