use regent_sdk::attribute::package::pacman::{PackageExpectedState, PacmanBlockExpectedState};
use regent_sdk::hosts::handlers::ConnectionMethod;
use regent_sdk::hosts::handlers::TargetUser;
use regent_sdk::hosts::managed_host::ManagedHostBuilder;
use regent_sdk::secrets::{SecretProvider, SecretProvidersPool};
use regent_sdk::task::Job;
use regent_sdk::task::{RegentTask, RegentTaskResult};
use regent_sdk::{Attribute, ExpectedState};
use regent_sdk::{Privilege, RegentError};
#[tokio::main]
async fn main() {
let serialized_regent_task = create_a_regent_task();
println!("{:?}", serialized_regent_task);
let secret_providers = SecretProvidersPool::from("env_vars", SecretProvider::env_var());
let regent_task_result =
run_a_given_regent_task(serialized_regent_task, Some(secret_providers)).await;
println!("{:?}", regent_task_result);
}
fn create_a_regent_task() -> String {
let managed_host_builder = ManagedHostBuilder::new(
"<host-id>",
"<address:port>",
Some(ConnectionMethod::Localhost(TargetUser::user(
"MY_CREDENTIALS_ENV_VAR_NAME",
Some("env_vars".to_string()),
))),
);
let apache_expected_state = PacmanBlockExpectedState::builder()
.with_package_state("apache", PackageExpectedState::Present)
.build()
.unwrap();
let expected_state = ExpectedState::new()
.with_attribute(Attribute::pacman(
apache_expected_state,
Privilege::WithSudo,
None,
))
.build();
let regent_task = RegentTask::from(managed_host_builder, expected_state, Job::Assess);
serde_json::to_string(®ent_task).unwrap()
}
async fn run_a_given_regent_task(
raw_regent_task: String,
secret_provider: Option<SecretProvidersPool>,
) -> Result<RegentTaskResult, RegentError> {
let mut regent_task = serde_json::from_str::<RegentTask>(&raw_regent_task).unwrap();
regent_task.run(secret_provider).await
}