/* -------------------------------------------------------------------------- */ /* Copyright 2002-2019, OpenNebula Project, OpenNebula Systems */ /* */ /* 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. */ /* -------------------------------------------------------------------------- */ #ifndef VIRTUAL_MACHINE_HOOK_H_ #define VIRTUAL_MACHINE_HOOK_H_ #include #include #include "Hook.h" #include "VirtualMachine.h" using namespace std; /** * This class is a general VM State Hook that executes a command locally or * remotelly when the VM gets into a given state (one shot). The VirtualMachine * object is looked when the hook is invoked. */ class VirtualMachineStateHook : public Hook { public: // ------------------------------------------------------------------------- // ------------------------------------------------------------------------- /** * Creates a VirtualMachineStateHook * @param name of the hook * @param cmd for the hook * @param args for the hook * @param _state the hook will be executed when the VM enters this state * @param remote the hook will be executed on the target resource */ VirtualMachineStateHook(const string& name, const string& cmd, const string& args, bool remote, VirtualMachine::LcmState _lcm, VirtualMachine::VmState _vm): Hook(name, cmd, args, Hook::UPDATE | Hook::ALLOCATE, remote), lcm(_lcm), vm(_vm){}; ~VirtualMachineStateHook(){}; // ------------------------------------------------------------------------- // Hook methods // ------------------------------------------------------------------------- void do_hook(void *arg); /** * Parses the arguments of the hook using: $ID, $TEMPLATE, $PREV_DM_STATE * and $PREV_LCM_STATE * @param obj pointer to the object executing the hook for * @param the resulting parser arguments */ void parse_hook_arguments(PoolObjectSQL * obj, VirtualMachine::VmState prev_dm, VirtualMachine::LcmState prev_lcm, string& parsed); private: /** * The target LCM state */ VirtualMachine::LcmState lcm; /** * The target DM state */ VirtualMachine::VmState vm; }; #endif