Eliminate hard coding about ipmi info 57/41057/2
authorAlex Yang <yangyang1@zte.com.cn>
Tue, 5 Sep 2017 09:32:23 +0000 (17:32 +0800)
committerAlex Yang <yangyang1@zte.com.cn>
Wed, 6 Sep 2017 02:08:28 +0000 (10:08 +0800)
1. Eliminate hard coding
2. Add ipmi info in schemas
3. Add unit test

Change-Id: I4561bbc9454e02fd1de2106645db341a4129245b
Signed-off-by: Alex Yang <yangyang1@zte.com.cn>
deploy/config/schemas.py
deploy/environment.py
tests/data/lab_conf/deploy_baremetal.yml [new file with mode: 0644]
tests/unit/config/test_schemas.py

index 3096d01..0e013eb 100644 (file)
@@ -7,6 +7,7 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 
+import copy
 from jsonschema import Draft4Validator, FormatChecker
 import sys
 import yaml
@@ -73,6 +74,10 @@ deploy_schema = {
     'required': ['hosts', 'daisy_passwd', 'daisy_gateway']
 }
 
+deploy_schema_bm = copy.deepcopy(deploy_schema)
+deploy_schema_bm['properties']['hosts']['items']['required'] = \
+    ['roles', 'ipmi_ip', 'ipmi_user', 'ipmi_pass']
+
 
 def _validate(data, schema):
     v = Draft4Validator(schema, format_checker=FormatChecker())
@@ -80,15 +85,11 @@ def _validate(data, schema):
     return errors
 
 
-def item_validate(data, schema_type):
-    if schema_type not in schema_mapping:
-        return str('Schema Type %s does not exist' % schema_type)
-    else:
-        return _validate(data, schema_mapping.get(schema_type))
-
-
 def deploy_schema_validate(data):
-    return _validate(data, deploy_schema)
+    if data.get('adapter', 'libvirt') == 'ipmi':
+        return _validate(data, deploy_schema_bm)
+    else:
+        return _validate(data, deploy_schema)
 
 
 def _main():
index dd9e014..5371e6c 100644 (file)
@@ -147,17 +147,15 @@ class BareMetalEnvironment(DaisyEnvironmentBase):
                   disks=[self.daisy_server_info['image']])
 
     def reboot_nodes(self, boot_dev=None):
-        # TODO: add ipmi info into deploy.yml, or read from PDF
-        address = 106
         for node in self.deploy_struct['hosts']:
-            node['ipmiIp'] = '192.168.1.' + str(address)
-            address += 1
-            if address > 111:
-                err_exit('the ipmi address exceeds the range 106~110')
-            node['ipmiUser'] = 'zteroot'
-            node['ipmiPass'] = 'superuser'
-            ipmi_reboot_node(node['ipmiIp'], node['ipmiUser'],
-                             node['ipmiPass'], boot_source=boot_dev)
+            if 'ipmi_ip' not in node \
+                    or 'ipmi_user' not in node \
+                    or 'ipmi_pass' not in node:
+                err_exit('Missing ipmi information')
+            ipmi_reboot_node(node['ipmi_ip'],
+                             node['ipmi_user'],
+                             node['ipmi_pass'],
+                             boot_source=boot_dev)
 
     def deploy(self, deploy_file, net_file):
         self.server.prepare_cluster(deploy_file, net_file)
diff --git a/tests/data/lab_conf/deploy_baremetal.yml b/tests/data/lab_conf/deploy_baremetal.yml
new file mode 100644 (file)
index 0000000..8f9b264
--- /dev/null
@@ -0,0 +1,38 @@
+adapter: 'ipmi'
+hosts:
+- name: 'controller01'
+  roles:
+    - 'CONTROLLER_LB'
+  ipmi_ip: '192.168.1.11'
+  ipmi_user: 'testuser'
+  ipmi_pass: 'testpass'
+- name: 'controller02'
+  roles:
+    - 'CONTROLLER_LB'
+  ipmi_ip: '192.168.1.12'
+  ipmi_user: 'testuser'
+  ipmi_pass: 'testpass'
+- name: 'controller03'
+  roles:
+    - 'CONTROLLER_LB'
+  ipmi_ip: '192.168.1.13'
+  ipmi_user: 'testuser'
+  ipmi_pass: 'testpass'
+- name: 'computer01'
+  roles:
+    - 'COMPUTER'
+  ipmi_ip: '192.168.1.14'
+  ipmi_user: 'testuser'
+  ipmi_pass: 'testpass'
+- name: 'computer02'
+  roles:
+    - 'COMPUTER'
+  ipmi_ip: '192.168.1.15'
+  ipmi_user: 'testuser'
+  ipmi_pass: 'testpass'
+disks:
+  daisy: 50
+daisy_passwd: 'r00tme'
+daisy_ip: '10.20.0.2'
+daisy_gateway: '10.20.0.1'
+ceph_disk_name: '/dev/sdb'
index 04705fd..7c7dab2 100644 (file)
@@ -23,7 +23,8 @@ def conf_file_dir(data_root):
 
 @pytest.mark.parametrize('deploy_file_name', [
     ('deploy_virtual1.yml'),
-    ('deploy_virtual_error.yml')])
+    ('deploy_virtual_error.yml'),
+    ('deploy_baremetal.yml')])
 def test_deploy_schema_validate(conf_file_dir, deploy_file_name):
     data = yaml.safe_load(open(os.path.join(conf_file_dir, deploy_file_name), 'r'))
     errors = deploy_schema_validate(data)
@@ -31,3 +32,5 @@ def test_deploy_schema_validate(conf_file_dir, deploy_file_name):
         assert errors == []
     elif deploy_file_name == 'deploy_virtual_error.yml':
         assert errors != []
+    elif deploy_file_name == 'deploy_baremetal.yml':
+        assert errors == []