A házi feladatomban Linux-ról kell elérnem ESXi szervert és onnan wsman protokoll segítségével adatokat lekérdeznem.
Ehhez az alábbi parancsot használom:
wsman -h 10.6.17.142 -u cimtar -p jelszo --auth basic --port 8889 enumerate 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_PCIDevice' --dialect="http://schemas.dmtf.org/wbem/cql/1/dsp0202.pdf" --filter="SELECT DeviceID, ElementName, BusNumber, VendorID FROM VMware_PCIBridge"
Ez a parancs önállóan lefuttatva jól működik. A problémám az, hogy Python-ban a subprocess.check_output-ba ágyazva nem működik az alábbi módon:
CQLString="SELECT DeviceID, ElementName, BusNumber, VendorID FROM VMware_PCIBridge"
PCIDevicesData = subprocess.check_output(["wsman",
"-h", actualMachine["machineName"],
"-u", actualMachine["user"],
"-p", actualMachine["password"],
"--auth", "basic",
"--port", actualMachine["port"],
"enumerate", "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_PCIDevice",
'--dialect="http://schemas.dmtf.org/wbem/cql/1/dsp0202.pdf"',
'--filter',
CQLString
],
universal_newlines=True
)
A hibaüzenet:
Connection failed. response code = 400
Traceback (most recent call last):
File "./getPCIDevices.py", line 54, in <module>
universal_newlines=True
File "/usr/lib/python3.3/subprocess.py", line 586, in check_output
raise CalledProcessError(retcode, process.args, output=output)
subprocess.CalledProcessError: Command '['wsman', '-h', '10.6.17.101', '-u', 'cimtar', '-p', 'jelszo', '--auth', 'basic', '--port', '8889', 'enumerate', 'http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/CIM_PCIDevice', '--dialect="http://schemas.dmtf.org/wbem/cql/1/dsp0202.pdf"', '--filter', 'SELECT DeviceID, ElementName, BusNumber, VendorID FROM VMware_PCIBridge']' returned non-zero exit status 1
Ha a CQL szűrést kiveszem a parancsból, akkor visszakapom az eszközök összes attribútumát, ami nagyrészt a feladat szempontjából felesleges adatokat tartalmaz.
Hogyan lehetne ezt megoldani?