Commit 19f9102f authored by Jérome Perrin's avatar Jérome Perrin

proxy: support for software destruction

parent 5d88e54e
......@@ -166,7 +166,7 @@ def log_computer_table(logger, conn):
def log_software_table(logger, conn):
tbl_software = 'software' + DB_VERSION
cur = conn.cursor()
qry = cur.execute("SELECT *, md5(url) as md5 FROM %s" % tbl_software)
qry = cur.execute("SELECT *, md5(url) as md5 FROM %s where slap_state <> 'destroyed'" % tbl_software)
log_table(logger, qry, tbl_software)
......
--version:11
--version:12
CREATE TABLE IF NOT EXISTS software%(version)s (
url VARCHAR(255),
computer_reference VARCHAR(255) DEFAULT '%(computer)s',
slap_state VARCHAR(255) DEFAULT 'available',
CONSTRAINT uniq PRIMARY KEY (url, computer_reference)
);
......
......@@ -236,8 +236,12 @@ def getFullComputerInformation():
slap_computer = Computer(computer_id)
slap_computer._software_release_list = []
for sr in execute_db('software', 'select * from %s WHERE computer_reference=?', [computer_id]):
slap_computer._software_release_list.append(SoftwareRelease(
software_release=sr['url'], computer_guid=computer_id))
slap_computer._software_release_list.append(
SoftwareRelease(
software_release=sr['url'],
computer_guid=computer_id,
requested_state=sr['slap_state']
))
slap_computer._computer_partition_list = []
for partition in execute_db('partition', 'SELECT * FROM %s WHERE computer_reference=?', [computer_id]):
slap_computer._computer_partition_list.append(partitiondict2partition(
......@@ -267,16 +271,25 @@ def setComputerPartitionConnectionXml():
@app.route('/buildingSoftwareRelease', methods=['POST'])
def buildingSoftwareRelease():
#raise ValueError("TODO ! mark building")
return 'Ignored'
@app.route('/destroyedSoftwareRelease', methods=['POST'])
def destroyedSoftwareRelease():
#raise ValueError("TODO ! mark destroyed")
return 'Ignored'
@app.route('/availableSoftwareRelease', methods=['POST'])
def availableSoftwareRelease():
#raise ValueError("TODO ! mark state available")
return 'Ignored'
@app.route('/softwareReleaseError', methods=['POST'])
def softwareReleaseError():
#raise ValueError("TODO ! mark state error")
return 'Ignored'
@app.route('/softwareInstanceError', methods=['POST'])
def softwareInstanceError():
return 'Ignored'
......@@ -335,11 +348,17 @@ def registerComputerPartition():
def supplySupply():
url = request.form['url']
computer_id = request.form['computer_id']
if request.form['state'] == 'destroyed':
execute_db('software', 'DELETE FROM %s WHERE url = ? AND computer_reference=?',
[url, computer_id])
else:
execute_db('software', 'INSERT OR REPLACE INTO %s VALUES(?, ?)', [url, computer_id])
state = request.form['state']
# TODO: only "available" and "requested" are valid states
# TODO: lifetime (available => requested) -> building -> available OR error
# TODO: lifetime (destroyed => destroy_requested) -> destroyed
# ( but check the names )
execute_db(
'software',
'INSERT OR REPLACE INTO %s VALUES(?, ?, ?)',
[url, computer_id, state])
if state == 'destroyed':
return '%r destroyed' % url
return '%r added' % url
......
......@@ -120,7 +120,7 @@ class SoftwareRelease(SlapDocument):
"""
zope.interface.implements(interface.ISoftwareRelease)
def __init__(self, software_release=None, computer_guid=None, **kw):
def __init__(self, software_release=None, computer_guid=None, requested_state='available', **kw):
"""
Makes easy initialisation of class parameters
......@@ -133,9 +133,10 @@ class SoftwareRelease(SlapDocument):
software_release = software_release.encode('UTF-8')
self._software_release = software_release
self._computer_guid = computer_guid
self._requested_state = requested_state
def __getinitargs__(self):
return (self._software_release, self._computer_guid, )
return (self._software_release, self._computer_guid, self._requested_state)
def getComputerId(self):
if not self._computer_guid:
......@@ -175,7 +176,7 @@ class SoftwareRelease(SlapDocument):
'computer_id': self.getComputerId()})
def getState(self):
return getattr(self, '_requested_state', 'available')
return self._requested_state
class SoftwareProductCollection(object):
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment