MXS-2481 Add MaxRest functionality
- show_server - call_command
This commit is contained in:
@ -29,14 +29,56 @@ MaxRest::MaxRest(TestConnections* pTest)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
unique_ptr<json_t> MaxRest::servers() const
|
unique_ptr<json_t> MaxRest::v1_servers(const string& id) const
|
||||||
{
|
{
|
||||||
return curl("servers");
|
string path("servers");
|
||||||
|
path += "/";
|
||||||
|
path += id;
|
||||||
|
|
||||||
|
return curl_get(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
unique_ptr<json_t> MaxRest::v1_servers() const
|
||||||
|
{
|
||||||
|
return curl_get("servers");
|
||||||
|
}
|
||||||
|
|
||||||
|
void MaxRest::v1_maxscale_modules(const string& module,
|
||||||
|
const string& command,
|
||||||
|
const string& instance,
|
||||||
|
const std::vector<string>& params) const
|
||||||
|
{
|
||||||
|
string path("maxscale/modules");
|
||||||
|
|
||||||
|
path += "/";
|
||||||
|
path += module;
|
||||||
|
path += "/";
|
||||||
|
path += command;
|
||||||
|
path += "?";
|
||||||
|
path += instance;
|
||||||
|
|
||||||
|
if (!params.empty())
|
||||||
|
{
|
||||||
|
for (const auto& param : params)
|
||||||
|
{
|
||||||
|
path += "\\&";
|
||||||
|
path += param;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
curl_post(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
MaxRest::Server MaxRest::show_server(const std::string& id) const
|
||||||
|
{
|
||||||
|
unique_ptr<json_t> sObject = v1_servers(id);
|
||||||
|
json_t* pData = get_object(sObject.get(), "data", Presence::MANDATORY);
|
||||||
|
return Server(*this, pData);
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<MaxRest::Server> MaxRest::list_servers() const
|
vector<MaxRest::Server> MaxRest::list_servers() const
|
||||||
{
|
{
|
||||||
return get_array<Server>(servers().get(), "data", Presence::MANDATORY);
|
return get_array<Server>(v1_servers().get(), "data", Presence::MANDATORY);
|
||||||
}
|
}
|
||||||
|
|
||||||
json_t* MaxRest::get_object(json_t* pObject, const string& key, Presence presence) const
|
json_t* MaxRest::get_object(json_t* pObject, const string& key, Presence presence) const
|
||||||
@ -84,19 +126,49 @@ unique_ptr<json_t> MaxRest::parse(const string& json) const
|
|||||||
return sRoot;
|
return sRoot;
|
||||||
}
|
}
|
||||||
|
|
||||||
unique_ptr<json_t> MaxRest::curl(const string& path) const
|
unique_ptr<json_t> MaxRest::curl_get(const string& path) const
|
||||||
|
{
|
||||||
|
return curl(GET, path);
|
||||||
|
}
|
||||||
|
|
||||||
|
unique_ptr<json_t> MaxRest::curl_post(const string& path) const
|
||||||
|
{
|
||||||
|
return curl(POST, path);
|
||||||
|
}
|
||||||
|
|
||||||
|
unique_ptr<json_t> MaxRest::curl(Command command, const string& path) const
|
||||||
{
|
{
|
||||||
string url = "http://127.0.0.1:8989/v1/" + path;
|
string url = "http://127.0.0.1:8989/v1/" + path;
|
||||||
string command = "curl -u admin:mariadb " + url;
|
string curl_command = "curl -u admin:mariadb ";
|
||||||
|
|
||||||
auto result = m_test.maxscales->ssh_output(command.c_str(), 0, false);
|
switch (command)
|
||||||
|
{
|
||||||
|
case GET:
|
||||||
|
curl_command += "-X GET ";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case POST:
|
||||||
|
curl_command += "-X POST ";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
curl_command += url;
|
||||||
|
|
||||||
|
auto result = m_test.maxscales->ssh_output(curl_command.c_str(), 0, false);
|
||||||
|
|
||||||
if (result.first != 0)
|
if (result.first != 0)
|
||||||
{
|
{
|
||||||
raise("Invocation of curl failed: " + to_string(result.first));
|
raise("Invocation of curl failed: " + to_string(result.first));
|
||||||
}
|
}
|
||||||
|
|
||||||
return parse(result.second);
|
unique_ptr<json_t> sRv;
|
||||||
|
|
||||||
|
if (!result.second.empty())
|
||||||
|
{
|
||||||
|
sRv = parse(result.second);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sRv;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MaxRest::raise(const std::string& message) const
|
void MaxRest::raise(const std::string& message) const
|
||||||
|
|||||||
@ -57,18 +57,59 @@ public:
|
|||||||
return m_test;
|
return m_test;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return The JSON object corresponding to /v1/servers/:id:
|
||||||
|
*/
|
||||||
|
std::unique_ptr<json_t> v1_servers(const std::string& id) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return The JSON object corresponding to /v1/servers.
|
* @return The JSON object corresponding to /v1/servers.
|
||||||
*/
|
*/
|
||||||
std::unique_ptr<json_t> servers() const;
|
std::unique_ptr<json_t> v1_servers() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* POST request to /v1/maxscale/modules/:module:/:command:?instance[¶m...]
|
||||||
|
*
|
||||||
|
* @param module Module name.
|
||||||
|
* @param command The command.
|
||||||
|
* @param instance The object instance to execute it on.
|
||||||
|
* @param params Optional arguments.
|
||||||
|
*/
|
||||||
|
void v1_maxscale_modules(const std::string& module,
|
||||||
|
const std::string& command,
|
||||||
|
const std::string& instance,
|
||||||
|
const std::vector<std::string>& params = std::vector<std::string>()) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call a module command.
|
||||||
|
*
|
||||||
|
* @param module Module name.
|
||||||
|
* @param command The command.
|
||||||
|
* @param instance The object instance to execute it on.
|
||||||
|
* @param params Optional arguments.
|
||||||
|
*/
|
||||||
|
void call_command(const std::string& module,
|
||||||
|
const std::string& command,
|
||||||
|
const std::string& instance,
|
||||||
|
const std::vector<std::string>& params = std::vector<std::string>()) const
|
||||||
|
{
|
||||||
|
return v1_maxscale_modules(module, command, instance, params);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The equivalent of 'maxctrl list servers'
|
* The equivalent of 'maxctrl list servers'
|
||||||
*
|
*
|
||||||
* @return The JSON resrouce /v1/servers as a vector of Server objects.
|
* @return The JSON resource /v1/servers as a vector of Server objects.
|
||||||
*/
|
*/
|
||||||
std::vector<Server> list_servers() const;
|
std::vector<Server> list_servers() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The equivalent of 'maxctrl show server'
|
||||||
|
*
|
||||||
|
* @return The JSON resource /v1/servers/:id: as a Server object.
|
||||||
|
*/
|
||||||
|
Server show_server(const std::string& id) const;
|
||||||
|
|
||||||
enum class Presence
|
enum class Presence
|
||||||
{
|
{
|
||||||
OPTIONAL,
|
OPTIONAL,
|
||||||
@ -158,7 +199,7 @@ public:
|
|||||||
std::unique_ptr<json_t> parse(const std::string& json) const;
|
std::unique_ptr<json_t> parse(const std::string& json) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Issue a curl request to the REST-API endpoint of the MaxScale running on
|
* Issue a curl GET to the REST-API endpoint of the MaxScale running on
|
||||||
* the maxscale 0 VM instance.
|
* the maxscale 0 VM instance.
|
||||||
*
|
*
|
||||||
* The path will be appended to "http://127.0.0.1:8989/v1/".
|
* The path will be appended to "http://127.0.0.1:8989/v1/".
|
||||||
@ -167,10 +208,31 @@ public:
|
|||||||
*
|
*
|
||||||
* @return The corresponding json_t object.
|
* @return The corresponding json_t object.
|
||||||
*/
|
*/
|
||||||
std::unique_ptr<json_t> curl(const std::string& path) const;
|
std::unique_ptr<json_t> curl_get(const std::string& path) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Issue a curl POST to the REST-API endpoint of the MaxScale running on
|
||||||
|
* the maxscale 0 VM instance.
|
||||||
|
*
|
||||||
|
* The path will be appended to "http://127.0.0.1:8989/v1/".
|
||||||
|
*
|
||||||
|
* @param path The path of the resource.
|
||||||
|
*
|
||||||
|
* @return The corresponding json_t object.
|
||||||
|
*/
|
||||||
|
std::unique_ptr<json_t> curl_post(const std::string& path) const;
|
||||||
|
|
||||||
void raise(const std::string& message) const;
|
void raise(const std::string& message) const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum Command
|
||||||
|
{
|
||||||
|
GET,
|
||||||
|
POST
|
||||||
|
};
|
||||||
|
|
||||||
|
std::unique_ptr<json_t> curl(Command command, const std::string& path) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TestConnections& m_test;
|
TestConnections& m_test;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user