Difference between revisions of "XAPI Host Plugins"

From Xen
 
(4 intermediate revisions by 2 users not shown)
Line 3: Line 3:
 
"The XenAPI has an extension mechanism that allows one to install a Python script (usually, but it can be any executable) on the host side, and then call that through the XenAPI." - http://wiki.openstack.org/XenAPI
 
"The XenAPI has an extension mechanism that allows one to install a Python script (usually, but it can be any executable) on the host side, and then call that through the XenAPI." - http://wiki.openstack.org/XenAPI
   
  +
Writing a XenAPI plugin in Python is simplified by using the XenAPIPlugin module, which is by default installed in dom0 in XCP. Below is a simple XenAPI plugin which reverses a string passed to it:
[[Category:XCP]]
 
  +
[[Category:Openstack]]
 
  +
<pre>
  +
#!/usr/bin/python
  +
  +
import XenAPIPlugin
  +
  +
def main(session, args):
  +
try:
  +
data = args["data"]
  +
return data[::-1]
  +
except KeyError:
  +
raise RuntimeError("No argument found with key 'data'.")
  +
  +
if __name__ == "__main__":
  +
XenAPIPlugin.dispatch({"main": main})
  +
</pre>
  +
  +
Save this code to /etc/xapi.d/plugins/reverse and make it executable. The plugin can then be run from the CLI like so:
  +
  +
<pre>
  +
# xe host-call-plugin host-uuid=<host-uuid> plugin=reverse fn=main args:data="hello, world"
  +
dlrow ,olleh
  +
</pre>
  +
  +
[[Category:XAPI Devel]]
  +
[[Category:OpenStack]]

Latest revision as of 12:11, 11 July 2013

XAPI Host Plugins

"The XenAPI has an extension mechanism that allows one to install a Python script (usually, but it can be any executable) on the host side, and then call that through the XenAPI." - http://wiki.openstack.org/XenAPI

Writing a XenAPI plugin in Python is simplified by using the XenAPIPlugin module, which is by default installed in dom0 in XCP. Below is a simple XenAPI plugin which reverses a string passed to it:

#!/usr/bin/python

import XenAPIPlugin

def main(session, args):
    try:
        data = args["data"]
        return data[::-1]
    except KeyError:
        raise RuntimeError("No argument found with key 'data'.")

if __name__ == "__main__":
    XenAPIPlugin.dispatch({"main": main})

Save this code to /etc/xapi.d/plugins/reverse and make it executable. The plugin can then be run from the CLI like so:

# xe host-call-plugin host-uuid=<host-uuid> plugin=reverse fn=main args:data="hello, world"
dlrow ,olleh