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.
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
.
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.