Hola tios,
Esta es una solicitud de mejora.
Después de la creación del repositorio, Nexus crea privilegios para este repositorio.
Además, en el trabajo puede suceder que sea necesario agregar / adjuntar más privilegios a este o aquel rol.
Y es imposible en este momento obtener una lista de privilegios para el repositorio específico.
Caso de uso: necesitaba un rol que tuviera privilegios de varios repositorios.
Sería fantástico tener este tipo de funciones. ;)
Saludos,
Taras.
Hola @ fog1985 ,
¿Ayudaría a proporcionar una fuente de datos para privilegios? Podría devolver, según un filtro como domain
, repository
o name
, todos los privilegios que coincidan con el filtro. Podrías usar la lista devuelta para hacer otras cosas con ella.
resource "nexus_repository" "demo" {
type = "hosted"
format = "maven2"
name = "demo"
...
}
data "nexus_privileges" "demo" {
repository = nexus_repository.demo.name
}
Hola @Nosmoht ,
Yeap. Funcionaría a las mil maravillas.
@Nosmoht ,
Sería bueno tener la posibilidad de múltiples filtros o resultados anidados. Porque en el repositorio hay varios tipos de privilegios. Por lo tanto, sería bueno obtener, digamos, privilegios de tipo repository-view
que se aplican al repositorio this
.
Documentación
Frio. Gracias @Nosmoht
@ fog1985 Por favor, avíseme si funciona y si podemos
Hola @Nosmoht ,
Estoy seguro de que funciona. No tenga la oportunidad de publicar una nueva versión y probarla de inmediato.
O déjelo por unos días y haré todo lo posible para probarlo a principios de la semana que viene.
Hola @Nosmoht ,
Acabo de intentar usarlo. Y un poco confundido con la forma de declarar todas las cosas necesarias.
Aquí lo que tengo:
data "nexus_privileges" "apt-proxy-read" {
format = "apt"
repository = "apt-proxy"
type = "repository-view"
privileges {
actions = ["read"]
}
}
Se refería a este código:
https://github.com/datadrivers/terraform-provider-nexus/blob/master/nexus/data_source_privileges.go
De hecho, parece tener la sección privileges
.
Pero no estoy seguro de cuál es la diferencia entre format
por ejemplo, en una declaración raíz y format
dentro de los privilegios.
Sin embargo, obtengo lo siguiente:
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 pongo actions
en la raíz aún falla, actions are not expected here
.
Hola @ fog1985 ,
el recurso de datos se usa para obtener la lista de privilegios para el repositorio especificado format
y type
. Por lo tanto, elimine privileges
de su declaración y debería obtener una lista de todos los privilegios del repositorio apt-proxy
como valor de retorno.
Hola @Nosmoht ,
Gracias. Me las arreglé para leer todos los nombres de los privilegios de la siguiente manera:
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
}
¿Hay alguna forma de obtener un privilegio, por ejemplo, cuya acción representa READ
o WRITE
?
¿O simplemente una lista de todos los privilegios?
Tampoco está claro acerca de este parámetro en el bloque de fuente de datos:
type = "repository-view"
¿Debería ser el formato del repositorio o el formato de los privilegios?
Si es un formato de privilegios, entonces no funciona como se esperaba. Porque con repository-view
obtuve la lista completa de todos los privilegios, incluidos los destinados a escribir / editar, etc.
Sería bueno tener un ejemplo breve sobre cómo filtrar la salida de la fuente de datos a algunos filtros READ, WRITE u otros filtros para privilegios.
Creo que lo único que podemos hacer es agregar un filtro de nombre como name = ".*-read"
. Entonces, podríamos usar una expresión regular en el nombre del privilegio para obtener solo privilegios que coincidan con la expresión regular. ¿Eso te ayudaría?
Creo que sí. Eso funcionaria.
También intenté usar la función filter
Terrafomr. Como se describe aquí:
https://www.terraform.io/docs/providers/oci/guides/filters.html
Tampoco funciona.
data "nexus_privileges" "apt-proxy-read" {
format = "apt"
repository = "apt-proxy"
type = "repository-view"
filter {
name = "actions"
values = ["READ"]
}
}
Resultado:
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.
Entonces name
funcionaría si es posible.
Como solución provisional, acabo de encontrar esta:
value = [for x in data.nexus_privileges.apt-proxy-read.privileges: x.name if contains(x["actions"], "READ")]
Lo que devuelve READ
privilegio. :)
Para aquellos que podrían estar buscando lo mismo:
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 esta manera, podemos obtener un buen filtrado basado en actions
con el uso de RegExp
.
O incluso combine privilegios de diferentes repositorios y fuentes de datos con el uso de la función concat
de Terraform.
Hola @ fog1985 ,
¿Podemos cerrar el problema y crear una nueva solicitud de función para el filtro de privilegios?
Hola @ fog1985 ,
¿Podemos cerrar el problema y crear una nueva solicitud de función para el filtro de privilegios?
Hola @Nosmoht ,
Seguro.
Gracias.