Commit e58e7363 authored by Marco Mariani's avatar Marco Mariani

Merge branch 'master' into cliff

parents 51b2e8ef 3de0ab52
...@@ -55,7 +55,7 @@ class SoftwareInstance(Item): ...@@ -55,7 +55,7 @@ class SoftwareInstance(Item):
if xml is None or xml == '': if xml is None or xml == '':
return result_dict return result_dict
tree = etree.fromstring(xml.encode('utf-8')) tree = etree.fromstring(xml)
for element in tree.findall('parameter'): for element in tree.findall('parameter'):
key = element.get('id') key = element.get('id')
......
...@@ -51,6 +51,9 @@ ...@@ -51,6 +51,9 @@
<item> <item>
<key> <string>_body</string> </key> <key> <string>_body</string> </key>
<value> <string>promise_dict = {\n <value> <string>promise_dict = {\n
\'IExtractionPlugin\': [\n
\'ERP5 Access Token Extraction Plugin\',\n
],\n
\'IExtractionPlugin\': [\n \'IExtractionPlugin\': [\n
\'SlapOS Machine Authentication Plugin\',\n \'SlapOS Machine Authentication Plugin\',\n
],\n ],\n
......
277 279
\ No newline at end of file \ No newline at end of file
<local_roles_item>
<local_roles>
<role id='G-COMPANY'>
<item>Auditor</item>
<item>Author</item>
</role>
<role id='R-MEMBER'>
<item>Author</item>
</role>
<role id='zope'>
<item>Owner</item>
</role>
</local_roles>
</local_roles_item>
\ No newline at end of file
<type_roles>
<role id='Author; Auditor'>
<property id='title'>Group company</property>
<multi_property id='category'>group/company</multi_property>
<multi_property id='base_category'>group</multi_property>
</role>
<role id='Author'>
<property id='title'>Member</property>
<multi_property id='category'>role/member</multi_property>
<multi_property id='base_category'>role</multi_property>
</role>
</type_roles>
\ No newline at end of file
<type_roles>
<role id='Assignor'>
<property id='title'>Group company</property>
<multi_property id='category'>group/company</multi_property>
<multi_property id='base_category'>group</multi_property>
</role>
</type_roles>
\ No newline at end of file
...@@ -1982,3 +1982,22 @@ class TestRegularisationRequest(TestSlapOSGroupRoleSecurityMixin): ...@@ -1982,3 +1982,22 @@ class TestRegularisationRequest(TestSlapOSGroupRoleSecurityMixin):
self.assertRoles(product, 'R-MEMBER', ['Auditor']) self.assertRoles(product, 'R-MEMBER', ['Auditor'])
self.assertPermissionsOfRole(product, 'Auditor', self.assertPermissionsOfRole(product, 'Auditor',
['Access contents information', 'View']) ['Access contents information', 'View'])
class TestAccessTokenModule(TestSlapOSGroupRoleSecurityMixin):
def test(self):
module = self.portal.access_token_module
self.assertSecurityGroup(module,
['G-COMPANY', 'R-MEMBER', 'zope'], False)
self.assertRoles(module, 'G-COMPANY', ['Auditor', 'Author'])
self.assertRoles(module, 'R-MEMBER', ['Author'])
self.assertRoles(module, 'zope', ['Owner'])
class TestOneTimeRestrictedAccessToken(TestSlapOSGroupRoleSecurityMixin):
def test_GroupCompany(self):
product = self.portal.access_token_module.newContent(
portal_type='One Time Restricted Access Token')
product.updateLocalRolesOnSecurityGroups()
self.assertSecurityGroup(product,
['G-COMPANY', self.user_id], False)
self.assertRoles(product, 'G-COMPANY', ['Assignor'])
self.assertRoles(product, self.user_id, ['Owner'])
167 168
\ No newline at end of file \ No newline at end of file
access_token_module
account_module account_module
account_module/bank account_module/bank
account_module/capital account_module/capital
......
access_token_module
account_module account_module
account_module/bank account_module/bank
account_module/capital account_module/capital
......
Access Token Module
Account Account
Account Module Account Module
Accounting Period Accounting Period
...@@ -54,6 +55,7 @@ Meeting Module ...@@ -54,6 +55,7 @@ Meeting Module
Note Note
Notification Message Notification Message
Notification Message Module Notification Message Module
One Time Restricted Access Token
Open Sale Order Open Sale Order
Open Sale Order Module Open Sale Order Module
Organisation Organisation
......
Access Token Module
One Time Restricted Access Token
Account Account
Account Module Account Module
Accounting Period Accounting Period
......
25 26
\ No newline at end of file \ No newline at end of file
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_body</string> </key>
<value> <string>import json\n
\n
portal = context.getPortalObject()\n
person = portal.ERP5Site_getAuthenticatedMemberPersonValue()\n
\n
web_site = context.getWebSiteValue()\n
request_method = "POST"\n
request_url = "%s/%s" % (web_site.absolute_url(), "add-a-server/WebSection_registerNewComputer")\n
\n
access_token = portal.access_token_module.newContent(\n
portal_type="One Time Restricted Access Token",\n
agent_value=person,\n
url_string=request_url,\n
url_method="POST",\n
)\n
access_token.validate()\n
\n
request = context.REQUEST\n
response = request.RESPONSE\n
response.setHeader(\'Content-Type\', "application/json")\n
return json.dumps({\'access_token\': access_token.getId()})\n
</string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Base_generateAccessTokenFromJS</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="PythonScript" module="Products.PythonScripts.PythonScript"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>Script_magic</string> </key>
<value> <int>3</int> </value>
</item>
<item>
<key> <string>_bind_names</string> </key>
<value>
<object>
<klass>
<global name="NameAssignments" module="Shared.DC.Scripts.Bindings"/>
</klass>
<tuple/>
<state>
<dictionary>
<item>
<key> <string>_asgns</string> </key>
<value>
<dictionary>
<item>
<key> <string>name_container</string> </key>
<value> <string>container</string> </value>
</item>
<item>
<key> <string>name_context</string> </key>
<value> <string>context</string> </value>
</item>
<item>
<key> <string>name_m_self</string> </key>
<value> <string>script</string> </value>
</item>
<item>
<key> <string>name_subpath</string> </key>
<value> <string>traverse_subpath</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</state>
</object>
</value>
</item>
<item>
<key> <string>_body</string> </key>
<value> <string encoding="cdata"><![CDATA[
return """\n
<script>\n
"use strict";\n
(function ($) {\n
\n
var methods;\n
\n
methods = {\n
click: function () {\n
$(this).click(function() {\n
$(this).parent().parent()\n
.slapostoken("generateToken");\n
return false;\n
});\n
},\n
generateToken: function () {\n
$.ajax("./Base_generateAccessTokenFromJS", {\n
context: $(this),\n
success: function(data) {\n
$(this).attr("class", "alignr")\n
.text("New token: " + data.access_token);\n
}\n
})\n
},\n
};\n
\n
$.fn.slapostoken = function (method) {\n
var result;\n
if (methods.hasOwnProperty(method)) {\n
result = methods[method].apply(\n
this,\n
Array.prototype.slice.call(arguments, 1)\n
);\n
} else {\n
$.error(\'Method \' + method +\n
\' does not exist on jQuery.slapostoken\');\n
}\n
return result;\n
};\n
}(jQuery));\n
\n
$("#tokengenerationlink")\n
.slapostoken("click");\n
</script>\n
"""\n
]]></string> </value>
</item>
<item>
<key> <string>_params</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>Base_getTokenGeneratorJS</string> </value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -52,13 +52,20 @@ ...@@ -52,13 +52,20 @@
<key> <string>_body</string> </key> <key> <string>_body</string> </key>
<value> <string>portal = context.getPortalObject()\n <value> <string>portal = context.getPortalObject()\n
person = portal.ERP5Site_getAuthenticatedMemberPersonValue()\n person = portal.ERP5Site_getAuthenticatedMemberPersonValue()\n
request_kw = dict(computer_title=title)\n \n
person.requestComputer(**request_kw)\n request = context.REQUEST\n
computer = context.restrictedTraverse(context.REQUEST.get(\'computer\'))\n response = request.RESPONSE\n
computer.generateCertificate()\n \n
message = "Registering Computer"\n if person is None:\n
context.REQUEST.set("portal_status_message", message)\n response.setStatus(403)\n
return computer.Computer_viewConnectionInformationAsWeb()\n else:\n
request_kw = dict(computer_title=title)\n
person.requestComputer(**request_kw)\n
computer = context.restrictedTraverse(context.REQUEST.get(\'computer\'))\n
computer.generateCertificate()\n
message = "Registering Computer"\n
context.REQUEST.set("portal_status_message", message)\n
return computer.Computer_viewConnectionInformationAsWeb()\n
</string> </value> </string> </value>
</item> </item>
<item> <item>
......
...@@ -90,6 +90,8 @@ ...@@ -90,6 +90,8 @@
<string>my_certificate_request_button</string> <string>my_certificate_request_button</string>
<string>my_certificate_revoke_button</string> <string>my_certificate_revoke_button</string>
<string>my_update_credential_button</string> <string>my_update_credential_button</string>
<string>my_token_generate_button</string>
<string>your_ad</string>
</list> </list>
</value> </value>
</item> </item>
......
<?xml version="1.0"?>
<ZopeData>
<record id="1" aka="AAAAAAAAAAE=">
<pickle>
<global name="ProxyField" module="Products.ERP5Form.ProxyField"/>
</pickle>
<pickle>
<dictionary>
<item>
<key> <string>delegated_list</string> </key>
<value>
<list>
<string>css_class</string>
<string>default</string>
<string>extra</string>
<string>href</string>
<string>title</string>
</list>
</value>
</item>
<item>
<key> <string>id</string> </key>
<value> <string>my_token_generate_button</string> </value>
</item>
<item>
<key> <string>message_values</string> </key>
<value>
<dictionary>
<item>
<key> <string>external_validator_failed</string> </key>
<value> <string>The input failed the external validator.</string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>overrides</string> </key>
<value>
<dictionary>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>tales</string> </key>
<value>
<dictionary>
<item>
<key> <string>css_class</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>href</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string></string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string></string> </value>
</item>
</dictionary>
</value>
</item>
<item>
<key> <string>values</string> </key>
<value>
<dictionary>
<item>
<key> <string>css_class</string> </key>
<value> <string>nolabel validate alignr</string> </value>
</item>
<item>
<key> <string>default</string> </key>
<value> <string>Generate a security token</string> </value>
</item>
<item>
<key> <string>extra</string> </key>
<value> <string>id="tokengenerationlink"</string> </value>
</item>
<item>
<key> <string>field_id</string> </key>
<value> <string>my_hyperlink</string> </value>
</item>
<item>
<key> <string>form_id</string> </key>
<value> <string>Base_viewWebFieldLibrary</string> </value>
</item>
<item>
<key> <string>href</string> </key>
<value> <string>./</string> </value>
</item>
<item>
<key> <string>target</string> </key>
<value> <string>Click to edit the target</string> </value>
</item>
<item>
<key> <string>title</string> </key>
<value> <string>Generate a token</string> </value>
</item>
</dictionary>
</value>
</item>
</dictionary>
</pickle>
</record>
</ZopeData>
...@@ -6,4 +6,5 @@ erp5_web ...@@ -6,4 +6,5 @@ erp5_web
erp5_rss_style erp5_rss_style
erp5_credential_oauth2 erp5_credential_oauth2
erp5_bearer_token erp5_bearer_token
erp5_access_token
slapos_pdm slapos_pdm
\ No newline at end of file
48 49
\ No newline at end of file \ No newline at end of file
...@@ -231,6 +231,7 @@ class testSlapOSMixin(ERP5TypeTestCase): ...@@ -231,6 +231,7 @@ class testSlapOSMixin(ERP5TypeTestCase):
'erp5_credential_oauth2', 'erp5_credential_oauth2',
'erp5_accounting_l10n_fr', 'erp5_accounting_l10n_fr',
'erp5_bearer_token', 'erp5_bearer_token',
'erp5_access_token',
'erp5_project', 'erp5_project',
'slapos_cache', 'slapos_cache',
'slapos_cloud', 'slapos_cloud',
...@@ -540,21 +541,23 @@ class testSlapOSMixin(ERP5TypeTestCase): ...@@ -540,21 +541,23 @@ class testSlapOSMixin(ERP5TypeTestCase):
self.portal.REQUEST.headers = {} self.portal.REQUEST.headers = {}
def generateNewId(self): def generateNewId(self):
return self.portal.portal_ids.generateNewId( return "%sö" % self.portal.portal_ids.generateNewId(
id_group=('slapos_core_test')) id_group=('slapos_core_test'))
def generateNewSoftwareReleaseUrl(self): def generateNewSoftwareReleaseUrl(self):
return 'http://example.org/test%s.cfg' % self.generateNewId() return 'http://example.org/têst%s.cfg' % self.generateNewId()
def generateNewSoftwareType(self): def generateNewSoftwareType(self):
return 'Type%s' % self.generateNewId() return 'Type ë@î %s' % self.generateNewId()
def generateNewSoftwareTitle(self): def generateNewSoftwareTitle(self):
return 'Title%s' % self.generateNewId() return 'Title é#ï %s' % self.generateNewId()
def generateSafeXml(self): def generateSafeXml(self):
return '<?xml version="1.0" encoding="utf-8"?><instance><parameter '\ return '<?xml version="1.0" encoding="utf-8"?><instance><parameter '\
'id="param">%s</parameter></instance>' % self.generateNewId() 'id="%s">%s</parameter></instance>' % \
("paramé".decode("UTF-8").encode("UTF-8"),
self.generateNewId().decode("UTF-8").encode("UTF-8"))
def generateEmptyXml(self): def generateEmptyXml(self):
return '<?xml version="1.0" encoding="utf-8"?><instance></instance>' return '<?xml version="1.0" encoding="utf-8"?><instance></instance>'
......
...@@ -165,7 +165,7 @@ class SlapTool(BaseTool): ...@@ -165,7 +165,7 @@ class SlapTool(BaseTool):
def _getCacheComputerInformation(self, computer_id, user): def _getCacheComputerInformation(self, computer_id, user):
self.REQUEST.response.setHeader('Content-Type', 'text/xml; charset=utf-8') self.REQUEST.response.setHeader('Content-Type', 'text/xml; charset=utf-8')
slap_computer = Computer(computer_id) slap_computer = Computer(computer_id.decode("UTF-8"))
parent_uid = self._getComputerUidByReference(computer_id) parent_uid = self._getComputerUidByReference(computer_id)
slap_computer._computer_partition_list = [] slap_computer._computer_partition_list = []
...@@ -230,7 +230,7 @@ class SlapTool(BaseTool): ...@@ -230,7 +230,7 @@ class SlapTool(BaseTool):
reference=user, portal_type=['Person', 'Computer', 'Software Instance'])) reference=user, portal_type=['Person', 'Computer', 'Software Instance']))
user_type = user_document.getPortalType() user_type = user_document.getPortalType()
self.REQUEST.response.setHeader('Content-Type', 'text/xml; charset=utf-8') self.REQUEST.response.setHeader('Content-Type', 'text/xml; charset=utf-8')
slap_computer = Computer(computer_id) slap_computer = Computer(computer_id.decode("UTF-8"))
parent_uid = self._getComputerUidByReference(computer_id) parent_uid = self._getComputerUidByReference(computer_id)
slap_computer._computer_partition_list = [] slap_computer._computer_partition_list = []
...@@ -386,7 +386,7 @@ class SlapTool(BaseTool): ...@@ -386,7 +386,7 @@ class SlapTool(BaseTool):
portal = self.getPortalObject() portal = self.getPortalObject()
person = portal.ERP5Site_getAuthenticatedMemberPersonValue() person = portal.ERP5Site_getAuthenticatedMemberPersonValue()
person.requestComputer(computer_title=computer_title) person.requestComputer(computer_title=computer_title)
computer = Computer(self.REQUEST.get('computer_reference')) computer = Computer(self.REQUEST.get('computer_reference').decode("UTF-8"))
return xml_marshaller.xml_marshaller.dumps(computer) return xml_marshaller.xml_marshaller.dumps(computer)
security.declareProtected(Permissions.AccessContentsInformation, security.declareProtected(Permissions.AccessContentsInformation,
...@@ -596,8 +596,8 @@ class SlapTool(BaseTool): ...@@ -596,8 +596,8 @@ class SlapTool(BaseTool):
def _generateComputerCertificate(self, computer_id): def _generateComputerCertificate(self, computer_id):
self._getComputerDocument(computer_id).generateCertificate() self._getComputerDocument(computer_id).generateCertificate()
result = { result = {
'certificate': self.REQUEST.get('computer_certificate'), 'certificate': self.REQUEST.get('computer_certificate').decode("UTF-8"),
'key': self.REQUEST.get('computer_key') 'key': self.REQUEST.get('computer_key').decode("UTF-8")
} }
return xml_marshaller.xml_marshaller.dumps(result) return xml_marshaller.xml_marshaller.dumps(result)
...@@ -630,8 +630,8 @@ class SlapTool(BaseTool): ...@@ -630,8 +630,8 @@ class SlapTool(BaseTool):
portal = self.getPortalObject() portal = self.getPortalObject()
computer_partition_document = self._getComputerPartitionDocument( computer_partition_document = self._getComputerPartitionDocument(
computer_reference, computer_partition_reference) computer_reference, computer_partition_reference)
slap_partition = SlapComputerPartition(computer_reference, slap_partition = SlapComputerPartition(computer_reference.decode("UTF-8"),
computer_partition_reference) computer_partition_reference.decode("UTF-8"))
slap_partition._software_release_document = None slap_partition._software_release_document = None
slap_partition._requested_state = 'destroyed' slap_partition._requested_state = 'destroyed'
slap_partition._need_modification = 0 slap_partition._need_modification = 0
...@@ -664,8 +664,10 @@ class SlapTool(BaseTool): ...@@ -664,8 +664,10 @@ class SlapTool(BaseTool):
slap_partition._requested_state = 'started' slap_partition._requested_state = 'started'
slap_partition._software_release_document = SoftwareRelease( slap_partition._software_release_document = SoftwareRelease(
software_release=software_instance.getUrlString(), software_release=software_instance.getUrlString().decode("UTF-8"),
computer_guid=computer_reference) computer_guid=computer_reference.decode("UTF-8"))
slap_partition._software_release_document._software_release = \
slap_partition._software_release_document._software_release.decode("UTF-8")
slap_partition._need_modification = 1 slap_partition._need_modification = 1
...@@ -742,7 +744,7 @@ class SlapTool(BaseTool): ...@@ -742,7 +744,7 @@ class SlapTool(BaseTool):
result_dict = {} result_dict = {}
try: try:
if xml is not None and xml != '': if xml is not None and xml != '':
tree = etree.fromstring(xml.encode('utf-8')) tree = etree.fromstring(xml)
for element in tree.findall('parameter'): for element in tree.findall('parameter'):
key = element.get('id') key = element.get('id')
value = result_dict.get(key, None) value = result_dict.get(key, None)
...@@ -761,9 +763,9 @@ class SlapTool(BaseTool): ...@@ -761,9 +763,9 @@ class SlapTool(BaseTool):
portal = self.getPortalObject() portal = self.getPortalObject()
while computer.getPortalType() != 'Computer': while computer.getPortalType() != 'Computer':
computer = computer.getParentValue() computer = computer.getParentValue()
computer_id = computer.getReference() computer_id = computer.getReference().decode("UTF-8")
slap_partition = SlapComputerPartition(computer_id, slap_partition = SlapComputerPartition(computer_id,
computer_partition_document.getReference()) computer_partition_document.getReference().decode("UTF-8"))
slap_partition._software_release_document = None slap_partition._software_release_document = None
slap_partition._requested_state = 'destroyed' slap_partition._requested_state = 'destroyed'
...@@ -795,8 +797,10 @@ class SlapTool(BaseTool): ...@@ -795,8 +797,10 @@ class SlapTool(BaseTool):
slap_partition._requested_state = 'started' slap_partition._requested_state = 'started'
slap_partition._software_release_document = SoftwareRelease( slap_partition._software_release_document = SoftwareRelease(
software_release=software_instance.getUrlString(), software_release=software_instance.getUrlString().decode("UTF-8"),
computer_guid=computer_id) computer_guid=computer_id)
slap_partition._software_release_document._software_release = \
slap_partition._software_release_document._software_release.decode("UTF-8")
slap_partition._need_modification = 1 slap_partition._need_modification = 1
...@@ -952,8 +956,12 @@ class SlapTool(BaseTool): ...@@ -952,8 +956,12 @@ class SlapTool(BaseTool):
'created_at': '%s' % rfc1123_date(DateTime()), 'created_at': '%s' % rfc1123_date(DateTime()),
"text": "#error no data found for %s" % context_reference "text": "#error no data found for %s" % context_reference
} }
# Prepare for xml marshalling
d["user"] = d["user"].decode("UTF-8")
d["text"] = d["text"].decode("UTF-8")
else: else:
d = json.loads(d) d = json.loads(d)
# Keep in cache server for 7 days # Keep in cache server for 7 days
self.REQUEST.response.setStatus(200) self.REQUEST.response.setStatus(200)
self.REQUEST.response.setHeader('Cache-Control', self.REQUEST.response.setHeader('Cache-Control',
...@@ -1298,7 +1306,9 @@ class SlapTool(BaseTool): ...@@ -1298,7 +1306,9 @@ class SlapTool(BaseTool):
ip_list = [] ip_list = []
for internet_protocol_address in computer_partition.contentValues(portal_type='Internet Protocol Address'): for internet_protocol_address in computer_partition.contentValues(portal_type='Internet Protocol Address'):
ip_list.append((internet_protocol_address.getNetworkInterface(''), internet_protocol_address.getIpAddress())) ip_list.append((
internet_protocol_address.getNetworkInterface('').decode("UTF-8"),
internet_protocol_address.getIpAddress().decode("UTF-8")))
slave_instance_list = [] slave_instance_list = []
if (software_instance.getPortalType() == "Software Instance"): if (software_instance.getPortalType() == "Software Instance"):
...@@ -1313,8 +1323,9 @@ class SlapTool(BaseTool): ...@@ -1313,8 +1323,9 @@ class SlapTool(BaseTool):
# XXX Use catalog to filter more efficiently # XXX Use catalog to filter more efficiently
if slave_instance.getSlapState() == "start_requested": if slave_instance.getSlapState() == "start_requested":
append({ append({
'slave_title': slave_instance.getTitle(), 'slave_title': slave_instance.getTitle().decode("UTF-8"),
'slap_software_type': slave_instance.getSourceReference(), 'slap_software_type': \
slave_instance.getSourceReference().decode("UTF-8"),
'slave_reference': slave_instance.getReference(), 'slave_reference': slave_instance.getReference(),
'xml': slave_instance.getTextContent(), 'xml': slave_instance.getTextContent(),
'connection_xml': slave_instance.getConnectionXml(), 'connection_xml': slave_instance.getConnectionXml(),
...@@ -1326,10 +1337,14 @@ class SlapTool(BaseTool): ...@@ -1326,10 +1337,14 @@ class SlapTool(BaseTool):
'instance_guid': software_instance.getReference(), 'instance_guid': software_instance.getReference(),
'xml': software_instance.getTextContent(), 'xml': software_instance.getTextContent(),
'connection_xml': software_instance.getConnectionXml(), 'connection_xml': software_instance.getConnectionXml(),
'slap_computer_id': computer_partition.getParentValue().getReference(), 'slap_computer_id': \
'slap_computer_partition_id': computer_partition.getReference(), computer_partition.getParentValue().getReference().decode("UTF-8"),
'slap_software_type': software_instance.getSourceReference(), 'slap_computer_partition_id': \
'slap_software_release_url': software_instance.getUrlString(), computer_partition.getReference().decode("UTF-8"),
'slap_software_type': \
software_instance.getSourceReference().decode("UTF-8"),
'slap_software_release_url': \
software_instance.getUrlString().decode("UTF-8"),
'slave_instance_list': slave_instance_list, 'slave_instance_list': slave_instance_list,
'ip_list': ip_list, 'ip_list': ip_list,
'timestamp': "%i" % timestamp, 'timestamp': "%i" % timestamp,
...@@ -1348,8 +1363,10 @@ class SlapTool(BaseTool): ...@@ -1348,8 +1363,10 @@ class SlapTool(BaseTool):
): ):
software_installation = _assertACI(software_installation.getObject()) software_installation = _assertACI(software_installation.getObject())
software_release_response = SoftwareRelease( software_release_response = SoftwareRelease(
software_release=software_installation.getUrlString(), software_release=software_installation.getUrlString().decode('UTF-8'),
computer_guid=computer_reference) computer_guid=computer_reference.decode('UTF-8'))
software_release_response._software_release = \
software_release_response._software_release.decode("UTF-8")
if software_installation.getSlapState() == 'destroy_requested': if software_installation.getSlapState() == 'destroy_requested':
software_release_response._requested_state = 'destroyed' software_release_response._requested_state = 'destroyed'
else: else:
......
...@@ -25,6 +25,6 @@ alias = ...@@ -25,6 +25,6 @@ alias =
opengoo http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.158:/software/opengoo/software.cfg opengoo http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.158:/software/opengoo/software.cfg
postgresql http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.157:/software/postgres/software.cfg postgresql http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.157:/software/postgres/software.cfg
slaposwebrunner http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.160:/software/slaprunner/software.cfg slaposwebrunner http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.160:/software/slaprunner/software.cfg
wordpress http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.153:/software/wordpress/software.cfg wordpress http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.163:/software/wordpress/software.cfg
xwiki http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.46:/software/xwiki/software.cfg xwiki http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.46:/software/xwiki/software.cfg
zabbixagent http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.162:/software/zabbix-agent/software.cfg zabbixagent http://git.erp5.org/gitweb/slapos.git/blob_plain/refs/tags/slapos-0.162:/software/zabbix-agent/software.cfg
...@@ -163,7 +163,7 @@ def upload_network_cached(software_root, software_url, cached_key, ...@@ -163,7 +163,7 @@ def upload_network_cached(software_root, software_url, cached_key,
try: try:
return nc.upload_generic(f, cached_key, **kw) return nc.upload_generic(f, cached_key, **kw)
except (IOError, UploadError), e: except (IOError, UploadError), e:
logger.info('Fail to upload file. %s' % (str(e))) logger.info('Failed to upload file. %s' % (str(e)))
return False return False
finally: finally:
f.close() f.close()
......
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