summaryrefslogtreecommitdiffstats
path: root/ipalib/plugins/hostgroup.py
blob: 7155234409ed1141a7e3edefa7c42d79f27bff6b (plain)
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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# Authors:
#   Rob Crittenden <rcritten@redhat.com>
#   Pavel Zuna <pzuna@redhat.com>
#
# Copyright (C) 2009  Red Hat
# see file 'COPYING' for use and warranty information
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
"""
Groups of hosts.

Manage groups of hosts. This is useful for applying access control to a
number of hosts by using Host-based Access Control.

EXAMPLES:

 Add a new host group:
   ipa hostgroup-add --desc="Baltimore hosts" baltimore

 Add another new host group:
   ipa hostgroup-add --desc="Maryland hosts" maryland

 Add members to the hostgroup:
   ipa hostgroup-add-member --hosts=box1,box2,box3 baltimore

 Add a hostgroup as a member of another hostgroup:
   ipa hostgroup-add-member --hostgroups=baltimore maryland

 Remove a host from the hostgroup:
   ipa hostgroup-remove-member --hosts=box2 baltimore

 Display a host group:
   ipa hostgroup-show baltimore

 Delete a hostgroup:
   ipa hostgroup-del baltimore
"""

from ipalib.plugins.baseldap import *
from ipalib import api, Int, _, ngettext


class hostgroup(LDAPObject):
    """
    Hostgroup object.
    """
    container_dn = api.env.container_hostgroup
    object_name = 'hostgroup'
    object_name_plural = 'hostgroups'
    object_class = ['ipaobject', 'ipahostgroup']
    default_attributes = ['cn', 'description', 'member', 'memberof',
        'memberindirect', 'memberofindirect',
    ]
    uuid_attribute = 'ipauniqueid'
    attribute_members = {
        'member': ['host', 'hostgroup'],
        'memberof': ['hostgroup'],
        'memberindirect': ['host', 'hostgroup'],
        'memberofindirect': ['host', 'hostgroup'],
    }

    label = _('Host Groups')

    takes_params = (
        Str('cn',
            cli_name='hostgroup_name',
            label=_('Host-group'),
            doc=_('Name of host-group'),
            primary_key=True,
            normalizer=lambda value: value.lower(),
        ),
        Str('description',
            cli_name='desc',
            label=_('Description'),
            doc=_('A description of this host-group'),
        ),
    )

api.register(hostgroup)


class hostgroup_add(LDAPCreate):
    """
    Add a new hostgroup.
    """

    msg_summary = _('Added hostgroup "%(value)s"')

api.register(hostgroup_add)


class hostgroup_del(LDAPDelete):
    """
    Delete a hostgroup.
    """

    msg_summary = _('Deleted hostgroup "%(value)s"')

api.register(hostgroup_del)


class hostgroup_mod(LDAPUpdate):
    """
    Modify a hostgroup.
    """

    msg_summary = _('Modified hostgroup "%(value)s"')

api.register(hostgroup_mod)


class hostgroup_find(LDAPSearch):
    """
    Search for hostgroups.
    """
    member_attributes = ['member', 'memberof']
    msg_summary = ngettext(
        '%(count)d hostgroup matched', '%(count)d hostgroups matched', 0
    )

api.register(hostgroup_find)


class hostgroup_show(LDAPRetrieve):
    """
    Display information about a hostgroup.
    """

api.register(hostgroup_show)


class hostgroup_add_member(LDAPAddMember):
    """
    Add members to a hostgroup.
    """

api.register(hostgroup_add_member)


class hostgroup_remove_member(LDAPRemoveMember):
    """
    Remove members from a hostgroup.
    """

api.register(hostgroup_remove_member)