Terraform-provider-nexus: No parece posible obtener / extraer una lista de privilegios para el repositorio creado.

Creado en 3 jun. 2020  ·  16Comentarios  ·  Fuente: datadrivers/terraform-provider-nexus

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.

enhancement

Todos 16 comentarios

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 .

Hola @ fog1985 ,

esto debería arreglarse con v1.7.0 .

Documentación

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.

¿Fue útil esta página
0 / 5 - 0 calificaciones