Terraform-provider-nexus: Il ne semble pas possible d'obtenir/d'extraire une liste de privilèges pour le référentiel créé.

Créé le 3 juin 2020  ·  16Commentaires  ·  Source: datadrivers/terraform-provider-nexus

Salut les gars,

Il s'agit d'une demande d'amélioration.

Après la création du référentiel, Nexus crée des privilèges pour ce référentiel.
De plus, dans le travail, il peut arriver que plus de privilèges doivent être ajoutés/attachés à tel ou tel rôle.
Et il est impossible pour le moment d'obtenir une liste de privilèges pour le référentiel spécifique.
Cas d'utilisation : besoin d'un rôle disposant des privilèges de plusieurs référentiels.
Ce serait génial d'avoir ce genre de fonctionnalité. ;)

Salutations,
Taras.

enhancement

Tous les 16 commentaires

Salut @fog1985 ,

cela aiderait-il à fournir une source de données pour les privilèges ? Il pourrait renvoyer, en fonction d'un filtre comme domain , repository ou name , tous les privilèges correspondant au filtre. Vous pouvez alors utiliser la liste renvoyée pour faire d'autres choses avec.

resource "nexus_repository" "demo" {
  type   = "hosted"
  format = "maven2"
  name   = "demo"
  ...
}

data "nexus_privileges" "demo" {
  repository = nexus_repository.demo.name
}

Salut @Nosmoht ,
Ouais. Cela fonctionnerait comme un charme.

@Nosmoht ,
Ce serait bien d'avoir la possibilité de plusieurs filtres ou de résultats imbriqués. Parce que dans le référentiel, il existe plusieurs types de privilèges. Par conséquent, ce serait bien d'avoir, disons, des privilèges de type repository-view qui sont appliqués pour le référentiel this .

Salut @fog1985 ,

cela devrait être corrigé avec la v1.7.0 .

Documentation

Documentation

Frais. Merci @Nosmoht

@fog1985 Veuillez me faire savoir si cela fonctionne et si nous pouvons

Salut @Nosmoht ,
Je suis sûr que ça marche. N'ayez pas l'occasion de mettre une nouvelle version et de la tester tout de suite.
Ou laissez-le pendant quelques jours et je ferai de mon mieux pour le tester au début de la semaine prochaine.

Salut @Nosmoht ,
Je viens d'essayer de l'utiliser. Et un peu confus avec la façon de déclarer toutes les choses nécessaires.
Voila ce que j'ai :

data "nexus_privileges" "apt-proxy-read" {
  format     = "apt"
  repository = "apt-proxy"
  type = "repository-view"
  privileges {
    actions = ["read"]
  }
}

Faisait référence à ce code:
https://github.com/datadrivers/terraform-provider-nexus/blob/master/nexus/data_source_privileges.go

Il semble en effet avoir une section privileges .
Mais je ne sais pas quelle est la différence entre format par exemple dans une déclaration root et format intérieur des privilèges.

Néanmoins, j'obtiens comme suit :

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" {

Si je mets actions dans la racine, cela échoue toujours, actions are not expected here .

Salut @fog1985 ,

la ressource de données est utilisée pour obtenir la liste des privilèges pour le référentiel spécifié format et type . Veuillez donc supprimer le privileges de votre déclaration et vous devriez obtenir une liste de tous les privilèges du référentiel apt-proxy comme valeur de retour.

Salut @Nosmoht ,
Merci. J'ai réussi à lire tous les noms de privilèges comme suit :

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
}

Existe-t-il un moyen d'obtenir un privilège par exemple dont l'action signifie READ ou WRITE ?
Ou juste une liste de tous les privilèges ?

Pas clair non plus sur ce paramètre dans le bloc de source de données :

type = "repository-view"

Doit-il s'agir du format du référentiel ou du format des privilèges ?
S'il s'agit d'un format de privilèges, cela ne fonctionne pas comme prévu. Parce qu'avec repository-view j'ai obtenu la liste complète de tous les privilèges, y compris ceux destinés à l'écriture/l'édition, etc.

Ce serait bien d'avoir un court exemple sur la façon de filtrer la sortie de la source de données vers certains filtres READ, WRITE ou autres pour les privilèges.

Je crois que la seule chose que nous puissions faire est d'ajouter un filtre de nom comme name = ".*-read" . Nous pourrions donc utiliser une expression rationnelle sur le nom du privilège pour obtenir uniquement les privilèges correspondant à l'expression rationnelle. Cela vous aiderait-il ?

Je pense que oui. Ça marcherait.
J'ai également essayé d'utiliser la fonction filter Terrafomr. Comme décrit ici :
https://www.terraform.io/docs/providers/oci/guides/filters.html
Ne fonctionne pas non plus.

data "nexus_privileges" "apt-proxy-read" {
  format     = "apt"
  repository = "apt-proxy"
  type = "repository-view"

  filter {
    name = "actions"
    values = ["READ"]
  }
}

Résultat:

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.

Donc name fonctionnerait si possible.

En guise de solution intermédiaire, je viens de proposer celle-ci :

value = [for x in data.nexus_privileges.apt-proxy-read.privileges: x.name if contains(x["actions"], "READ")]

Ce qui renvoie le privilège READ . :)

Pour ceux qui rechercheraient la même chose :

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)))])
}

De cette façon, nous pouvons obtenir un bon filtrage basé sur actions avec l'utilisation de RegExp .
Ou même combiner les privilèges de différents référentiels et sources de données avec l'utilisation de la fonction concat de Terraform.

Salut @fog1985 ,

pouvons-nous clore le problème et créer une nouvelle demande de fonctionnalité pour le filtre de privilège ?

Salut @fog1985 ,

pouvons-nous clore le problème et créer une nouvelle demande de fonctionnalité pour le filtre de privilège ?

Salut @Nosmoht ,
Sûr.
Merci.

Cette page vous a été utile?
0 / 5 - 0 notes