Terraform-provider-nexus: Es scheint nicht möglich zu sein, eine Liste der Berechtigungen für das erstellte Repository abzurufen/zu extrahieren.

Erstellt am 3. Juni 2020  ·  16Kommentare  ·  Quelle: datadrivers/terraform-provider-nexus

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.

enhancement

Alle 16 Kommentare

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.

Hallo @fog1985 ,

dies sollte mit v1.7.0 behoben sein .

Dokumentation

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.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen