def test_crt_cluster_ssp(self, mock_adp, mock_status, mock_monitor_job, mock_del_job): # Load up GET Cluster/do/Create (job template) mock_adp.read.return_value = tju.load_file(CREATE_CLUSTER, mock_adp) # We'll pretend the job ran and completed successfully mock_monitor_job.return_value = False mock_status.__get__ = mock.Mock( return_value=jwrap.JobStatus.COMPLETED_OK) # Mock Job.create_job to check job parameter values def create_job(job_el, entry_type, *args, **kwargs): self.assertEqual(entry_type, clust.Cluster.schema_type) job = jwrap.Job.wrap(ent.Entry({}, job_el, None)) param_vals = job._get_vals(u.xpath( 'JobParameters', 'JobParameter', 'ParameterValue')) self.assertEqual( param_vals[0], '<uom:Cluster xmlns:uom="http://www.ibm.com/xmlns/systems/powe' 'r/firmware/uom/mc/2012_10/" schemaVersion="V1_0"><uom:Metadat' 'a><uom:Atom/></uom:Metadata><uom:ClusterName>clust_name</uom:' 'ClusterName><uom:RepositoryDisk schemaVersion="V1_0"><uom:Phy' 'sicalVolume schemaVersion="V1_0"><uom:Metadata><uom:Atom/></u' 'om:Metadata><uom:VolumeName>repos_pv_name</uom:VolumeName></u' 'om:PhysicalVolume></uom:RepositoryDisk><uom:Node schemaVersio' 'n="V1_0"><uom:Node schemaVersion="V1_0"><uom:Metadata><uom:At' 'om/></uom:Metadata><uom:HostName>vios1</uom:HostName><uom:Par' 'titionID>5</uom:PartitionID><uom:MachineTypeModelAndSerialNum' 'ber schemaVersion="V1_0"><uom:Metadata><uom:Atom/></uom:Metad' 'ata><uom:MachineType>XXXX</uom:MachineType><uom:Model>YYY</uo' 'm:Model><uom:SerialNumber>ZZZZZZZ</uom:SerialNumber></uom:Mac' 'hineTypeModelAndSerialNumber><uom:VirtualIOServer href="https' '://a.example.com:12443/rest/api/uom/VirtualIOServer/12345678-' '1234-1234-1234-123456789012" rel="related"/></uom:Node></uom:' 'Node></uom:Cluster>') self.assertEqual( param_vals[1], '<uom:SharedStoragePool xmlns:uom="http://www.ibm.com/xmlns/sy' 'stems/power/firmware/uom/mc/2012_10/" schemaVersion="V1_0"><u' 'om:Metadata><uom:Atom/></uom:Metadata><uom:PhysicalVolumes sc' 'hemaVersion="V1_0"><uom:PhysicalVolume schemaVersion="V1_0"><' 'uom:Metadata><uom:Atom/></uom:Metadata><uom:VolumeName>hdisk1' '</uom:VolumeName></uom:PhysicalVolume><uom:PhysicalVolume sch' 'emaVersion="V1_0"><uom:Metadata><uom:Atom/></uom:Metadata><uo' 'm:VolumeName>hdisk2</uom:VolumeName></uom:PhysicalVolume><uom' ':PhysicalVolume schemaVersion="V1_0"><uom:Metadata><uom:Atom/' '></uom:Metadata><uom:VolumeName>hdisk3</uom:VolumeName></uom:' 'PhysicalVolume></uom:PhysicalVolumes><uom:StoragePoolName>ssp' '_name</uom:StoragePoolName></uom:SharedStoragePool>') return mock.MagicMock() mock_adp.create_job.side_effect = create_job node = clust.Node.bld( mock_adp, hostname='vios1', lpar_id=5, mtms='XXXX-YYY*ZZZZZZZ', vios_uri='https://a.example.com:12443/rest/api/uom/VirtualIOServe' 'r/12345678-1234-1234-1234-123456789012') repos = stor.PV.bld(mock_adp, name='repos_pv_name') data = [stor.PV.bld(mock_adp, name=n) for n in ( 'hdisk1', 'hdisk2', 'hdisk3')] cs.crt_cluster_ssp('clust_name', 'ssp_name', repos, node, data) # run_job() should run delete_job() at the end self.assertEqual(mock_del_job.call_count, 1)
DATA2_NAME = 'hdisk4' DATA3_UDID = '01M0lCTTIxNDUxMjQ2MDA1MDc2ODAyODI4NjFEODgwMDAwMDAwMDAwMDAwNQ==' DATA3_NAME = 'hdisk5' # <<<Replace the foregoing with real values<<< sess = adp.Session(HOST, USER, PASS, certpath=None) adap = adp.Adapter(sess) # Option 1: MTMS, LPAR_ID, Hostname node1 = clust.Node.bld(adap, hostname=NODE_HOSTNAME, mtms=NODE_MTMS, lpar_id=NODE_LPARID) # Option 2: URI node2 = clust.Node.bld(adap, vios_uri=NODE_URI) repos = stor.PV.bld(adap, udid=REPOS_UDID, name=REPOS_NAME) data_pvs = [ stor.PV.bld(adap, udid=udid, name=name) for udid, name in ((DATA1_UDID, DATA1_NAME), (DATA2_UDID, DATA2_NAME), (DATA3_UDID, DATA3_NAME)) ] try: cs.crt_cluster_ssp('clust1', 'ssp1', repos, node1, data_pvs) except ex.JobRequestFailed as e: print(six.text_type(e)) adap = None
def test_crt_cluster_ssp(self, mock_adp, mock_status, mock_monitor_job, mock_del_job): # Load up GET Cluster/do/Create (job template) mock_adp.read.return_value = tju.load_file(CREATE_CLUSTER, mock_adp) # We'll pretend the job ran and completed successfully mock_monitor_job.return_value = False mock_status.__get__ = mock.Mock( return_value=jwrap.JobStatus.COMPLETED_OK) # Mock Job.create_job to check job parameter values def create_job(job_el, entry_type, *args, **kwargs): self.assertEqual(entry_type, clust.Cluster.schema_type) job = jwrap.Job.wrap(ent.Entry({}, job_el, None)) param_vals = job._get_vals( u.xpath('JobParameters', 'JobParameter', 'ParameterValue')) self.assertEqual( param_vals[0], '<uom:Cluster xmlns:uom="http://www.ibm.com/xmlns/systems/powe' 'r/firmware/uom/mc/2012_10/" schemaVersion="V1_0"><uom:Metadat' 'a><uom:Atom/></uom:Metadata><uom:ClusterName>clust_name</uom:' 'ClusterName><uom:RepositoryDisk schemaVersion="V1_0"><uom:Phy' 'sicalVolume schemaVersion="V1_0"><uom:Metadata><uom:Atom/></u' 'om:Metadata><uom:VolumeName>repos_pv_name</uom:VolumeName></u' 'om:PhysicalVolume></uom:RepositoryDisk><uom:Node schemaVersio' 'n="V1_0"><uom:Node schemaVersion="V1_0"><uom:Metadata><uom:At' 'om/></uom:Metadata><uom:HostName>vios1</uom:HostName><uom:Par' 'titionID>5</uom:PartitionID><uom:MachineTypeModelAndSerialNum' 'ber schemaVersion="V1_0"><uom:Metadata><uom:Atom/></uom:Metad' 'ata><uom:MachineType>XXXX</uom:MachineType><uom:Model>YYY</uo' 'm:Model><uom:SerialNumber>ZZZZZZZ</uom:SerialNumber></uom:Mac' 'hineTypeModelAndSerialNumber><uom:VirtualIOServer href="https' '://a.example.com:12443/rest/api/uom/VirtualIOServer/12345678-' '1234-1234-1234-123456789012" rel="related"/></uom:Node></uom:' 'Node></uom:Cluster>') self.assertEqual( param_vals[1], '<uom:SharedStoragePool xmlns:uom="http://www.ibm.com/xmlns/sy' 'stems/power/firmware/uom/mc/2012_10/" schemaVersion="V1_0"><u' 'om:Metadata><uom:Atom/></uom:Metadata><uom:PhysicalVolumes sc' 'hemaVersion="V1_0"><uom:PhysicalVolume schemaVersion="V1_0"><' 'uom:Metadata><uom:Atom/></uom:Metadata><uom:VolumeName>hdisk1' '</uom:VolumeName></uom:PhysicalVolume><uom:PhysicalVolume sch' 'emaVersion="V1_0"><uom:Metadata><uom:Atom/></uom:Metadata><uo' 'm:VolumeName>hdisk2</uom:VolumeName></uom:PhysicalVolume><uom' ':PhysicalVolume schemaVersion="V1_0"><uom:Metadata><uom:Atom/' '></uom:Metadata><uom:VolumeName>hdisk3</uom:VolumeName></uom:' 'PhysicalVolume></uom:PhysicalVolumes><uom:StoragePoolName>ssp' '_name</uom:StoragePoolName></uom:SharedStoragePool>') return mock.MagicMock() mock_adp.create_job.side_effect = create_job node = clust.Node.bld( mock_adp, hostname='vios1', lpar_id=5, mtms='XXXX-YYY*ZZZZZZZ', vios_uri='https://a.example.com:12443/rest/api/uom/VirtualIOServe' 'r/12345678-1234-1234-1234-123456789012') repos = stor.PV.bld(mock_adp, name='repos_pv_name') data = [ stor.PV.bld(mock_adp, name=n) for n in ('hdisk1', 'hdisk2', 'hdisk3') ] cs.crt_cluster_ssp('clust_name', 'ssp_name', repos, node, data) # run_job() should run delete_job() at the end self.assertEqual(mock_del_job.call_count, 1)
DATA1_NAME = 'hdisk3' DATA2_UDID = '01M0lCTTIxNDUxMjQ2MDA1MDc2ODAyODI4NjFEODgwMDAwMDAwMDAwMDAwNA==' DATA2_NAME = 'hdisk4' DATA3_UDID = '01M0lCTTIxNDUxMjQ2MDA1MDc2ODAyODI4NjFEODgwMDAwMDAwMDAwMDAwNQ==' DATA3_NAME = 'hdisk5' # <<<Replace the foregoing with real values<<< sess = adp.Session(HOST, USER, PASS, certpath=None) adap = adp.Adapter(sess) # Option 1: MTMS, LPAR_ID, Hostname node1 = clust.Node.bld(adap, hostname=NODE_HOSTNAME, mtms=NODE_MTMS, lpar_id=NODE_LPARID) # Option 2: URI node2 = clust.Node.bld(adap, vios_uri=NODE_URI) repos = stor.PV.bld(adap, udid=REPOS_UDID, name=REPOS_NAME) data_pvs = [ stor.PV.bld(adap, udid=udid, name=name) for udid, name in ( (DATA1_UDID, DATA1_NAME), (DATA2_UDID, DATA2_NAME), (DATA3_UDID, DATA3_NAME))] try: cs.crt_cluster_ssp('clust1', 'ssp1', repos, node1, data_pvs) except ex.JobRequestFailed as e: print(six.text_type(e)) adap = None