【发布时间】:2021-11-23 01:39:44
【问题描述】:
我想使用 terraform 动态生成一个 sudoers 文件,这里的用户名将根据要求进行更改。
所以我的最终 sudoers 文件应该如下所示。
Sudoers 文件:
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
Cmnd_Alias USRCMDS = /usr/sbin/service ssh restart, /usr/bin/passwd
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
**<username1>** ALL=(root) NOPASSWD: /usr/sbin/service ssh restart, /usr/bin/passwd **<username1>**
**<username2>** ALL=(root) NOPASSWD: /usr/sbin/service ssh restart, /usr/bin/passwd **<username2>**
**<username3>** ALL=(root) NOPASSWD: /usr/sbin/service ssh restart, /usr/bin/passwd **<username3>**
正如您在上面的文件中看到的,username1、2、3 等作为变量传递(这些用户名是字符串列表,这些用户从外部传递给 tf)到 terraform 脚本。
我厌倦了使用 tpl 来生成这个 sudoers 文件并使用 terraform 创建一个 k8s 配置映射。
我尝试了以下代码 sn-p 来实现这一点,但它不起作用。
.tf 文件:
data "template_file" "sudoers" {
count = "${length(var.members_new)}"
template = "${file("${path.module}/tpl/sudoers.tpl")}"
vars = {
members = "${var.members_new[count.index % length(var.members_new)]}"
}
}
resource "kubernetes_config_map" "f1ai_sudoers" {
count = "${length(var.members_new)}"
depends_on = [ helm_release.project ]
metadata {
name = "sudoers-cm"
namespace = kubernetes_namespace.project.metadata.0.name
}
data = {
"sudoers" = data.template_file.sudoers.rendered
}
}
Values.tf:
variable "members_new" {
type = list
default = ["username1", "username2", "username3"]
}
请帮助提出最佳的实施方式。
【问题讨论】:
-
" 但它不起作用" - 不具体。 究竟发生了什么?任何错误信息?错误究竟发生在哪里。
标签: terraform