Bonjour,
Je souhaite faire fonctionner l'extension Vpshere datacollector d'ITOP pour un environnement OVH depuis un site distant. Sur le serveur ou se trouve l'extension j'arrive a intérrogé l'instance ovh via la commande curl -X GET '[URL du serveur Vsphere] -H 'vmware-api-session-id: [ID].
Est-ce qu'il existe dans les fichiers php ou du collecteur un paramètre ou je peux renseigner le "vmware-api-session-id" sans utiliser le login/mot de passe?
Cdt
De plus je dois passer via un proxy d'entreprise et je ne vois pas de paramètres pour configurer un proxy. Est-ce qu'il faut que fasse une variable d'environnement pour curl ?
Bonjour,
A ce jour, le collecteur vSphere utilise la librairie vmwarephp de Vadim Comanescu pour se connecter à vSphere et récupérer les informations pertinentes pour iTop. La doc ne mentionne pas ce point et nous n'avons pas invetigué s'il était possible de l'utiliser dans votre contexte et si oui comment...
Bonjour, petit retour d'expérience :
Au préalable, je me connecte sur mon instance OVH pour obtenir le vmware-api-session-id.
En curl via la commande suivante :
curl -x "monproxy:8002" -X GET 'https://instance_ov/api/vcenter/vm?vms=id-vm' -H 'vmware-api-session-id: xxxxxx',
--> ça fonctionne très bien
En utilisant stream_context dans un script php avec en paramètre le proxy et le vmware-api-session-id dans le header :
Array("method" => "GET", "timeout" => 20, "header" => "vmware-api-session-id: XXXXXXXXXXXXXXXXXX", "proxy" => "tcp://xxxxxxxxxxxxxxxx:8002", 'request_fulluri' => True /* without this option we get an HTTP error! */ ))); if ( $fp = fopen("https://xxxxxxx/api/vcenter/vm?vms=vm-154", 'r', false, $stream) ) { print "well done"; } ?>--> ça fonctionne bien aussi c'est ce qui est utiliser dans la libraire Vmwarephp.
J'ai donc modifier le code la libairie Vmwarephp pour prendre en compte les paramètres de proxy et de header (fichier /Vmwarephp/Factory/SoapClient.php) :
function make(\Vmwarephp\Vhost $vhost, $useExceptions = 1, $trace = 1) {
//$context = stream_context_get_default();
$stream_context = [
'http' => [
'proxy' => 'tcp://xxxxxxxxxxxxxxxxx:8002',
'request_fulluri' => true,
'header' => 'vmware-api-session-id: xxxxxxxxxxxxxxx'
],
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
]
];
$options = array(
'trace' => $trace,
'location' => $this->makeRequestsLocation($vhost),
'exceptions' => $useExceptions,
'connection_timeout' => 10,
'classmap' => $this->wsdlClassMapper->getClassMap(),
'features' => SOAP_SINGLE_ELEMENT_ARRAYS + SOAP_USE_XSI_ARRAY_TYPE,
//'stream_context' => $context,
'stream_context' => stream_context_create($stream_context)
);
Et ensuite, j'ai fait un test avec un simple script PHP :
register(); // Informations de connexion $host = 'xxxxxx.ovh.com'; $username = 'xxxx@xxx'; $password = 'xxx'; // Créer une instance de Vhost $vhost = new \Vmwarephp\Vhost($host, $username, $password); // Récupérer la liste des VM $vms = $vhost->findAllManagedObjects('VirtualMachine', 'all'); foreach ($vms as $vm) { echo "Nom de la VM: " . $vm->name . "\n"; echo "État de la VM: " . $vm->runtime->powerState . "\n"; echo "IP de la VM: " . $vm->guest->ipAddress . "\n"; echo "-------------------------\n"; } ?>--> ne fonctionne pas.
J'en conclus que le problème ne vient pas du collecteur ITOP, mais de l'instance OVH qui bloque l'URL (/sdk?) que doit utiliser la libraire Vmwarephp.
Je vais faire autrement, tant pis.
Bonjour,
Un grand merci pour ce retour ! Nous allons ajouter un mot à noter doc vSphere sur ce sujet.