是否可以将请求 URI 的一部分用作 mod_authnz_ldapRequire ldap-group指令的输入?
我正在尝试动态检查对一堆不同项目目录的访问,所有目录都在http://testserver.com/projects/下,这样访问的用户/projects/abc将被检查cn=abc,ou=groups,dc=test. 理想情况下,我希望在不为每个项目创建单独的 Location 指令的情况下执行此操作,因为很可能有数百个。
我想出了这个,它说明了一般概念,但它不起作用(project_name 不检索实际变量内容):
<Location /projects>
SetEnvIf Request_URI "/projects/([-a-z0-9A-Z_]+)/" project_name=$1
AuthType Basic
AuthBasicProvider ldap
AuthName "Restricted Resource - SVN (LDAP)"
AuthLDAPURL "ldap://127.0.0.1:389/dc=test?uid"
AuthLDAPGroupAttributeIsDN off
AuthLDAPGroupAttribute memberUid
Require ldap-group cn=%{project_name},ou=groups,dc=test
</Location>
Run Code Online (Sandbox Code Playgroud)
帮助?
我有几台戴尔 1U 机架式服务器,我需要暂时将它们移出机架。
他们互相叠在一起是不是很糟糕?
编辑:我想出了我认为最好的方法来解决这个问题。感谢人们回答了我的问题 - 它一路走来。我将发布我的解决方案,以便其他人可以在需要时找到它。
原问题:
我想使用 puppet 来自动配置我们的一些 NFS 文件系统。但是,我希望清单在这样做之前确保它在正确的网络上有一个 IP。
Puppet 通过
interfaces和ipaddress_***事实帮助提供了有关机器分配的 IP 的事实。问题是我需要检查所有接口(我宁愿不对它们的连接方式做出假设)。问题 1:Puppet 可以遍历事实列表吗?例如:
Run Code Online (Sandbox Code Playgroud)for $if in $interfaces { //do something }问题 2:如果 Puppet 可以做到这一点,是否有一种方法可以将字符串评估为变量。
interfaces提供了一种非常好的方式来了解有多少ipaddress_***和network_***变量,但即使我可以遍历它的值,我也需要执行以下操作:Run Code Online (Sandbox Code Playgroud)for $if in $interfaces { $net_var = eval("network_${if}") if $net_var = /^192\.168\.2\.0$/ { //do something } }这可能吗?我是不是完全错了(对 Puppet 来说有点新)?
我最终做了什么:
Puppet 允许您为模块定义自定义解析器函数。这些自定义函数只是 ruby,因此您可以有效地在其中执行任何您想做的事情,包括循环。
你把它们放在<module_dir>/lib/puppet/parser/functions/. 为了做我想做的事,我创建<module_dir>/lib/puppet/parser/functions/has_network.rb了以下内容:
#has_network.rb
require 'ipaddr'
module Puppet::Parser::Functions
newfunction(:has_network, :type => :rvalue) do …Run Code Online (Sandbox Code Playgroud)