Skip to content

Commit 441700c

Browse files
upd proj structure
1 parent 297459c commit 441700c

2 files changed

Lines changed: 71 additions & 60 deletions

File tree

src/subresources.rs

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use kube::api::{DeleteParams, ObjectMeta, PostParams};
88
use kube::{Api, Client, Error, ResourceExt};
99
use serde_json::{json, Value};
1010
use std::collections::BTreeMap;
11+
use std::str::{from_utf8, Utf8Error};
1112
use tracing::*;
1213

1314
use crate::crd::CDBootstrap;
@@ -380,6 +381,69 @@ impl AgentSecret {
380381
api.delete(&name, &DeleteParams::default()).await?;
381382
Ok(())
382383
}
384+
385+
pub async fn value_is_set(
386+
client: Client,
387+
name: &str,
388+
namespace: &str,
389+
key: &str,
390+
) -> Result<bool, Utf8Error> {
391+
let mut is_set = false;
392+
let api: Api<Secret> = Api::namespaced(client.clone(), namespace);
393+
394+
match api.get(name).await {
395+
Ok(secret) => {
396+
if let Some(data) = secret.data {
397+
if let Some(value) = data.get(key) {
398+
let token_decoded = from_utf8(&value.0)?;
399+
is_set = !token_decoded.is_empty();
400+
}
401+
}
402+
}
403+
Err(_) => {
404+
error!("Secret {} in namespace {} NOT found", name, namespace);
405+
}
406+
}
407+
408+
Ok(is_set)
409+
}
410+
411+
pub async fn get_value(
412+
client: Client,
413+
name: &str,
414+
namespace: &str,
415+
key: &str,
416+
) -> Result<String, Utf8Error> {
417+
let mut client_secret = String::from("");
418+
419+
let api: Api<Secret> = Api::namespaced(client.clone(), namespace);
420+
421+
match api.get(name).await {
422+
Ok(secret) => {
423+
if let Some(data) = secret.data {
424+
if let Some(value) = data.get(key) {
425+
let token_decoded = from_utf8(&value.0)?;
426+
client_secret = token_decoded.to_string();
427+
}
428+
}
429+
}
430+
Err(_) => {
431+
error!("Error getting Secret {} in namespace {}", name, namespace);
432+
}
433+
}
434+
435+
Ok(client_secret)
436+
}
437+
438+
#[allow(dead_code, unused_variables)]
439+
pub async fn set_value(
440+
client: Client,
441+
name: &str,
442+
namespace: &str,
443+
key: &str,
444+
) -> Result<(), Utf8Error> {
445+
Ok(())
446+
}
383447
}
384448

385449
pub struct AgentPolicy {}

src/vault.rs

Lines changed: 7 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@ use azure_core::new_http_client;
22
use azure_identity::{ClientSecretCredential, TokenCredentialOptions};
33
use azure_security_keyvault::prelude::*;
44
use futures::StreamExt;
5-
use k8s_openapi::api::core::v1::Secret;
6-
use kube::{Api, Client};
7-
use std::str::{from_utf8, Utf8Error};
5+
use kube::Client;
86
use std::{env, process, sync::Arc};
97
use tracing::{error, info};
108

119
use crate::crd::CDBootstrap;
10+
use crate::subresources::AgentSecret;
1211

1312
#[derive(Debug)]
1413
pub struct AzureVault {
@@ -17,7 +16,6 @@ pub struct AzureVault {
1716
pub spn: String,
1817
}
1918

20-
#[allow(dead_code)]
2119
impl AzureVault {
2220
pub fn new(tenant: &str, keyvault_url: &str, spn: &str) -> Self {
2321
Self {
@@ -57,7 +55,8 @@ impl AzureVault {
5755
}
5856

5957
pub async fn run(client: Client, name: &str, namespace: &str, cr: &CDBootstrap) {
60-
let sps_result = secret_value_is_set(client.clone(), &name, &namespace, "SPN_SECRET").await;
58+
let sps_result =
59+
AgentSecret::value_is_set(client.clone(), &name, &namespace, "SPN_SECRET").await;
6160
let sps = match sps_result {
6261
Ok(sps) => sps,
6362
Err(err) => {
@@ -66,7 +65,8 @@ pub async fn run(client: Client, name: &str, namespace: &str, cr: &CDBootstrap)
6665
}
6766
};
6867

69-
let azp_result = secret_value_is_set(client.clone(), &name, &namespace, "AZP_TOKEN").await;
68+
let azp_result =
69+
AgentSecret::value_is_set(client.clone(), &name, &namespace, "AZP_TOKEN").await;
7070
let azp = match azp_result {
7171
Ok(azp) => azp,
7272
Err(err) => {
@@ -84,7 +84,7 @@ pub async fn run(client: Client, name: &str, namespace: &str, cr: &CDBootstrap)
8484
info!("SPN_SECRET value in Namespace {} Has been set", namespace);
8585
info!("Testing authentication to the Vault");
8686
if let Ok(secret_value) =
87-
get_secret_value(client.clone(), &name, &namespace, "SPN_SECRET").await
87+
AgentSecret::get_value(client.clone(), &name, &namespace, "SPN_SECRET").await
8888
{
8989
let azure_vault = AzureVault::new(&cr.spec.tenant, &cr.spec.keyvault, &cr.spec.spn);
9090
AzureVault::test_connection(&azure_vault, &secret_value.to_string()).await;
@@ -103,59 +103,6 @@ pub async fn run(client: Client, name: &str, namespace: &str, cr: &CDBootstrap)
103103
}
104104
}
105105

106-
async fn secret_value_is_set(
107-
client: Client,
108-
name: &str,
109-
namespace: &str,
110-
key: &str,
111-
) -> Result<bool, Utf8Error> {
112-
let mut is_set = false;
113-
let api: Api<Secret> = Api::namespaced(client.clone(), namespace);
114-
115-
match api.get(name).await {
116-
Ok(secret) => {
117-
if let Some(data) = secret.data {
118-
if let Some(value) = data.get(key) {
119-
let token_decoded = from_utf8(&value.0)?;
120-
is_set = !token_decoded.is_empty();
121-
}
122-
}
123-
}
124-
Err(_) => {
125-
error!("Secret {} in namespace {} NOT found", name, namespace);
126-
}
127-
}
128-
129-
Ok(is_set)
130-
}
131-
132-
pub async fn get_secret_value(
133-
client: Client,
134-
name: &str,
135-
namespace: &str,
136-
key: &str,
137-
) -> Result<String, Utf8Error> {
138-
let mut client_secret = String::from("");
139-
140-
let api: Api<Secret> = Api::namespaced(client.clone(), namespace);
141-
142-
match api.get(name).await {
143-
Ok(secret) => {
144-
if let Some(data) = secret.data {
145-
if let Some(value) = data.get(key) {
146-
let token_decoded = from_utf8(&value.0)?;
147-
client_secret = token_decoded.to_string();
148-
}
149-
}
150-
}
151-
Err(_) => {
152-
error!("Error getting Secret {} in namespace {}", name, namespace);
153-
}
154-
}
155-
156-
Ok(client_secret)
157-
}
158-
159106
pub async fn print_secret_from_vault(az: &AzureVault, secret_name: &str) {
160107
let config = AzureVault {
161108
tenant: az.tenant.clone(),

0 commit comments

Comments
 (0)