こんにちは、みんな、
これは拡張リクエストです。
リポジトリの作成後、Nexusはこのリポジトリの権限を作成します。
さらに、作業中に、このロールまたはそのロールにさらに特権を追加/アタッチする必要がある場合があります。
また、現在、特定のリポジトリの権限のリストを取得することは不可能です。
ユースケース:複数のリポジトリからの特権を持つロールが必要でした。
この種の機能があると素晴らしいでしょう。 ;)
よろしく、
タラス。
こんにちは@ 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 、
複数のフィルターまたはネストされた結果の可能性があると便利です。 リポジトリ内のCuzには、複数のタイプの特権があります。 したがって、 this
リポジトリに適用されるタイプrepository-view
特権を取得するとよいでしょう。
ドキュメンテーション
いいね。 ありがとう@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
書き込み/編集などを目的としたものを含む、すべての特権の完全なリストを取得しました。
データソースの出力をいくつかのREAD、WRITE、または特権のその他のフィルターにフィルターで除外する方法についての簡単な例があると便利です。
私たちにできることは、 name = ".*-read"
ような名前フィルターを追加することだけだと思います。 したがって、特権名に正規表現を使用して、正規表現に一致する特権のみを取得できます。 それはあなたを助けますか?
私はイエスと思う。 それはうまくいくでしょう。
また、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)))])
}
このようにして、 RegExp
使用して、 actions
基づく優れたフィルタリングを取得できます。
または、さまざまなリポジトリやデータソースからの特権を、Terraformのconcat
関数の使用法と組み合わせることもできます。
こんにちは@ fog1985 、
問題を解決して、特権フィルターの新しい機能リクエストを作成できますか?
こんにちは@ fog1985 、
問題を解決して、特権フィルターの新しい機能リクエストを作成できますか?
こんにちは@Nosmoht 、
もちろん。
ありがとうございました。