Puppet 是否在我的 YAML 数据中评估变量?
Is Puppet Evaluating Variables in my YAML data?
我的 hiera 数据的 yaml 文件中有这个:
wsgi_keystone_conf_contents: |
Listen 5000
Listen 35357
<VirtualHost *:5000>
WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-public
WSGIScriptAlias / /var/www/cgi-bin/keystone/main
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
LogLevel info
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
</VirtualHost>
<VirtualHost *:35357>
WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-admin
WSGIScriptAlias / /var/www/cgi-bin/keystone/admin
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
LogLevel info
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
</VirtualHost>
然后我尝试在我的人偶清单中创建一个 wsgi-keystone.conf
文件,如下所示:
file { '/etc/httpd/conf.d/wsgi-keystone.conf':
ensure => present,
content => $wsgi_keystone_conf_contents,
}
但这会导致文件看起来像这样...
Listen 5000
Listen 35357
<VirtualHost *:5000>
WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=
WSGIProcessGroup keystone-public
WSGIScriptAlias / /var/www/cgi-bin/keystone/main
WSGIApplicationGroup
WSGIPassAuthorization On
LogLevel info
ErrorLogFormat "t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
</VirtualHost>
<VirtualHost *:35357>
WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=
WSGIProcessGroup keystone-admin
WSGIScriptAlias / /var/www/cgi-bin/keystone/admin
WSGIApplicationGroup
WSGIPassAuthorization On
LogLevel info
ErrorLogFormat "t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
</VirtualHost>
上述文件有语法错误,httpd 不会重新启动。我应该如何将数据放入我的 YAML 文件中?我需要转义 %
吗?
简答,是的。
在Hiera中,有interpolation tokens:
Interpolation tokens look like %{variable}
or %{function("input")}
. That is, they consist of:
- A percent sign (%)
- An opening curly brace ({)
One of:
- A variable name
- A lookup function and its input (Hiera 1.3 and later)
- 右大括号
如果配置文件中的任何设置或数据源中的值包含插值标记,Hiera 将在 运行 时用它引用的值替换该标记。
这意味着您的 %{GLOBAL}
与插值标记完全匹配。在您的最终输出中,Puppet 显示变量 GLOBAL
没有值,并且输出空白。
SO 上的 上有一个线程,但我认为这通常不是您想要做的。最好的做法是编写一个 erb 模板,并简单地将值传递给您要放入的模板,而不是配置文件的全部内容。
我的 hiera 数据的 yaml 文件中有这个:
wsgi_keystone_conf_contents: |
Listen 5000
Listen 35357
<VirtualHost *:5000>
WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-public
WSGIScriptAlias / /var/www/cgi-bin/keystone/main
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
LogLevel info
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
</VirtualHost>
<VirtualHost *:35357>
WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-admin
WSGIScriptAlias / /var/www/cgi-bin/keystone/admin
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
LogLevel info
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
</VirtualHost>
然后我尝试在我的人偶清单中创建一个 wsgi-keystone.conf
文件,如下所示:
file { '/etc/httpd/conf.d/wsgi-keystone.conf':
ensure => present,
content => $wsgi_keystone_conf_contents,
}
但这会导致文件看起来像这样...
Listen 5000
Listen 35357
<VirtualHost *:5000>
WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=
WSGIProcessGroup keystone-public
WSGIScriptAlias / /var/www/cgi-bin/keystone/main
WSGIApplicationGroup
WSGIPassAuthorization On
LogLevel info
ErrorLogFormat "t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
</VirtualHost>
<VirtualHost *:35357>
WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=
WSGIProcessGroup keystone-admin
WSGIScriptAlias / /var/www/cgi-bin/keystone/admin
WSGIApplicationGroup
WSGIPassAuthorization On
LogLevel info
ErrorLogFormat "t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
</VirtualHost>
上述文件有语法错误,httpd 不会重新启动。我应该如何将数据放入我的 YAML 文件中?我需要转义 %
吗?
简答,是的。
在Hiera中,有interpolation tokens:
Interpolation tokens look like
%{variable}
or%{function("input")}
. That is, they consist of:
- A percent sign (%)
- An opening curly brace ({)
One of:
- A variable name
- A lookup function and its input (Hiera 1.3 and later)
- 右大括号
如果配置文件中的任何设置或数据源中的值包含插值标记,Hiera 将在 运行 时用它引用的值替换该标记。
这意味着您的 %{GLOBAL}
与插值标记完全匹配。在您的最终输出中,Puppet 显示变量 GLOBAL
没有值,并且输出空白。
SO 上的