我想编写一个脚本来读取其中列出了所有节点的文本文件:
node1 节点2 节点3 。 。 。
它将为节点中的每个节点创建一个.conf文件。 /etc/icinga2/zones.d/master/hosts/new/目录
将文件名Windows-template的内容复制到每个 新的conf文件。
然后在每个conf文件中找到短语“ hostname.hostdomain.com” 并将其替换为文件名减去.conf。例如 对于node1,我将拥有node1.conf,其中有一个短语 “ hostname.hostdomain.com”需要替换为node1
然后ping主机名,该主机名从技术上讲是文件名减 “ .conf”,并用正确的主机名替换10.20.20.1。
我尝试编写脚本,第1部分和第2部分工作,第3部分也工作,但是它用“ $ f”替换了hostname.hostdomain.com,这是不对的。而且我不知道如何做4号。
可以帮忙吗?
谢谢
这是我的windows-template.conf文件:
object Host "hostname.hostdomain.com" {
import "production-host"
check_command = "hostalive"
address = "10.20.20.1"
vars.client_endpoint = name
vars.disks["disk C:"] = {
disk_partition = "C:"
}
vars.os = "Windows"
}
object Zone "hostname.hostdomain.com" {
endpoints = [ "hostname.hostdomain.com" ];
parent = "master";
}
object Endpoint "hostname.hostdomain.com" {
host = "10.20.20.1"
}
这是我的脚本:
#!/bin/bash
cd /etc/icinga2/zones.d/master/hosts/new
while read f; do
cp -v "$f" /etc/icinga2/zones.d/master/hosts/new/"$f.conf"
cp windows-template.conf "$f.conf"
chown icinga:icinga "$f.conf"
sed -i 's/hostname.hostdomain.com/$f/g' "$f.conf"
# git add "$f.conf"
# git commit -m "Add $f"
done < windows-list.txt
谢谢
答案 0 :(得分:2)
您需要在外壳上使用双引号来扩展变量。试试
sed -i "s/hostname.hostdomain.com/$f/g" "$f.conf"
答案 1 :(得分:0)
这对您有用吗?
#!/bin/bash
cd /etc/icinga2/zones.d/master/hosts/new
while read f; do
cp -v "$f" /etc/icinga2/zones.d/master/hosts/new/"$f.conf"
cp windows-template.conf "$f.conf"
chown icinga:icinga "$f.conf"
sed -i "s/hostname.hostdomain.com/$f/g" "$f.conf"
hostname=$( ssh -o StrictHostKeyChecking=no "username@$f" -n "hostname" )
mv "$f.conf" "${hostname}.conf"
# git add "$f.conf"
# git commit -m "Add $f"
done < windows-list.txt
用户名是您的用户名,我假设您将发布密钥复制到主机。