use super::MaestroClient;
use crate::security::{
ClusterRoleBindingBuilder, ClusterRoleBuilder, LimitRangeBuilder, LimitRangeItemBuilder,
LimitRangeType, NetworkPolicyBuilder, PodSecurityContextBuilder, PolicyRule as RbacPolicyRule,
ResourceQuotaBuilder, RoleBindingBuilder, RoleBuilder, SecurityContextConfig,
ServiceAccountBuilder,
};
pub struct SecurityClient<'a> {
pub(crate) client: &'a MaestroClient,
}
impl<'a> SecurityClient<'a> {
pub fn network_policy(&self, name: &str) -> NetworkPolicyBuilder {
NetworkPolicyBuilder::new(name, self.client.namespace())
}
pub fn resource_quota(&self, name: &str) -> ResourceQuotaBuilder {
ResourceQuotaBuilder::new(name, self.client.namespace())
}
pub fn security_context(&self) -> PodSecurityContextBuilder {
PodSecurityContextBuilder::new()
}
pub fn security_context_config(&self) -> SecurityContextConfig {
SecurityContextConfig::new()
}
pub fn service_account(&self, name: &str) -> ServiceAccountBuilder {
ServiceAccountBuilder::new(name, self.client.namespace())
}
pub fn role(&self, name: &str) -> RoleBuilder {
RoleBuilder::new(name, self.client.namespace())
}
pub fn cluster_role(&self, name: &str) -> ClusterRoleBuilder {
ClusterRoleBuilder::new(name)
}
pub fn role_binding(&self, name: &str) -> RoleBindingBuilder {
RoleBindingBuilder::new(name, self.client.namespace())
}
pub fn cluster_role_binding(&self, name: &str) -> ClusterRoleBindingBuilder {
ClusterRoleBindingBuilder::new(name)
}
pub fn policy_rule(&self) -> RbacPolicyRule {
RbacPolicyRule::new()
}
pub fn limit_range(&self, name: &str) -> LimitRangeBuilder {
LimitRangeBuilder::new(name, self.client.namespace())
}
pub fn limit_range_item(&self, limit_type: LimitRangeType) -> LimitRangeItemBuilder {
LimitRangeItemBuilder::new(limit_type)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_security_client_creation() {
use crate::client::MaestroClientBuilder;
let client = MaestroClientBuilder::new()
.with_namespace("test-ns")
.build()
.unwrap();
let security_client = SecurityClient { client: &client };
let _ = security_client.network_policy("test-policy");
let _ = security_client.resource_quota("test-quota");
let _ = security_client.security_context();
let _ = security_client.security_context_config();
let _ = security_client.service_account("test-sa");
let _ = security_client.role("test-role");
let _ = security_client.cluster_role("test-cluster-role");
let _ = security_client.role_binding("test-binding");
let _ = security_client.cluster_role_binding("test-cluster-binding");
let _ = security_client.policy_rule();
let _ = security_client.limit_range("test-limits");
let _ = security_client.limit_range_item(crate::security::LimitRangeType::Container);
}
}