From: Thierry Parmentelat Date: Mon, 14 Jan 2008 11:10:52 +0000 (+0000) Subject: support for nodegroups, several nodenetworks and related settings X-Git-Tag: 2008-02-11-last-vmware-support~170 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=e4470dea3961181dd485abf3dbe8263f0ddf2ced;p=tests.git support for nodegroups, several nodenetworks and related settings --- diff --git a/system/TestMain.py b/system/TestMain.py index b079031..8e89782 100755 --- a/system/TestMain.py +++ b/system/TestMain.py @@ -13,8 +13,8 @@ from TestNode import TestNode default_config = [ 'onelab' ] default_steps = ['uninstall','install','configure', 'start', 'store_keys', 'initscripts', - 'sites', 'nodes', 'slices', - 'bootcd', 'start_nodes', 'check_nodes', 'check_slices' ] + 'sites', 'nodes', 'slices', 'bootcd', + 'nodegroups', 'start_nodes', 'check_nodes', 'check_slices' ] other_steps = [ 'fresh_install', 'stop', 'install_vserver_create', 'install_vserver_native', 'clean_sites', 'clean_nodes', 'clean_slices', 'clean_keys', 'stop_nodes' , 'db_dump' , 'db_restore', diff --git a/system/TestNode.py b/system/TestNode.py index 5ebdba6..7924798 100644 --- a/system/TestNode.py +++ b/system/TestNode.py @@ -18,15 +18,36 @@ class TestNode: ownername = self.node_spec['owner'] user_spec = self.test_site.locate_user(ownername) test_user = TestUser(self.test_plc,self.test_site,user_spec) - auth = test_user.auth() + userauth = test_user.auth() utils.header("node %s created by user %s"%(self.name(),test_user.name())) - filter={'boot_state':'rins'} - self.test_plc.server.AddNode(auth, - self.test_site.site_spec['site_fields']['login_base'], - self.node_spec['node_fields']) - self.test_plc.server.AddNodeNetwork(auth,self.name(), + rootauth=self.test_plc.auth_root() + server = self.test_plc.server + server.AddNode(userauth, + self.test_site.site_spec['site_fields']['login_base'], + self.node_spec['node_fields']) + # create as reinstall to avoid user confirmation + server.UpdateNode(userauth, self.name(), {'boot_state':'rins'}) + # populate network interfaces - primary + server.AddNodeNetwork(userauth,self.name(), self.node_spec['network_fields']) - self.test_plc.server.UpdateNode(auth, self.name(), filter) + # populate network interfaces - others + if self.node_spec.has_key('extra_interfaces'): + for interface in self.node_spec['extra_interfaces']: + server.AddNodeNetwork(userauth,self.name(), + interface['network_fields']) + if interface.has_key('attributes'): + for (attribute,value) in interface['attributes'].iteritems(): + # locate node network + nn = server.GetNodeNetworks(userauth,{'ip':interface['network_fields']['ip']})[0] + nnid=nn['nodenetwork_id'] + # locate or create node network attribute type + try: + nnst = server.GetNodeNetworkSettingTypes(userauth,{'name':attribute})[0] + except: + nnst = server.AddNodeNetworkSettingType(rootauth,{'category':'test', + 'name':attribute}) + # attach value + server.AddNodeNetworkSetting(userauth,nnid,attribute,value) def delete_node (self): # uses the right auth as far as poss. @@ -84,5 +105,3 @@ class TestNode: def start_qemu (self, options): utils.header ("TestNode.start_qemu: not implemented yet") - - diff --git a/system/TestPlc.py b/system/TestPlc.py index e5e1012..42ccafc 100644 --- a/system/TestPlc.py +++ b/system/TestPlc.py @@ -239,6 +239,30 @@ class TestPlc: test_node.create_node () return True + # create nodegroups if needed, and populate + # no need for a clean_nodegroups if we are careful enough + def nodegroups (self, options): + # 1st pass to scan contents + groups_dict = {} + for site_spec in self.plc_spec['sites']: + test_site = TestSite (self,site_spec) + for node_spec in site_spec['nodes']: + test_node=TestNode (self,test_site,node_spec) + if node_spec.has_key('nodegroups'): + for nodegroupname in node_spec['nodegroups']: + if not groups_dict.has_key(nodegroupname): + groups_dict[nodegroupname]=[] + groups_dict[nodegroupname].append(test_node.name()) + auth=self.auth_root() + for (nodegroupname,group_nodes) in groups_dict.iteritems(): + try: + self.server.GetNodeGroups(auth,{'name':nodegroupname})[0] + except: + self.server.AddNodeGroup(auth,{'name':nodegroupname}) + for node in group_nodes: + self.server.AddNodeToNodeGroup(auth,node,nodegroupname) + return True + def bootcd (self, options): for site_spec in self.plc_spec['sites']: test_site = TestSite (self,site_spec) diff --git a/system/config_wifilab.py b/system/config_wifilab.py new file mode 100644 index 0000000..449f8ab --- /dev/null +++ b/system/config_wifilab.py @@ -0,0 +1,180 @@ +# a configuration module is expected: +# (*) to define a config method +# (*) that takes two arguments +# (**) the current set of plc_specs as output by the preceding config modules +# (**) TestMain options field +# (*) and that returns the new set of plc_specs + +onelab="one-lab.org" + +# use a model that contains "vmware" to get the node actually started +def nodes(): + return [ {'node_fields': {'hostname': 'wlab02.inria.fr', + 'model':'Dell Latitude 830'}, + 'owner' : 'pi', + 'nodegroups' : 'wireless', + 'network_fields': { 'method':'dhcp', + 'type' : 'ipv4', + 'ip':'138.96.250.162', + }, + 'extra_interfaces' : [ { 'network_fields' : + { 'method' : 'dhcp', + 'type' : 'ipv4', + 'ip' : '138.96.250.50' }, + 'attributes' : + { 'ssid' : 'guest-inria-sophia' }, + }, + ], + }, + ] + +def all_nodenames (): + return [ node['node_fields']['hostname'] for node in nodes()] + +def users (domain=onelab) : + return [ {'name' : 'pi', 'keynames' : [ 'key1' ], + 'user_fields' : {'first_name':'PI', 'last_name':'PI', + 'enabled':'True', + 'email':'fake-pi1@%s'%domain, + 'password':'testpi'}, + 'roles':['pi']}, + {'name' : 'tech', 'keynames' : [ 'key1' ], + 'user_fields' : {'first_name':'Tech', 'last_name':'Tech', + 'enabled':'true', + 'email':'fake-tech1@%s'%domain, + 'password':'testtech'}, + 'roles':['tech']}, + {'name':'user', 'keynames' : [ 'key1' ], + 'user_fields' : {'first_name':'User', 'last_name':'User', + 'enabled':'true', + 'email':'fake-user1@%s'%domain, + 'password':'testuser'}, + 'roles':['user']}, + {'name':'techuser', 'keynames' : [ 'key1' ], + 'user_fields' : {'first_name':'UserTech', 'last_name':'UserTech', + 'enabled':'true', + 'email':'fake-tech2@%s'%domain, + 'password':'testusertech'}, + 'roles':['tech','user']}, + {'name':'pitech', 'keynames' : [ 'key1' ], + 'user_fields' : {'first_name':'PiTech', + 'last_name':'PiTech', + 'enabled':'true', + 'email':'fake-pi2@%s'%domain, + 'password':'testusertech'}, + 'roles':['pi','tech']}, + ] + +def all_usernames (): + return [ user['name'] for user in users()] + +def sites (): + return [ {'site_fields' : {'name':'wifisite', + 'login_base':'wifi', + 'abbreviated_name':'wifi', + 'max_slices':100, + 'url':'http://onelab-test.inria.fr', + }, + 'address_fields' : {'line1':'route des lucioles', + 'city':'sophia', + 'state':'fr', + 'postalcode':'06902', + 'country':'france', + }, + 'users' : users(), + 'nodes': nodes(), + }] + +########## +public_key="""ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA4jNj8yT9ieEc6nSJz/ESu4fui9WrJ2y/MCfqIZ5WcdVKhBFUYyIenmUaeTduMcSqvoYRQ4QnFR1BFdLG8XR9D6FWZ5zTKUgpkew22EVNeqai4IXeWYKyt1Qf3ehaz9E3o1PG/bmQNIM6aQay6TD1Y4lqXI+eTVXVQev4K2fixySjFQpp9RB4UHbeA8c28yoa/cgAYHqCqlvm9uvpGMjgm/Qa4M+ZeO7NdjowfaF/wF4BQIzVFN9YRhvQ/d8WDz84B5Pr0J7pWpaX7EyC4bvdskxl6kmdNIwIRcIe4OcuIiX5Z9oO+7h/chsEVJWF4vqNIYlL9Zvyhnr0hLLhhuk2bw== root@test.one-lab.org +""" +private_key="""-----BEGIN RSA PRIVATE KEY----- +MIIEogIBAAKCAQEA4jNj8yT9ieEc6nSJz/ESu4fui9WrJ2y/MCfqIZ5WcdVKhBFU +YyIenmUaeTduMcSqvoYRQ4QnFR1BFdLG8XR9D6FWZ5zTKUgpkew22EVNeqai4IXe +WYKyt1Qf3ehaz9E3o1PG/bmQNIM6aQay6TD1Y4lqXI+eTVXVQev4K2fixySjFQpp +9RB4UHbeA8c28yoa/cgAYHqCqlvm9uvpGMjgm/Qa4M+ZeO7NdjowfaF/wF4BQIzV +FN9YRhvQ/d8WDz84B5Pr0J7pWpaX7EyC4bvdskxl6kmdNIwIRcIe4OcuIiX5Z9oO ++7h/chsEVJWF4vqNIYlL9Zvyhnr0hLLhhuk2bwIBIwKCAQATY32Yf4NyN93oNd/t +QIyTuzG0NuLI3W95J/4gI4PAnUDmv6glwRiRO92ynlnnAjqFW/LZ5sGFd4k8YoYU +sjaa8JJgpwrJBi9y6Fx47/9Tp+ITPqyoliyTXvtqysX0jkaY+I1mNHoTITDkbknZ +eTma0UOhiKcrMz4qOMwg+kajWsAhIplJXyf0Mio/XuyqjMT4wI/NyGZQ4bGuUjO7 +gj3p+9psOvONsRBW4MV27W5ts9c7HEXg+VJ2PSCEMs+uyzXcdnMJcTb4zQ/+tVxR +5IMeEuR9ZzDNkDtNF6Nnw5kYcTBNoayzZbUfjcuSmsMklMXr0qJ4qcW9/ONKgBQ9 +6qhDAoGBAPkvSYuF/bxwatEiUKyF97oGDe025h/58aqK1VBD5/BBVqqvbQOeNtR5 +/LerGfFa5D9Jm+6U97gDdq3tH0j95Mo0F00LWq2+vp7U4DTQsiddepzNdbcvSrzT +NVZ2cnOAlKTHO4hGggShm04n/M5LOzkHtI5TLcIJjw4b5iiIw9EtAoGBAOhjLTds +Zz8UbXVTeGv8yBGhnjAeHQ5WISN6V5KenB4GIyaYCCcQUOUGqc5nCttlnPLv/GHp +4DOJ2/0KbwDEwk7HbAtXG2Tv1OkmfcOq9RH19V9lyqynA+zvI6taisCEaMvBlafd +k+RgXsR+NdLs96RakKt4BtgpuuADoSIryQ+LAoGBAKremNSzpq0Z4tiMjxc3Ssiz +scc7lnxTnmZQkkWq6C+3xmZpqdaYYByra3ahNlxblTK2IcgroozPLM8I/4KCNnwG +dmC3VB9eOZF8B3SsXOfLEj+i1GBa8WuJg6kAw4JmzFO70Qz9JfSMErk//c9Jh7IT +6YYqaIUN3nATIXrhcFTrAoGAVlC5BfUQZ+MEFaKpEiqwthd1RRJ/0h/9rhd/nNvT +lh+JZhs2OmUlXGGPhy2WUX2DcC1AfCOrC9Qego7YxcVsvizQW/vIWLDaDXSyXp6V +ilQKrmejDO2Tvmdzpguv4Rs83fdyGcdUMEENQas4kCwhd49aTlEnHRbQYdV2XSY0 +vKECgYEAlhYzfSswIF2h5/hGDLETxgNJ2kD0HIZYh7aud6X6aEYNdJopbfbEhifU +vTbf8GtvERDoxWEsk9Qp7km8xXfKWdcZtqIwsSmn/ri5d7iyvpIk591YIHSY0dr2 +BO+VyPNWF+kDNI8mSUwi7jLW6liMdhNOmDaSX0+0X8CHtK898xM= +-----END RSA PRIVATE KEY----- +""" + +def keys (): + return [ {'name': 'key1', + 'private' : private_key, + 'key_fields' : {'key_type':'ssh', + 'key': public_key}} + ] + +def initscripts(): + return [ { 'initscript_fields' : { 'enabled' : True, + 'name':'script1', + 'script' : '#! /bin/sh\n (echo Starting test initscript: Stage 1; date) > /tmp/initscript1.log \n ', + }}, + { 'initscript_fields' : { 'enabled' : True, + 'name':'script2', + 'script' : '#! /bin/sh\n (echo Starting test initscript: Stage 2; date) > /tmp/initscript2.log \n ', + }}, + ] + +def slices (): + return [ { 'slice_fields': {'name':'wifi_slice1', + 'instantiation':'plc-instantiated', + 'url':'http://foo@foo.com', + 'description':'test slice', + 'max_nodes':2 + }, + 'usernames' : [ 'pi','tech','techuser' ], + 'nodenames' : all_nodenames(), + 'initscriptname' : 'script1', + 'sitename' : 'wifi', + 'owner' : 'pi', + }, + ] + +def plc () : + return { + 'name' : 'onelab', + # as of yet, not sure we can handle foreign hosts, but this is required though + 'hostname' : 'localhost', + # set these two items to run within a vserver + # 'vservername': '138.96.250.131' + # 'vserverip': '138.96.250.131' + 'role' : 'root', + 'PLC_ROOT_USER' : 'root@test.one-lab.org', + 'PLC_ROOT_PASSWORD' : 'test++', + 'PLC_NAME' : 'TestLab', + 'PLC_MAIL_ENABLED':'true', + 'PLC_MAIL_SUPPORT_ADDRESS' : 'mohamed-amine.chaoui@sophia.inria.fr', + 'PLC_DB_HOST' : 'test.one-lab.org', + 'PLC_API_HOST' : 'test.one-lab.org', + 'PLC_WWW_HOST' : 'test.one-lab.org', + 'PLC_BOOT_HOST' : 'test.one-lab.org', + 'PLC_NET_DNS1' : '138.96.0.10', + 'PLC_NET_DNS2' : '138.96.0.11', + 'sites' : sites(), + 'keys' : keys(), + 'initscripts': initscripts(), + 'slices' : slices(), + } + +def config (plc_specs,options): + return plc_specs + [ plc() ]