Terraform-provider-nexus: لا يبدو أنه من الممكن الحصول على / استخراج قائمة الامتيازات الخاصة بالمستودع الذي تم إنشاؤه.

تم إنشاؤها على ٣ يونيو ٢٠٢٠  ·  16تعليقات  ·  مصدر: datadrivers/terraform-provider-nexus

اهلا ياجماعة،

هذا طلب تحسين.

بعد إنشاء المستودع ، يقوم Nexus بإنشاء امتيازات لهذا المستودع.
علاوة على ذلك ، في العمل ، قد يحدث أن هناك حاجة إلى إضافة / إرفاق المزيد من الامتيازات بهذا الدور أو ذاك.
ومن المستحيل الآن الحصول على قائمة الامتيازات لمستودع معين.
Use-case: مطلوب دور له امتيازات من مستودعات متعددة.
سيكون رائعًا أن يكون لديك هذا النوع من الميزات. ؛)

يعتبر،
تاراس.

enhancement

ال 16 كومينتر

مرحبًا @ fog1985 ،

هل سيساعد على توفير مصدر بيانات للامتيازات؟ يمكن أن يعود ، بناءً على مرشح مثل domain ، repository أو name ، جميع الامتيازات التي تطابق الفلتر. يمكنك استخدام القائمة التي تم إرجاعها للقيام ببعض الأشياء الأخرى بها.

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

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

مرحبا Nosmoht ،
نعم. سيعمل مثل السحر.

Nosmoht ،
سيكون من الجيد أن يكون لديك إمكانية وجود عوامل تصفية متعددة أو نتائج متداخلة. لأنه يوجد في المستودع أنواع متعددة من الامتيازات. ومن ثم سيكون من الجيد الحصول على امتيازات من النوع repository-view والتي يتم تطبيقها على مستودع this .

مرحبًا @ fog1985 ،

يجب أن يتم إصلاح هذا مع v1.7.0 .

توثيق

توثيق

رائع. شكرا لك Nosmoht

@ fog1985 يرجى إعلامي إذا كان يعمل وما إذا كان بإمكاننا إغلاق المشكلة.

مرحبًا Nosmoht ،
أنا متأكد من أنه يعمل. ليس لديك فرصة لوضع إصدار جديد واختباره على الفور.
أو يرجى تركه لبضعة أيام وسأبذل قصارى جهدي لاختباره في وقت مبكر من الأسبوع المقبل.

مرحبا Nosmoht ،
لقد حاولت للتو استخدامه. وقليلاً من الخلط مع طريقة كيفية الإعلان عن كل الأشياء المطلوبة.
هنا ما لدي:

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

كان يشير إلى هذا الرمز:
https://github.com/datadrivers/terraform-provider-nexus/blob/master/nexus/data_source_privileges.go

يبدو بالفعل أنه يحتوي على قسم privileges .
لكن لست متأكدًا من الفرق بين format على سبيل المثال في إعلان الجذر و format داخل الامتيازات.

ومع ذلك ، أحصل على ما يلي:

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

إذا وضعت actions في الجذر فلا يزال يفشل ذلك actions are not expected here .

مرحبًا @ fog1985 ،

يتم استخدام مصدر البيانات للحصول على قائمة الامتيازات للمستودع المحدد format و type . لذا يرجى إزالة privileges من إقرارك ويجب أن تحصل على قائمة بجميع امتيازات المستودع apt-proxy كقيمة مرتجعة.

مرحبا Nosmoht ،
شكرا. تمكنت من قراءة جميع أسماء الامتيازات على النحو التالي:

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
}

هل هناك طريقة للحصول على امتياز على سبيل المثال ، وهو الإجراء الذي يمثل READ أو WRITE ؟
أو مجرد قائمة بجميع الامتيازات؟

ليس واضحًا أيضًا بشأن هذه المعلمة في كتلة مصدر البيانات:

type = "repository-view"

هل يجب أن يكون تنسيق المستودع أم تنسيق الامتيازات؟
إذا كان تنسيق الامتيازات ، فإنه لا يعمل كما هو متوقع. Cuz with repository-view حصلت على القائمة الكاملة لجميع الامتيازات بما في ذلك تلك التي تهدف إلى الكتابة / التحرير وما إلى ذلك.

سيكون من الجيد أن يكون لديك مثال قصير حول كيفية تصفية إخراج مصدر البيانات إلى بعض القراءة أو الكتابة أو عوامل التصفية الأخرى للحصول على امتيازات.

أعتقد أن الشيء الوحيد الذي يمكننا فعله هو إضافة مرشح اسم مثل name = ".*-read" . لذلك يمكننا استخدام regexp على اسم الامتياز للحصول على الامتيازات المطابقة لـ regexp فقط. هل سيساعدك ذلك؟

اعتقد نعم. هذا من شأنه أن يعمل.
حاولت أيضًا استخدام تسهيل Terrafomr filter . كما هو موضح هنا:
https://www.terraform.io/docs/providers/oci/guides/filters.html
لا يعمل أيضًا.

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

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

نتيجة:

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.

لذلك name سيعمل إذا أمكن.

كحل مؤقت ، توصلت للتو إلى هذا الحل:

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

الذي يعيد امتياز READ . :)

بالنسبة لأولئك الذين قد يبحثون عن الشيء نفسه:

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

بهذه الطريقة ، يمكننا الحصول على ترشيح جيد على أساس actions باستخدام RegExp .
أو حتى اجمع الامتيازات من مستودعات ومصادر بيانات مختلفة باستخدام وظيفة Terraform concat .

مرحبًا @ fog1985 ،

هل يمكننا إغلاق المشكلة وإنشاء طلب ميزة جديدة لمرشح الامتياز؟

مرحبًا @ fog1985 ،

هل يمكننا إغلاق المشكلة وإنشاء طلب ميزة جديدة لمرشح الامتياز؟

مرحبا Nosmoht ،
بالتأكيد.
شكرا لك.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات