Skip to content

Commit c6b4009

Browse files
Remove clusterrole creation, move ldap to permissionables
1 parent 1d507c7 commit c6b4009

File tree

11 files changed

+86
-209
lines changed

11 files changed

+86
-209
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
apiVersion: rbac.authorization.k8s.io/v1
2+
kind: ClusterRole
3+
metadata:
4+
name: argo-workflows
5+
rules:
6+
- apiGroups: [""]
7+
resources: ["pods"]
8+
verbs: ["get", "watch", "patch"]
9+
- apiGroups: [""]
10+
resources: ["pods/logs"]
11+
verbs: ["get", "watch"]
12+
- apiGroups: [""]
13+
resources: ["pods/exec"]
14+
verbs: ["create"]
15+
- apiGroups: ["argoproj.io"]
16+
resources: [
17+
"workflowtaskresults",
18+
]
19+
verbs: ["create","patch"]
20+
- apiGroups: ["argoproj.io"]
21+
resources: [
22+
"workflowtasksets",
23+
"workflowartifactgctasks",
24+
]
25+
verbs: ["list", "watch"]
26+
- apiGroups: ["argoproj.io"]
27+
resources: [
28+
"workflowtasksets/status",
29+
"workflowartifactgctasks/status",
30+
]
31+
verbs: ["patch"]
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
apiVersion: rbac.authorization.k8s.io/v1
2+
kind: ClusterRole
3+
metadata:
4+
name: visit-member
5+
rules:
6+
- apiGroups: ["argoproj.io"]
7+
resources: [
8+
"eventsources",
9+
"sensors",
10+
"workflows",
11+
"workfloweventbindings",
12+
"workflowtemplates",
13+
"clusterworkflowtemplates",
14+
"cronworkflows",
15+
"workflowtaskresults",
16+
]
17+
verbs: ["get", "watch", "list"]
18+
- apiGroups: ["argoproj.io"]
19+
resources: ["workflows"]
20+
verbs: ["create"]

charts/sessionspaces/templates/clusterrole.yaml

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,10 @@ kind: ClusterRole
44
metadata:
55
name: {{ include "sessionspaces.serviceAccountName" . }}
66
rules:
7-
- apiGroups: [""]
8-
resources: ["pods"]
9-
verbs: ["get", "watch", "patch"]
107
- apiGroups: [""]
118
resources: ["namespaces"]
129
verbs: ["create", "delete", "get", "list"]
13-
- apiGroups: [""]
14-
resources: ["pods/exec"]
15-
verbs: ["create"]
16-
- apiGroups: [""]
17-
resources: ["pods/logs"]
18-
verbs: ["get", "watch"]
19-
- apiGroups: ["rbac.authorization.k8s.io"]
20-
resources: ["clusterroles"]
21-
verbs: ["create", "patch"]
2210
- apiGroups: [""]
2311
resources: ["configmaps"]
2412
verbs: ["create", "patch"]
25-
- apiGroups: ["argoproj.io"]
26-
resources: [
27-
"workflowartifactgctasks",
28-
"workflowartifactgctasks/status",
29-
"workflowtaskresults",
30-
"workflowtasksets",
31-
"workflowtasksets/status",
32-
"clusterworkflowtemplates",
33-
"cronworkflows",
34-
"eventsources",
35-
"sensors",
36-
"workfloweventbindings",
37-
"workflows",
38-
"workflowtemplates"
39-
]
40-
verbs: ["get", "list", "watch", "patch", "create"]
13+
{{- end }}

charts/sessionspaces/templates/clusterrolebinding.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,4 @@ roleRef:
1212
kind: ClusterRole
1313
name: {{ include "sessionspaces.fullname" . }}
1414
apiGroup: rbac.authorization.k8s.io
15+
{{- end }}

sessionspaces/src/main.rs

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,7 @@ mod resources;
1010

1111
use crate::{
1212
permissionables::{Session, SubjectSession},
13-
resources::{
14-
create_argo_workflows_role, create_configmap, create_namespace, create_visit_member_role,
15-
delete_namespace,
16-
},
13+
resources::{create_configmap, create_namespace, delete_namespace},
1714
};
1815
use clap::Parser;
1916
use sqlx::{mysql::MySqlPoolOptions, MySqlPool};
@@ -54,13 +51,6 @@ async fn main() {
5451
.unwrap();
5552

5653
let k8s_client = kube::Client::try_default().await.unwrap();
57-
info!("Creating argo-workflows Role");
58-
create_argo_workflows_role(k8s_client.clone())
59-
.await
60-
.unwrap();
61-
info!("Creating visit-member Role");
62-
create_visit_member_role(k8s_client.clone()).await.unwrap();
63-
6454
let mut current_sessions = SessionSpaces::default();
6555
let mut request_at = Instant::now();
6656
loop {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
use ldap3::{LdapConnAsync, Scope, SearchEntry};
2+
use tracing::info;
3+
4+
pub async fn ldap_search(namespace: String) -> Result<String, Box<dyn std::error::Error>> {
5+
let (conn, mut ldap) = LdapConnAsync::new("ldap://ldap.diamond.ac.uk").await?;
6+
ldap3::drive!(conn);
7+
let common_name = namespace.replace("-", "_");
8+
let filter = format!("(&(objectClass=posixgroup)(cn={common_name}))",);
9+
let (rs, _res) = ldap
10+
.search(
11+
"ou=Group,dc=diamond,dc=ac,dc=uk",
12+
Scope::Subtree,
13+
&filter,
14+
vec!["gidnumber"],
15+
)
16+
.await
17+
.unwrap()
18+
.success()
19+
.unwrap();
20+
for entry in rs {
21+
if let Some(res) = SearchEntry::construct(entry).attrs.get("gidNumber") {
22+
return Ok(res.concat());
23+
}
24+
}
25+
info!("gidNumber not found for session {}", common_name);
26+
Err("gidNumber not found".into())
27+
}
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
/// gidNumber for sessions
2+
mod ldap;
13
/// Beamline sessions
24
mod session;
35
/// Associations between subjects and sessions
46
mod subject_session;
57

6-
pub use self::{session::Session, subject_session::SubjectSession};
8+
pub use self::{ldap::ldap_search, session::Session, subject_session::SubjectSession};

sessionspaces/src/resources/config_maps.rs

Lines changed: 2 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,14 @@
1+
use crate::permissionables::ldap_search;
12
use k8s_openapi::api::core::v1::ConfigMap;
23
use kube::{
34
api::{ObjectMeta, Patch, PatchParams},
45
Api, Client,
56
};
6-
use ldap3::{LdapConnAsync, Scope, SearchEntry};
7-
use std::{
8-
collections::{BTreeMap, BTreeSet},
9-
error::Error,
10-
};
7+
use std::collections::{BTreeMap, BTreeSet};
118
use tracing::{info, instrument};
129

1310
const POLICY_CONFIG: &str = "policy-config";
1411

15-
pub async fn ldap_search(namespace: String) -> Result<String, Box<dyn Error>> {
16-
let (conn, mut ldap) = LdapConnAsync::new("ldap://ldap.diamond.ac.uk").await?;
17-
ldap3::drive!(conn);
18-
let common_name = namespace.replace("-", "_");
19-
let filter = format!("(&(objectClass=posixgroup)(cn={common_name}))",);
20-
let (rs, _res) = ldap
21-
.search(
22-
"ou=Group,dc=diamond,dc=ac,dc=uk",
23-
Scope::Subtree,
24-
&filter,
25-
vec!["gidnumber"],
26-
)
27-
.await
28-
.unwrap()
29-
.success()
30-
.unwrap();
31-
for entry in rs {
32-
if let Some(res) = SearchEntry::construct(entry).attrs.get("gidNumber") {
33-
return Ok(res.concat());
34-
}
35-
}
36-
info!("gidNumber not found for session {}", common_name);
37-
Err("gidNumber not found".into())
38-
}
39-
4012
#[instrument(skip(k8s_client))]
4113
pub async fn create_configmap(
4214
namespace: String,

sessionspaces/src/resources/member_sa.rs

Lines changed: 0 additions & 56 deletions
This file was deleted.

sessionspaces/src/resources/mod.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
11
/// The config map for kyverno policy
22
mod config_maps;
3-
/// The visit-member ServiceAccount and corresponding Role
4-
mod member_sa;
53
/// The Namespace for a beamline session
64
mod namespace;
7-
/// The argo-workflows ServiceAccount and corresponding Role
8-
mod workflows_sa;
95

106
pub use self::{
117
config_maps::create_configmap,
12-
member_sa::create_visit_member_role,
138
namespace::{create_namespace, delete_namespace},
14-
workflows_sa::create_argo_workflows_role,
159
};

0 commit comments

Comments
 (0)