25 from clm.models.cluster
import Cluster
26 from clm.models.user
import User
27 from clm.utils
import log
28 from clm.utils.cm
import CM
29 from clm.utils.decorators
import admin_clm_log
30 from clm.utils.exception
import CLMException
31 from common.states
import cluster_states, user_active_states
48 def add(cm_id, caller_id, name, address, port, new_password):
50 if not re.search(
'^[a-z0-9-]+$', name):
51 raise CLMException(
'cluster_invalid_name')
54 Cluster.objects.get(name=name)
55 raise CLMException(
'cluster_duplicate_name')
56 except Cluster.DoesNotExist:
60 cluster.address = address
63 cluster.state = cluster_states[
'ok']
68 raise CLMException(
'cluster_add')
73 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
74 s.connect((address, port))
75 clm_ip = s.getsockname()[0]
78 status = CM(cluster.id).send_request(
'user/admin/first_admin_add/',
79 caller_id=caller_id, new_password=new_password, clm_address=clm_ip)[
'status']
81 log.exception(caller_id,
"Add cluster admin")
85 raise CLMException(
'cluster_add_admin')
87 for user
in User.objects.filter(default_cluster__exact=
None):
88 user.default_cluster = cluster
92 raise CLMException(
'cluster_add')
96 users = list(User.objects.values_list(
'id', flat=
True))
98 status = CM(cluster.id).send_request(
'user/user/add_missing/', caller_id=caller_id, remote=users)[
'status']
100 log.exception(caller_id, e)
104 raise CLMException(
'cluster_add_users')
118 def delete(cm_id, caller_id, cluster_id):
120 cluster = Cluster.objects.get(pk=cluster_id)
123 raise CLMException(
'cluster_delete')
137 def edit(cm_id, caller_id, cluster_id, name=None, address=None, port=None,):
139 cluster = Cluster.objects.get(pk=cluster_id)
143 cluster.address = address
148 raise CLMException(
'cluster_edit')
160 def lock(cm_id, caller_id, cluster_id):
161 cluster = Cluster.objects.get(pk=cluster_id)
162 cluster.state = cluster_states[
'locked']
166 raise CLMException(
'cluster_lock')
178 def unlock(cm_id, caller_id, cluster_id):
180 cluster = Cluster.objects.get(pk=cluster_id)
182 raise CLMException(
'cluster_get')
184 cluster.state = cluster_states[
'ok']
188 raise CLMException(
'cluster_unlock')
190 users = list(User.objects.filter(is_active__exact=user_active_states[
'ok']).values_list(
'id', flat=
True))
193 status = CM(cluster.id).send_request(
"user/user/add_missing/", caller_id=caller_id, remote=users)[
'status']
195 log.exception(caller_id,
"Adding users: %s" % str(e))
199 cluster.state = cluster_states[
'locked']
203 raise CLMException(
'cluster_unlock')
205 raise CLMException(
'cluster_unlock')
218 cluster = Cluster.objects.get(pk=cluster_id)
230 return [c.dict
for c
in Cluster.objects.all()]