Statistics
| Branch: | Tag: | Revision:

root / doc / rapi.sgml @ 4e5a68f8

History | View | Annotate | Download (2.8 kB)

1
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.2//EN" [
2
<!ENTITY JsonLink "http://www.json.org/">
3
<!ENTITY WikipediaRESTLink
4
  "http://en.wikipedia.org/wiki/Representational_State_Transfer">
5
]>
6
<article class="specification">
7
<articleinfo>
8
  <title>Ganeti remote API</title>
9
</articleinfo>
10

    
11
<para>Documents Ganeti version 1.2</para>
12

    
13
<sect1>
14
  <title>Introduction</title>
15

    
16
  <para>Ganeti supports a remote API for enable external tools to easily
17
    retrieve information about a cluster's state. The remote API daemon,
18
    <computeroutput>ganeti-rapi</computeroutput>, is automatically started on
19
    the master node if the <computeroutput>--enable-rapi</computeroutput>
20
    parameter is passed to the <computeroutput>configure</computeroutput>
21
    script. Alternatively you can start it manually. By default it runs on TCP
22
    port 5080, but this can be changed either in
23
    <filename>&hellip;/constants.py</filename> or via the command line
24
    parameter <computeroutput>-p</computeroutput>. SSL support can also be
25
    enabled by passing command line parameters.</para>
26

    
27
  <note>
28
    <para>Ganeti 1.2 only supports a limited set of calls, all of them
29
      read-only. The next major version will have support for write
30
      operations.</para>
31
  </note>
32
</sect1>
33

    
34
<sect1>
35
  <title>Protocol</title>
36

    
37
  <para>The protocol used is <ulink url="&JsonLink;">JSON</ulink> over HTTP
38
    designed after the <ulink url="&WikipediaRESTLink;">REST</ulink> principle.
39
  </para>
40
</sect1>
41

    
42
<sect1>
43
  <title>Usage examples</title>
44

    
45
  <para>You can access the API using your favorite programming language as long
46
    as it supports network connections.</para>
47

    
48
  <sect2>
49
    <title>Shell</title>
50
    <screen>wget -q -O - http://<replaceable>CLUSTERNAME</replaceable>:5080/info</screen>
51
  </sect2>
52

    
53
  <sect2>
54
    <title>Python</title>
55
    <screen>import urllib2
56
f = urllib2.urlopen('http://<replaceable>CLUSTERNAME</replaceable>:5080/info')
57
print f.read()</screen>
58
  </sect2>
59

    
60
  <sect2>
61
    <title>JavaScript</title>
62
    <note>
63
      <para>While it's possible to use JavaScript, it poses several potential
64
        problems, including browser blocking request due to non-standard ports
65
        or different domain names. Fetching the data on the webserver is
66
        easier.</para>
67
    </note>
68
    <screen>var url = 'http://<replaceable>CLUSTERNAME</replaceable>:5080/info';
69
var info;
70

    
71
var xmlreq = new XMLHttpRequest();
72
xmlreq.onreadystatechange = function () {
73
  if (xmlreq.readyState != 4) return;
74
  if (xmlreq.status == 200) {
75
    info = eval("(" + xmlreq.responseText + ")");
76
    alert(info);
77
  } else {
78
    alert('Error fetching cluster info');
79
  }
80
  xmlreq = null;
81
};
82
xmlreq.open('GET', url, true);
83
xmlreq.send(null);</screen>
84
  </sect2>
85

    
86
</sect1>
87

    
88
<sect1>
89
  <title>Resources</title>
90
  @INCLUDE_RAPI_RESOURCES@
91
</sect1>
92

    
93
</article>