32 from django.db
import models
34 from cm.utils
import log
35 from cm.utils.exception
import CMException
39 address = models.IPAddressField()
40 lease = models.ForeignKey(
'Lease', blank=
True, null=
True)
41 user = models.ForeignKey(
'User', blank=
True, null=
True, related_name=
'public_ips')
63 d[
'public_ip_id'] = self.id
66 d[
'lease_id'] = self.lease.id
68 d[
'vm_name'] = self.lease.vm.name
if self.
lease and self.lease.vm
else ''
76 d[
'user_id'] = self.user.id
88 raise CMException(
'lease_not_attached')
93 log.debug(0,
"Attaching ip with comand: %s" % str([
'ssh',
95 '/var/lib/cc1/.ssh/id_rsa',
96 '%s@%s' % (lease.vm.node.username, lease.vm.node.address),
97 'sudo /usr/sbin/cc1_node_public_ip attach %d %s %s' % (lease.vm.id, lease.vm_address, self.
address)]))
99 p = subprocess.Popen([
'ssh',
101 '/var/lib/cc1/.ssh/id_rsa',
102 '%s@%s' % (lease.vm.node.username, lease.vm.node.address),
103 'sudo /usr/sbin/cc1_node_public_ip attach %d %s %s' % (lease.vm.id, lease.vm_address, self.
address)],
104 stdout=subprocess.PIPE)
106 log.debug(self.user.id, p.stdout.read())
108 if p.returncode != 0:
109 log.error(self.user.id,
"SSH error: %d" % p.returncode)
110 raise CMException(
'public_ip_failed')
113 if self.
lease ==
None:
114 raise CMException(
'public_ip_not_attached')
116 if self.lease.vm ==
None:
117 raise CMException(
'lease_not_attached')
119 log.debug(0,
"Detaching ip with comand: %s" % str([
'ssh',
121 '/var/lib/cc1/.ssh/id_rsa',
122 '%s@%s' % (self.lease.vm.node.username, self.lease.vm.node.address),
123 'sudo /usr/sbin/cc1_node_public_ip detach %d %s %s' % (self.lease.vm.id, self.lease.vm_address, self.
address)]))
124 p = subprocess.Popen([
'ssh',
126 '/var/lib/cc1/.ssh/id_rsa',
127 '%s@%s' % (self.lease.vm.node.username, self.lease.vm.node.address),
128 'sudo /usr/sbin/cc1_node_public_ip detach %d %s %s' % (self.lease.vm.id, self.lease.vm_address, self.
address)],
129 stdout=subprocess.PIPE)
131 log.debug(self.user.id, p.stdout.read())
136 if p.returncode != 0:
137 raise CMException(
'public_ip_failed')