2016-11-04 13 views
1

Мне нужно запустить сценарий через vsphere для определенных событий, скажем, если произошел сбой хоста ESXi. Требуется сделать это с помощью pyvmomi, предпочитают не опросить vcenter и скорее иметь сигнал тревоги, запускающий сценарий. http://www.vcritical.com/2009/10/powershell-prevents-datastore-emergencies/Как запустить скрипты Pyvmomi на основе аварийных сигналов vSphere на VCSA

Я смотрел на это, как хорошо https://pubs.vmware.com/vsphere-4-esx-vcenter/index.jsp#com.vmware.vsphere.dcadmin.doc_41/vc_client_help/working_with_alarms/c_running_commands_as_alarm_actions.html

Но я хотел бы знать, если мы можем достичь с помощью pyvmomi?

+0

Прежде чем я смог ответить, у меня возникло бы пару вопросов: 1) Какую версию vSphere вы бы использовали? 2) Будете ли вы использовать приложение vCenter Server или vCenter с коробкой Windows? –

+0

Спасибо. Также я новичок в vmware и до сих пор учился. 1. Мы будем работать с 5.5 и 6 2. Предпочитайте запуск с помощью Linux-машины, если возможно :) – jramacha

ответ

0

Первый отказ от ответственности: Не рекомендуется добавлять дополнительное программное обеспечение в VCSA, особенно то, что увеличило бы нагрузку на машину. Это не поддерживается VMWare, и это может привести к проблемам стабильности в вашем VCSA, поэтому сделайте это на свой страх и риск, и если вы беспокоитесь о проверке с вашей учетной записью VMWare, прежде чем вносить какие-либо изменения.

Это ... это возможно. Поскольку вы хотели бы сделать это, используя VCSA, который работает на ядре SLES Linux, это будет очень просто сделать, потому что на нем уже есть как Python, так и pyVmomi. Это также будет работать на 6.5 после его выхода, даже если базовая ОС изменится с SLES на Photon. Процесс, описанный ниже, будет работать в 5.5, 6.0 и 6.5 таким же образом.

  1. Написать скрипт, который вы хотите запустить, когда сигнал тревоги вы будете создавать триггеры, и поместить его на VCSA в /root Обязательно установите бит Казнь по сценарию с использованием chmod a+x script.py

  2. Создать тревогу в vCenter, которая соответствует условию, которое вы пытаетесь контролировать. Существующее определение сигнализации может существовать, но вам нужно будет создать свой собственный, поскольку вы не можете изменять аварийные сигналы по умолчанию.

  3. В области Действия для определения тревоги выберите «Запустить команду».

  4. В окне конфигурации поставьте полный путь к исполняемому скрипту, который вы хотите запустить. /root/script.py и сохраните будильник.

Теперь, когда срабатывает будильник, будет запущен ваш скрипт. Если у вас есть проблемы или вы думаете, что он не работает, вы можете найти файл журнала в VCSA, который может выделить, что может произойти: /var/log/vmware/vpxd/vpxd.log

Я создал очень грубый пример, чтобы показать вам, как начать работу с вашим скриптом.

#!/usr/bin/python 
# Copyright 2016 Michael Rice <[email protected]> 
# 
# Licensed under the Apache License, Version 2.0 (the "License"); 
# you may not use this file except in compliance with the License. 
# You may obtain a copy of the License at 
# 
#  http://www.apache.org/licenses/LICENSE-2.0 
# 
# Unless required by applicable law or agreed to in writing, software 
# distributed under the License is distributed on an "AS IS" BASIS, 
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
# See the License for the specific language governing permissions and 
# limitations under the License. 

from __future__ import print_function 
import os 
import ssl 
import sys 
import requests 

# This is where VMWare keeps the pyVmomi and other libraries 
sys.path.extend(os.environ['VMWARE_PYTHON_PATH'].split(';')) 

from pyVim import connect 
from pyVmomi import vim 
requests.packages.urllib3.disable_warnings() 
# this is to ignore SSL verification which is helpful for self signed certs 
try: 
    _create_unverified_https_context = ssl._create_unverified_context 
except AttributeError: 
    # Legacy Python that doesn't verify HTTPS certificates by default 
    pass 
else: 
    # Handle target environment that doesn't support HTTPS verification 
    ssl._create_default_https_context = _create_unverified_https_context 
USER_NAME = "YOUR USER" 
PASSWORD = "YOUR PASS" 
HOST = "YOUR HOST" 
PORT = "443" 
service_instance = connect.SmartConnect(host=HOST, 
             user=USER_NAME, 
             pwd=PASSWORD, 
             port=int(PORT)) 

root_folder = service_instance.content.rootFolder 
# again crude example here. use the logging module instead 
with open("/var/log/my_script_log_file.txt", 'a') as f: 
    print(root_folder.name, file=f) 
    for var, val in os.environ.items(): 
     # When an alarm is triggered and run a lot of environment variables are set. 
     # This will list them all with their values. 
     if var.startswith("VMWARE_ALARM"): 
      print("{} = {}".format(var, val), file=f) 
    print("##########", file=f) 
connect.Disconnect(service_instance) 
+0

Я принял это. Большое спасибо. Итак, если у нас нет доступа к VCSA, я должен запустить его из Vcenter (Windows machine)? – jramacha

+0

хорошо, похоже, что вы подняли свой вопрос и не приняли мой ответ. Также я спросил вас, прежде чем ответить на вопрос, если вы будете использовать Windows vcenter или серверное устройство vcenter, поэтому мой ответ будет за то, что вы сказали, что является VCSA. Для ящика с окнами этот процесс не тот. –

+0

Я не голосовал на свой вопрос :) Я не могу голосовать за свой пост :) У меня нет мощности, чтобы выбрать ответ.Он говорит, что когда вы достигнете 15 очков, я могу поддержать ответ или что-то в этом роде. – jramacha