- 18 Aug, 2010 1 commit
-
-
Michael Hanselmann authored
Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
- 10 Aug, 2010 3 commits
-
-
Michael Hanselmann authored
Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
Michael Hanselmann authored
Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
Michael Hanselmann authored
With this patch, a new PycURL object will be created for each request. This should make the RAPI client safe for simultaneous calls from multiple threads. Unittests are adjusted accordingly. An unnecessary variable assignment is also removed from the unittest script. This patch survived a small QA and unittests. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
- 29 Jul, 2010 2 commits
-
-
David Knowles authored
Signed-off-by:
David Knowles <dknowles@google.com> Reviewed-by:
Michael Hanselmann <hansmi@google.com>
-
Michael Hanselmann authored
Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
- 23 Jul, 2010 1 commit
-
-
Iustin Pop authored
See the discussion on the previous patch about this. Basically unless we want to a add a new 'feature' marking for the live migration parameter, there is no simple way to handle this nicely in the client. Given that the client was/is marked as experimental, this patch simply replaces live with mode. This means that this client won't work with 2.1 clusters… Signed-off-by:
Iustin Pop <iustin@google.com> Reviewed-by:
René Nussbaumer <rn@google.com>
-
- 19 Jul, 2010 1 commit
-
-
Michael Hanselmann authored
If the body consists of an empty dict, it should also be encoded. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
- 13 Jul, 2010 1 commit
-
-
Michael Hanselmann authored
Commit 8a47b447 implemented instance creation in the RAPI client, but it left out support for the old instance creation request format. This patch now implements the old format as good as possible. This will only be used when talking to clusters before Ganeti 2.1.3. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
- 01 Jul, 2010 2 commits
-
-
Guido Trotter authored
In Python 2.6 the urllib2.HTTPBasicAuthHandler has a "retried" count for failed authentications. The handler fails after 5 of them. To solve this we reset the handler's "retried" member variable to 0 after every successful request. This is a bit ugly, but makes the client work again for more than 5 requests under all versions of Python. Note that the digest authentication handler has a reset_retry_count() method to do this, but the method is not defined for the basic authentication handler, so we must reset the variable itself. This member variable is unused in 2.4 and 2.5, so the change doesn't affect the client under older Python versions. Signed-off-by:
Guido Trotter <ultrotter@google.com> Reviewed-by:
Michael Hanselmann <hansmi@google.com>
-
Michael Hanselmann authored
Currently the RAPI client uses the urllib2 and httplib modules from Python's standard library. They're used with pyOpenSSL in a very fragile way, and there are known issues when receiving large responses from a RAPI server. By switching to PycURL we leverage the power and stability of the widely-used curl library (libcurl). This brings us much more flexibility than before, and timeouts were easily implemented (something that would have involved a lot of work with the built-in modules). There's one small drawback: Programs using libcurl have to call curl_global_init(3) (available as pycurl.global_init) while exactly one thread is running (e.g. before other threads) and are supposed to call curl_global_cleanup(3) (available as pycurl.global_cleanup) upon exiting. See the manpages for details. A decorator is provided to simplify this. Unittests for the new code are provided, increasing the test coverage of the RAPI client from 74% to 89%. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
- 23 Jun, 2010 1 commit
-
-
Iustin Pop authored
This patch removes the last use of the old-style OpEvacuateNode. It also fixes the dry-run mode for this RAPI resource - the dry-run parameter was not used at all before. Signed-off-by:
Iustin Pop <iustin@google.com> Reviewed-by:
Michael Hanselmann <hansmi@google.com>
-
- 17 Jun, 2010 2 commits
-
-
Michael Hanselmann authored
The httplib module used by urllib2 requires its sockets to have a makefile() method to provide a file-like interface (or rather file-in-Python-like) to the socket. PyOpenSSL doesn't implement makefile() as the semantics require files to call dup(2) on the underlying file descriptors, something not easily done on SSL sockets. Python up to and including 2.5 have a class to simulate makefile(), httplib.FakeSocket. With the addition of SSL support in Python 2.6, this class was deprecated and no longer functions. This patch adds a new, simpler wrapper class which is used in Python 2.6 and above only. It's good enough for this use. There are general problems in these generic wrapper classes--none of them handles SSL I/O properly. They break, for example, when the server requests a renegotiation. This will need more work. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
Michael Hanselmann authored
The httplib module used by urllib2 requires its sockets to have a makefile() method to provide a file-like interface (or rather file-in-Python-like) to the socket. PyOpenSSL doesn't implement makefile() as the semantics require files to call dup(2) on the underlying file descriptors, something not easily done on SSL sockets. Python up to and including 2.5 have a class to simulate makefile(), httplib.FakeSocket. With the addition of SSL support in Python 2.6, this class was deprecated and no longer functions. This patch adds a new, simpler wrapper class which is used in Python 2.6 and above only. It's good enough for this use. There are general problems in these generic wrapper classes--none of them handles SSL I/O properly. They break, for example, when the server requests a renegotiation. This will need more work. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
- 31 May, 2010 1 commit
-
-
Tom Limoncelli authored
Signed-off-by:
Tom Limoncelli <tlim@google.com> Reviewed-by:
Michael Hanselmann <hansmi@google.com>
-
- 18 May, 2010 2 commits
-
-
Michael Hanselmann authored
Two new resources are added: - /2/instances/$name/prepare-export - /2/instances/$name/export The documentation for the existing resource for creating instances is updated for remote imports. The RAPI client is extended for the new resources. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
Michael Hanselmann authored
This allows users of the RAPI client to catch GanetiApiError for all HTTP errors. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
- 17 May, 2010 2 commits
-
-
Michael Hanselmann authored
GetInstanceInfo should return the resource /2/instances/$name/info, but so far it returns /2/instances/$name. The same applies to GetNodeInfo, which returns /2/nodes/$name. Both names are stripped of their “Info” suffix and a new method, GetInstanceInfo, is added for /2/instances/$name/info. There's no equivalent for nodes. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
Michael Hanselmann authored
Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
- 13 May, 2010 3 commits
-
-
Michael Hanselmann authored
Currently this only supports the new instance creation request data format version 1, but support for the old version can be easily implemented. Most arguments are optional and documented in the RAPI documentation. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
Michael Hanselmann authored
Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
Michael Hanselmann authored
The /2/features RAPI resource can be used to detect optional features implemented by the RAPI server. This will be used to recognize servers implementing a new request format for instance creation requests. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
- 12 May, 2010 1 commit
-
-
Michael Hanselmann authored
My previous patch, commit 857705e8 , helped in one particular situation where the exception didn't contain any arguments (pyOpenSSL reporting a WantReadError, which shouldn't occur with a blocking socket anyway). With this patch, more common and uncommon errors should be easy to recognize. SSL errors without any of these patches: “ganeti.rapi.client.CertificateError: SSL issue: [('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')]” SSL errors with both patches: “ganeti.rapi.client.CertificateError: SSL issue: [('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')] (<OpenSSL.SSL.Error instance at 0x…>)” WantReadError without any of these two patches: “ganeti.rapi.client.CertificateError: SSL issue: ” WantReadError with both patches: “ganeti.rapi.client.CertificateError: SSL issue: (<OpenSSL.SSL.WantReadError instance at 0x…>)” Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
- 11 May, 2010 17 commits
-
-
Michael Hanselmann authored
Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
Michael Hanselmann authored
Only the server knows which node roles can be set via RAPI. Constants are provided for convenience. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
Michael Hanselmann authored
- The RAPI client shouldn't check the replacement mode as only the server knows which ones are valid (constants are still provided for convenience) - Disks shouldn't be a list of names, but of indexes Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
Michael Hanselmann authored
When modifying a storage unit, the “allocatable” flag should default to “no modification”. This replicates the behaviour of the command line interface. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
Michael Hanselmann authored
Boolean values must be passed as 0 or 1. None should be an empty value (""). Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
Michael Hanselmann authored
Only the RAPI server (actually masterd) knows which storage types are valid. The exception can no longer be raised as the type is only checked in the job. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
Michael Hanselmann authored
This reverts a60e3cb0 partially by moving the RAPI version into a constant. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Guido Trotter <ultrotter@google.com>
-
Michael Hanselmann authored
Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
David Knowles <dknowles@google.com>
-
Michael Hanselmann authored
Having the HTTP error code allows users of the class to act differently based on the error code. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
David Knowles <dknowles@google.com>
-
Michael Hanselmann authored
Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
Iustin Pop <iustin@google.com>
-
Michael Hanselmann authored
Jobs can't be deleted, but cancelled (even though the HTTP method “DELETE” is used). Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
David Knowles <dknowles@google.com>
-
Michael Hanselmann authored
- Replace hardcoded values with constants - Code formatting - Exception messages without periods and fixed string formatting Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
David Knowles <dknowles@google.com>
-
Michael Hanselmann authored
Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
David Knowles <dknowles@google.com>
-
Michael Hanselmann authored
Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
David Knowles <dknowles@google.com>
-
Michael Hanselmann authored
Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
David Knowles <dknowles@google.com>
-
Michael Hanselmann authored
Even removing tags returns a job ID. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
David Knowles <dknowles@google.com>
-
Michael Hanselmann authored
If the version changes, the API is likely to change as well. Not having to ask for the version first makes the code simpler. Signed-off-by:
Michael Hanselmann <hansmi@google.com> Reviewed-by:
David Knowles <dknowles@google.com>
-