Hallo Leute,
Dies ist eine Verbesserungsanfrage.
Nach der Repository-Erstellung erstellt Nexus Berechtigungen für dieses Repository.
Außerdem kann es in der Arbeit vorkommen, dass dieser oder jener Rolle weitere Berechtigungen hinzugefügt/angehängt werden müssen.
Und es ist im Moment unmöglich, eine Liste der Berechtigungen für das spezifische Repository zu erhalten.
Anwendungsfall: Benötigte eine Rolle, die über Berechtigungen von mehreren Repositorys verfügt.
Es wäre toll, diese Art von Funktion zu haben. ;)
Grüße,
Taras.
Hallo @fog1985 ,
Würde es helfen, eine Datenquelle für Berechtigungen bereitzustellen? Es könnte basierend auf einem Filter wie domain
, repository
oder name
alle Berechtigungen zurückgeben, die dem Filter entsprechen. Sie können die zurückgegebene Liste dann verwenden, um andere Dinge damit zu tun.
resource "nexus_repository" "demo" {
type = "hosted"
format = "maven2"
name = "demo"
...
}
data "nexus_privileges" "demo" {
repository = nexus_repository.demo.name
}
Hallo @Nosmoht ,
Ja. Es würde wie ein Zauber wirken.
@Nosmoht ,
Es wäre schön, wenn mehrere Filter oder verschachtelte Ergebnisse möglich wären. Denn im Repository gibt es mehrere Arten von Berechtigungen. Daher wäre es schön, sagen wir, Privilegien vom Typ repository-view
die für das this
Repository angewendet werden.
Dokumentation
Cool. Danke @Nosmoht
@fog1985 Bitte lassen Sie mich wissen, ob es funktioniert und ob wir das Problem schließen können.
Hey @Nosmoht ,
Ich bin sicher, es funktioniert. Sie haben keine Chance, eine neue Version zu veröffentlichen und sofort zu testen.
Oder lassen Sie es bitte für ein paar Tage und ich werde mein Bestes geben, um es Anfang nächster Woche zu testen.
Hallo @Nosmoht ,
Ich habe gerade versucht, es zu verwenden. Und ein bisschen verwirrt darüber, wie man alles Notwendige deklariert.
Hier was ich habe:
data "nexus_privileges" "apt-proxy-read" {
format = "apt"
repository = "apt-proxy"
type = "repository-view"
privileges {
actions = ["read"]
}
}
Bezog sich auf diesen Code:
https://github.com/datadrivers/terraform-provider-nexus/blob/master/nexus/data_source_privileges.go
Es scheint tatsächlich den Abschnitt privileges
.
Aber ich bin mir nicht sicher, was der Unterschied zwischen format
zum Beispiel in einer Root-Deklaration und format
innerhalb der Privilegien ist.
Trotzdem erhalte ich folgendes:
Error: "privileges": this field cannot be set
on roles.tf line 1, in data "nexus_privileges" "apt-proxy-read":
1: data "nexus_privileges" "apt-proxy-read" {
Wenn ich actions
in das Root-Verzeichnis setze, schlägt das actions are not expected here
immer noch fehl.
Hallo @fog1985 ,
die Datenressource wird verwendet, um die Liste der Berechtigungen für das angegebene Repository format
und type
. Entfernen Sie also bitte das privileges
aus Ihrer Deklaration und Sie sollten eine Liste aller Privilegien des Repositorys apt-proxy
als Rückgabewert erhalten.
Hallo @Nosmoht ,
Vielen Dank. Ich habe es geschafft, alle Namen der Privilegien wie folgt zu lesen:
data "nexus_privileges" "apt-proxy-read" {
format = "apt"
repository = "apt-proxy"
type = "repository-view"
}
output "privileges" {
value = data.nexus_privileges.apt-proxy-read.privileges.*.name
}
Gibt es eine Möglichkeit, ein Privileg zu erhalten, dessen Aktion beispielsweise für READ
oder WRITE
?
Oder nur eine Liste aller Privilegien?
Auch dieser Parameter im Datenquellenblock ist nicht klar:
type = "repository-view"
Soll es das Format des Repositorys oder das Format der Berechtigungen sein?
Wenn es sich um ein Format der Berechtigungen handelt, funktioniert es nicht wie erwartet. Denn mit repository-view
ich die vollständige Liste aller Berechtigungen erhalten, einschließlich der Rechte zum Schreiben/Bearbeiten usw.
Es wäre schön, ein kurzes Beispiel zu haben, wie man die Ausgabe einer Datenquelle für einige READ-, WRITE- oder andere Filter für Berechtigungen herausfiltert.
Ich glaube, das einzige, was wir tun können, ist einen Namensfilter wie name = ".*-read"
hinzuzufügen. Wir könnten also einen Regexp für den Berechtigungsnamen verwenden, um nur Berechtigungen zu erhalten, die dem Regexp entsprechen. Würde dir das helfen?
Ich denke ja. Das würde funktionieren.
Ich habe auch versucht, die filter
Terraformr zu verwenden. Wie hier beschrieben:
https://www.terraform.io/docs/providers/oci/guides/filters.html
Funktioniert auch nicht.
data "nexus_privileges" "apt-proxy-read" {
format = "apt"
repository = "apt-proxy"
type = "repository-view"
filter {
name = "actions"
values = ["READ"]
}
}
Ergebnis:
Error: Unsupported block type
on roles.tf line 6, in data "nexus_privileges" "apt-proxy-read":
6: filter {
Blocks of type "filter" are not expected here.
Also würde name
wenn möglich funktionieren.
Als Zwischenlösung habe ich mir gerade diese einfallen lassen:
value = [for x in data.nexus_privileges.apt-proxy-read.privileges: x.name if contains(x["actions"], "READ")]
Was das Privileg READ
zurückgibt. :)
Für diejenigen, die das Gleiche suchen:
output "privileges_apt_proxy_all_read" {
value = [for x in data.nexus_privileges.apt-proxy-read.privileges: x.name if can(regex("ALL|READ", join("",x.actions)))]
}
output "privileges_apt_proxy_browse" {
value = [for x in data.nexus_privileges.apt-proxy-read.privileges: x.name if can(regex("BROWSE", join("",x.actions)))]
}
output "privileges_multiple_repos_example" {
value = concat([for x in data.nexus_privileges.apt-proxy-read.privileges: x.name if can(regex("ALL|READ", join("",x.actions)))], [for x in data.nexus_privileges.apt-proxy-read.privileges: x.name if can(regex("BROWSE", join("",x.actions)))])
}
Auf diese Weise können wir eine nette Filterung basierend auf actions
mit der Verwendung von RegExp
.
Oder kombinieren Sie sogar Berechtigungen aus verschiedenen Repositorys und Datenquellen mit der Verwendung der concat
Funktion von Terraform.
Hallo @fog1985 ,
Können wir das Problem schließen und eine neue Funktionsanfrage für den Berechtigungsfilter erstellen?
Hallo @fog1985 ,
Können wir das Problem schließen und eine neue Funktionsanfrage für den Berechtigungsfilter erstellen?
Hallo @Nosmoht ,
Sicher.
Dankeschön.