Commit 68703f7a authored by Łukasz Nowak's avatar Łukasz Nowak

Merge branch 'master' into hostingwebsite

parents cb09bf79 f541513e
Changes
=======
0.20 (unreleased)
0.21 (unreleased)
-----------------
* No changes yet.
0.20 (2011-11-24)
-----------------
* slapgrid: Support service-less parttions. [Antoine Catton]
* slapgrid: Avoid gid collision while dropping privileges. [Antoine Catton]
* slapgrid: Drop down network usage during usage reporting. [Łukasz Nowak]
* general: Add sphinx documentation. [Romain Courteaud]
0.19 (2011-11-07)
-----------------
......
0.21
- have only one file with current version
- move more documentation to sphinx (for tools)
- cleanup pypi page formatting
......@@ -45,9 +45,9 @@ copyright = u'2011, Vifib'
# built documents.
#
# The short X.Y version.
version = '0.20-dev'
version = '0.21-dev'
# The full version, including alpha/beta/rc tags.
release = '0.20-dev'
release = '0.21-dev'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
......
85
\ No newline at end of file
86
\ No newline at end of file
......@@ -34,7 +34,38 @@ class TestVifibModuleSecurity(testVifibMixin):
"""
used_module_id_list = [
'accounting_module',
'account_module',
'campaign_module',
'component_module',
'currency_module',
'document_ingestion_module',
'document_module',
'event_module',
'image_module',
'internal_packing_list_module',
'inventory_module',
'knowledge_pad_module',
'meeting_module',
'notification_message_module',
'open_sale_order_module',
'organisation_module',
'person_module',
'product_module',
'purchase_order_module',
'purchase_packing_list_module',
'purchase_trade_condition_module',
'query_module',
'sale_opportunity_module',
'sale_order_module',
'sale_packing_list_module',
'sale_trade_condition_module',
'service_module',
'software_product_module',
'software_release_module',
'support_request_module',
'transformation_module',
'web_page_module',
'web_site_module',
]
......
......@@ -145,7 +145,6 @@ erp5_gadget
erp5_glossary
erp5_ingestion
erp5_ingestion_test
erp5_integration
erp5_invoicing
erp5_item
erp5_item_trade
......@@ -154,15 +153,12 @@ erp5_ods_core
erp5_odt_core
erp5_ooo_import
erp5_open_trade
erp5_payzen_secure_payment
erp5_pdm
erp5_project
erp5_project_trade
erp5_secure_payment
erp5_simplified_invoicing
erp5_simulation_test
erp5_software_pdm
erp5_system_event
erp5_tax_resource
erp5_toolbox
erp5_trade
......@@ -174,7 +170,6 @@ erp5_web_widget_library
erp5_xhtml_jquery_style
erp5_xhtml_style
external_method
vifib_payzen
Images
activity
zpt_content
......@@ -239,7 +234,6 @@ erp5_gadget
erp5_glossary
erp5_ingestion
erp5_ingestion_test
erp5_integration
erp5_invoicing
erp5_item
erp5_item_trade
......@@ -248,15 +242,12 @@ erp5_ods_core
erp5_odt_core
erp5_ooo_import
erp5_open_trade
erp5_payzen_secure_payment
erp5_pdm
erp5_project
erp5_project_trade
erp5_secure_payment
erp5_simplified_invoicing
erp5_simulation_test
erp5_software_pdm
erp5_system_event
erp5_tax_resource
erp5_toolbox
erp5_trade
......@@ -268,7 +259,6 @@ erp5_web_widget_library
erp5_xhtml_jquery_style
erp5_xhtml_style
external_method
vifib_payzen
Images
activity
zpt_content
......@@ -333,7 +323,6 @@ erp5_gadget
erp5_glossary
erp5_ingestion
erp5_ingestion_test
erp5_integration
erp5_invoicing
erp5_item
erp5_item_trade
......@@ -342,15 +331,12 @@ erp5_ods_core
erp5_odt_core
erp5_ooo_import
erp5_open_trade
erp5_payzen_secure_payment
erp5_pdm
erp5_project
erp5_project_trade
erp5_secure_payment
erp5_simplified_invoicing
erp5_simulation_test
erp5_software_pdm
erp5_system_event
erp5_tax_resource
erp5_toolbox
erp5_trade
......@@ -362,7 +348,6 @@ erp5_web_widget_library
erp5_xhtml_jquery_style
erp5_xhtml_style
external_method
vifib_payzen
Images
activity
zpt_content
......@@ -422,7 +407,6 @@ erp5_gadget
erp5_glossary
erp5_ingestion
erp5_ingestion_test
erp5_integration
erp5_invoicing
erp5_item
erp5_item_trade
......@@ -430,15 +414,12 @@ erp5_ods_core
erp5_odt_core
erp5_ooo_import
erp5_open_trade
erp5_payzen_secure_payment
erp5_pdm
erp5_project
erp5_project_trade
erp5_secure_payment
erp5_simplified_invoicing
erp5_simulation_test
erp5_software_pdm
erp5_system_event
erp5_tax_resource
erp5_toolbox
erp5_trade
......@@ -449,7 +430,6 @@ erp5_web_minimal_theme
erp5_web_widget_library
erp5_xhtml_jquery_style
external_method
vifib_payzen
Images
activity
zpt_content
......@@ -509,7 +489,6 @@ erp5_gadget
erp5_glossary
erp5_ingestion
erp5_ingestion_test
erp5_integration
erp5_invoicing
erp5_item
erp5_item_trade
......@@ -517,15 +496,12 @@ erp5_ods_core
erp5_odt_core
erp5_ooo_import
erp5_open_trade
erp5_payzen_secure_payment
erp5_pdm
erp5_project
erp5_project_trade
erp5_secure_payment
erp5_simplified_invoicing
erp5_simulation_test
erp5_software_pdm
erp5_system_event
erp5_tax_resource
erp5_toolbox
erp5_trade
......@@ -536,7 +512,6 @@ erp5_web_minimal_theme
erp5_web_widget_library
erp5_xhtml_jquery_style
external_method
vifib_payzen
Images
activity
zpt_content
......@@ -598,7 +573,6 @@ erp5_glossary
erp5_html_compatibility
erp5_ingestion
erp5_ingestion_test
erp5_integration
erp5_invoicing
erp5_item
erp5_item_trade
......@@ -607,15 +581,12 @@ erp5_ods_core
erp5_odt_core
erp5_ooo_import
erp5_open_trade
erp5_payzen_secure_payment
erp5_pdm
erp5_project
erp5_project_trade
erp5_secure_payment
erp5_simplified_invoicing
erp5_simulation_test
erp5_software_pdm
erp5_system_event
erp5_tax_resource
erp5_toolbox
erp5_trade
......@@ -627,7 +598,6 @@ erp5_web_widget_library
erp5_xhtml_jquery_style
erp5_xhtml_style
external_method
vifib_payzen
Images
activity
zpt_content
......@@ -688,7 +658,6 @@ erp5_gadget
erp5_glossary
erp5_ingestion
erp5_ingestion_test
erp5_integration
erp5_invoicing
erp5_item
erp5_item_trade
......@@ -698,15 +667,12 @@ erp5_ods_core
erp5_odt_core
erp5_ooo_import
erp5_open_trade
erp5_payzen_secure_payment
erp5_pdm
erp5_project
erp5_project_trade
erp5_secure_payment
erp5_simplified_invoicing
erp5_simulation_test
erp5_software_pdm
erp5_system_event
erp5_tax_resource
erp5_toolbox
erp5_trade
......@@ -718,7 +684,6 @@ erp5_web_widget_library
erp5_xhtml_jquery_style
erp5_xhtml_style
external_method
vifib_payzen
Images
activity
zpt_content
......@@ -778,7 +743,6 @@ erp5_gadget
erp5_glossary
erp5_ingestion
erp5_ingestion_test
erp5_integration
erp5_invoicing
erp5_item
erp5_item_trade
......@@ -786,15 +750,12 @@ erp5_ods_core
erp5_odt_core
erp5_ooo_import
erp5_open_trade
erp5_payzen_secure_payment
erp5_pdm
erp5_project
erp5_project_trade
erp5_secure_payment
erp5_simplified_invoicing
erp5_simulation_test
erp5_software_pdm
erp5_system_event
erp5_tax_resource
erp5_toolbox
erp5_trade
......@@ -805,7 +766,6 @@ erp5_web_minimal_theme
erp5_web_widget_library
erp5_xhtml_jquery_style
external_method
vifib_payzen
Images
activity
zpt_content
......@@ -865,7 +825,6 @@ erp5_gadget
erp5_glossary
erp5_ingestion
erp5_ingestion_test
erp5_integration
erp5_invoicing
erp5_item
erp5_item_trade
......@@ -873,15 +832,12 @@ erp5_ods_core
erp5_odt_core
erp5_ooo_import
erp5_open_trade
erp5_payzen_secure_payment
erp5_pdm
erp5_project
erp5_project_trade
erp5_secure_payment
erp5_simplified_invoicing
erp5_simulation_test
erp5_software_pdm
erp5_system_event
erp5_tax_resource
erp5_toolbox
erp5_trade
......@@ -893,7 +849,6 @@ erp5_web_widget_library
erp5_xhtml_jquery_style
erp5_xhtml_style
external_method
vifib_payzen
Images
activity
zpt_content
......
......@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
import glob
import os
version = '0.20-dev'
version = '0.21-dev'
name = 'slapos.core'
long_description = open("README.txt").read() + "\n" + \
open("CHANGES.txt").read() + "\n"
......
......@@ -282,6 +282,10 @@ class Slapgrid(object):
""" Main class for SlapGrid. Fetches and processes informations from master
server and pushes usage information to master server.
"""
class PromiseError(Exception):
pass
def __init__(self,
software_root,
instance_root,
......@@ -422,6 +426,59 @@ class Slapgrid(object):
launchSupervisord(self.supervisord_socket,
self.supervisord_configuration_path)
def _checkPromises(self, computer_partition):
self.logger.info("Checking promises...")
instance_path = os.path.join(self.instance_root,
computer_partition.getId())
uid, gid = None, None
stat_info = os.stat(instance_path)
#stat sys call to get statistics informations
uid = stat_info.st_uid
gid = stat_info.st_gid
promise_present = False
# Get the list of promises
promise_dir = os.path.join(instance_path, 'etc', 'promise')
if os.path.exists(promise_dir) and os.path.isdir(promise_dir):
cwd = instance_path
promises_list = os.listdir(promise_dir)
# Check whether every promise is kept
for promise in promises_list:
promise_present = True
command = [os.path.join(promise_dir, promise)]
promise = os.path.basename(command[0])
self.logger.info("Checking promise %r.", promise)
kw = dict(stdout=subprocess.PIPE, stderr=subprocess.PIPE)
process_handler = SlapPopen(command,
preexec_fn=lambda: dropPrivileges(uid, gid),
cwd=cwd,
env={}, **kw)
time.sleep(self.promise_timeout)
if process_handler.poll() is None:
process_handler.kill()
raise Slapgrid.PromiseError("The promise %r timed out" % promise)
elif process_handler.poll() != 0:
stderr = process_handler.communicate()[1]
if stderr is None:
stderr = 'No error output from %r.' % promise
else:
stderr = 'Promise %r:' % promise + stderr
raise Slapgrid.PromiseError(stderr)
if not promise_present:
self.logger.info("No promise.")
def processComputerPartitionList(self):
"""Will start supervisord and process each Computer Partition.
"""
......@@ -462,6 +519,7 @@ class Slapgrid(object):
local_partition.install()
computer_partition.available()
local_partition.start()
self._checkPromises(computer_partition)
computer_partition.started()
elif computer_partition_state == "stopped":
local_partition.install()
......@@ -504,54 +562,6 @@ class Slapgrid(object):
logger.error(exception)
computer_partition.error(exception)
# Promises
instance_path = os.path.join(self.instance_root,
computer_partition.getId())
uid, gid = None, None
stat_info = os.stat(instance_path)
#stat sys call to get statistics informations
uid = stat_info.st_uid
gid = stat_info.st_gid
# Get the list of promises
promise_dir = os.path.join(instance_path, 'etc', 'promise')
if os.path.exists(promise_dir) and os.path.isdir(promise_dir):
cwd = instance_path
promises_list = os.listdir(promise_dir)
# Check whether every promise is kept
for promise in promises_list:
command = os.path.join(promise_dir, promise)
kw = dict()
if not self.console:
kw.update(stdout=subprocess.PIPE, stderr=subprocess.PIPE)
process_handler = SlapPopen(command,
preexec_fn=lambda: dropPrivileges(uid, gid),
cwd=cwd,
env=None, **kw)
time.sleep(self.promise_timeout)
promise = os.path.basename(command)
if process_handler.poll() is None:
process_handler.kill()
computer_partition.error("The promise %r timed out" % promise)
clean_run = False
elif process_handler.poll() != 0:
stderr = process_handler.communicate()[1]
if stderr is None:
stderr = 'No error output from %r.' % promise
computer_partition.error(stderr)
clean_run = False
logger.info("Finished computer partitions...")
return clean_run
......
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