Compare commits

..

No commits in common. "cecc8e7b2cbe98b2b76d1507c89f016f7c65eeb6" and "32b584d7d9af4181ec6235963f92204bf9d91eeb" have entirely different histories.

3 changed files with 32 additions and 12 deletions

View file

@ -4,7 +4,7 @@ Server application that provides cloud-init metadata via the `nocloud-net` provi
## Requirements
Only sqlite3 dev libraries are required for sea-orm.
Only sqlite3 dev libraries are required for Diesel.
## Configuration
@ -20,4 +20,33 @@ This outputs the API key and the relevant config snippet you'll need to add to `
All API endpoints require an `X-API-Key` header with the key generated above, and for the API client to be connected via localhost. \todo Allow overriding the latter requirement, if needed
\todo HTTP API endpoints/usage
To create an instance (all requests sent to `http://[::1]`):
```
> POST /_yui/instances HTTP/1.1
> X-API-Key: Your_API_Key
> Content-type: application/json
> [...]
>
> {
> "name": "instance_hostname",
> "os_name": "netbsd|debian|invalid",
> "mac_address": "0a:42:01:23:45:67"
> }
>
< HTTP/1.1 201 Created
< Content-type: application/json
< [...]
<
< {
< "error": null,
< "instances": [
< {
< "id": 591750913,
< "name": "instance_hostname",
< "os_name": "netbsd|debian|invalid",
< "mac_address": "0a:42:01:23:45:67"
< }
< ]
< }
}
```

View file

@ -10,9 +10,7 @@ pub struct Model {
pub id: u32,
pub hostname: String,
pub mac_address: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub ssh_keys: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user_data: Option<Vec<u8>>,
}

View file

@ -10,7 +10,6 @@ use crate::Instances;
use rocket::serde::json::Json;
use rocket_db_pools::Connection;
use sea_orm::ActiveValue::{NotSet, Set};
use sea_orm::QuerySelect;
use sea_orm::{
ActiveModelTrait, ColumnTrait, EntityTrait, ModelTrait, PaginatorTrait, QueryFilter,
};
@ -98,13 +97,7 @@ pub async fn get_instances(
db: Connection<Instances>,
_api: APIUser,
) -> Result<Json<InstanceResponse>, APIError> {
match instance_info::Entity::find()
.column(instance_info::Column::Id)
.column(instance_info::Column::MacAddress)
.column(instance_info::Column::Hostname)
.all(&*db)
.await
{
match instance_info::Entity::find().all(&*db).await {
Ok(v) => Ok(Json(InstanceResponse::new(v))),
Err(err) => Err(api_err!(
InternalServerError,