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): ...@@ -166,7 +166,7 @@ def log_computer_table(logger, conn):
def log_software_table(logger, conn): def log_software_table(logger, conn):
tbl_software = 'software' + DB_VERSION tbl_software = 'software' + DB_VERSION
cur = conn.cursor() 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) log_table(logger, qry, tbl_software)
......
--version:11 --version:12
CREATE TABLE IF NOT EXISTS software%(version)s ( CREATE TABLE IF NOT EXISTS software%(version)s (
url VARCHAR(255), url VARCHAR(255),
computer_reference VARCHAR(255) DEFAULT '%(computer)s', computer_reference VARCHAR(255) DEFAULT '%(computer)s',
slap_state VARCHAR(255) DEFAULT 'available',
CONSTRAINT uniq PRIMARY KEY (url, computer_reference) CONSTRAINT uniq PRIMARY KEY (url, computer_reference)
); );
......
...@@ -236,8 +236,12 @@ def getFullComputerInformation(): ...@@ -236,8 +236,12 @@ def getFullComputerInformation():
slap_computer = Computer(computer_id) slap_computer = Computer(computer_id)
slap_computer._software_release_list = [] slap_computer._software_release_list = []
for sr in execute_db('software', 'select * from %s WHERE computer_reference=?', [computer_id]): for sr in execute_db('software', 'select * from %s WHERE computer_reference=?', [computer_id]):
slap_computer._software_release_list.append(SoftwareRelease( slap_computer._software_release_list.append(
software_release=sr['url'], computer_guid=computer_id)) SoftwareRelease(
software_release=sr['url'],
computer_guid=computer_id,
requested_state=sr['slap_state']
))
slap_computer._computer_partition_list = [] slap_computer._computer_partition_list = []
for partition in execute_db('partition', 'SELECT * FROM %s WHERE computer_reference=?', [computer_id]): for partition in execute_db('partition', 'SELECT * FROM %s WHERE computer_reference=?', [computer_id]):
slap_computer._computer_partition_list.append(partitiondict2partition( slap_computer._computer_partition_list.append(partitiondict2partition(
...@@ -267,16 +271,25 @@ def setComputerPartitionConnectionXml(): ...@@ -267,16 +271,25 @@ def setComputerPartitionConnectionXml():
@app.route('/buildingSoftwareRelease', methods=['POST']) @app.route('/buildingSoftwareRelease', methods=['POST'])
def buildingSoftwareRelease(): def buildingSoftwareRelease():
#raise ValueError("TODO ! mark building")
return 'Ignored'
@app.route('/destroyedSoftwareRelease', methods=['POST'])
def destroyedSoftwareRelease():
#raise ValueError("TODO ! mark destroyed")
return 'Ignored' return 'Ignored'
@app.route('/availableSoftwareRelease', methods=['POST']) @app.route('/availableSoftwareRelease', methods=['POST'])
def availableSoftwareRelease(): def availableSoftwareRelease():
#raise ValueError("TODO ! mark state available")
return 'Ignored' return 'Ignored'
@app.route('/softwareReleaseError', methods=['POST']) @app.route('/softwareReleaseError', methods=['POST'])
def softwareReleaseError(): def softwareReleaseError():
#raise ValueError("TODO ! mark state error")
return 'Ignored' return 'Ignored'
@app.route('/softwareInstanceError', methods=['POST']) @app.route('/softwareInstanceError', methods=['POST'])
def softwareInstanceError(): def softwareInstanceError():
return 'Ignored' return 'Ignored'
...@@ -335,11 +348,17 @@ def registerComputerPartition(): ...@@ -335,11 +348,17 @@ def registerComputerPartition():
def supplySupply(): def supplySupply():
url = request.form['url'] url = request.form['url']
computer_id = request.form['computer_id'] computer_id = request.form['computer_id']
if request.form['state'] == 'destroyed': state = request.form['state']
execute_db('software', 'DELETE FROM %s WHERE url = ? AND computer_reference=?', # TODO: only "available" and "requested" are valid states
[url, computer_id]) # TODO: lifetime (available => requested) -> building -> available OR error
else: # TODO: lifetime (destroyed => destroy_requested) -> destroyed
execute_db('software', 'INSERT OR REPLACE INTO %s VALUES(?, ?)', [url, computer_id]) # ( 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 return '%r added' % url
......
...@@ -120,7 +120,7 @@ class SoftwareRelease(SlapDocument): ...@@ -120,7 +120,7 @@ class SoftwareRelease(SlapDocument):
""" """
zope.interface.implements(interface.ISoftwareRelease) 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 Makes easy initialisation of class parameters
...@@ -133,9 +133,10 @@ class SoftwareRelease(SlapDocument): ...@@ -133,9 +133,10 @@ class SoftwareRelease(SlapDocument):
software_release = software_release.encode('UTF-8') software_release = software_release.encode('UTF-8')
self._software_release = software_release self._software_release = software_release
self._computer_guid = computer_guid self._computer_guid = computer_guid
self._requested_state = requested_state
def __getinitargs__(self): def __getinitargs__(self):
return (self._software_release, self._computer_guid, ) return (self._software_release, self._computer_guid, self._requested_state)
def getComputerId(self): def getComputerId(self):
if not self._computer_guid: if not self._computer_guid:
...@@ -175,7 +176,7 @@ class SoftwareRelease(SlapDocument): ...@@ -175,7 +176,7 @@ class SoftwareRelease(SlapDocument):
'computer_id': self.getComputerId()}) 'computer_id': self.getComputerId()})
def getState(self): def getState(self):
return getattr(self, '_requested_state', 'available') return self._requested_state
class SoftwareProductCollection(object): 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