Как получить файл с сервера в кластере в Vsphere с помощью pyVmomi на удаленный (хост) компьютер

Я могу выполнить команду внутри сервера, но я хочу получить этот вывод на своем локальном компьютере. Я не хочу использовать ключи ssh. Я хочу использовать только имя пользователя и пароль хоста, а также имя пользователя и пароль vm (сервера). Я не смог найти прямого метода для получения вывода оболочки сервера на моем компьютере, но этот метод кажется наполовину выполненным, например, сгенерировать и сохранить вывод на сервере, а затем получить файл с сервера. Мне трудно получить файл (sample.txt) с сервера на локальный хост (ПК).

[EDIT: я могу сделать это, используя метод via (сохранить вывод на сервер, а затем вернуть его на локальный компьютер, есть ли прямой метод?)]

from pyVim import connect
from config import *
from pyVmomi import vim, vmodl
import ssl

service_instance = connect.SmartConnect(host="yyyyyyy", port=some_number,user="xxx" , pwd=pwd,sslContext=ssl._create_unverified_context())
content = service_instance.RetrieveContent()

vm = searcher.FindByIp(ip="zzzzzz", vmSearch=True)

creds = vim.vm.guest.NamePasswordAuthentication(username='root', password=vmpwd)

pm = service_instance.content.guestOperationsManager.processManager

#checks python version and stores in sample.txt in server
ps = vim.vm.guest.ProcessManager.ProgramSpec(programPath='/usr/bin/python', arguments='--version  &> sample.txt') 
res = pm.StartProgramInGuest(vm, creds, ps)
print(res) #Prints pid

person mozilla_firefox    schedule 20.02.2020    source источник
comment
Я думаю, что единственный способ - сохранить файл, как вы указали в примере.txt, а затем получить файл с помощью модуля GuestFileManager.InitiateFileTransferFromGues. Дополнительная информация в этой теме github.com/vmware/pyvmomi-community-samples/issues /264   -  person Naggappan Ramukannan    schedule 20.02.2020
comment
Я смог это сделать. Но можно ли получить вывод непосредственно на мою консоль или сохранить в моем локальном каталоге, а не сохранять на сервере?   -  person mozilla_firefox    schedule 20.02.2020


Ответы (1)


Это делает работу, но я был бы признателен, если бы кто-нибудь знал, как напрямую получить вывод команды оболочки с сервера на мой локальный компьютер. Этот код создает файл с выводом cmd внутри сервера и копирует его на мой локальный компьютер.

from pyVim import connect
from config import *
from pyVmomi import vim, vmodl
import ssl
import os
import requests

service_instance = connect.SmartConnect(host="xxxx", port=aaa,user="yyy" , pwd=pwd,sslContext=ssl._create_unverified_context())

content = service_instance.RetrieveContent()

# # Find a VM
vm = searcher.FindByIp(ip="aaaa", vmSearch=True)

creds = vim.vm.guest.NamePasswordAuthentication(username='root', password=vmpwd)

pm = service_instance.content.guestOperationsManager.processManager


#executes and saves sample.txt into server
ps = vim.vm.guest.ProcessManager.ProgramSpec(programPath='/usr/bin/python', arguments='--version  &> sample.txt')
res = pm.StartProgramInGuest(vm, creds, ps)

dest="/Users/username/Desktop/vcenter/sample.txt" #My local pc

src="/root/sample.txt" #Server's directory
fti = content.guestOperationsManager.fileManager.InitiateFileTransferFromGuest(vm, creds, src)

resp=requests.get(fti.url, verify=False)

#Writes into file
with open(dest, 'wb') as f:
        f.write(resp.content)
person mozilla_firefox    schedule 20.02.2020
comment
Я не нашел объект searcher в скрипте. Вместо этого content.searchIndex работал у меня на месте. - person Gaurav Chaudhari; 22.01.2021