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