[英]How to change some symbols (e.g. “space”) to other symbol in Bash/shell
[英]How to use Dynamic values in Vagrantfile e.g. Shell variables
我有一個簡單的Vagrantfile,它有一些靜態值,例如服務器名稱,主機名和IP地址。 這是我的Vagrantfile。
# -*- mode: ruby -*-
# vi: set ft=ruby :
ENV['VAGRANT_NO_PARALLEL'] = 'yes'
Vagrant.configure(2) do |config|
config.vm.provision "shell", path: "bootstrap.sh"
# Kubernetes Master Server
config.vm.define "kmaster" do |kmaster|
kmaster.vm.box = "centos/7"
kmaster.vm.hostname = "kmaster.example.com"
kmaster.vm.network "private_network", ip: "172.42.42.100"
kmaster.vm.provider "virtualbox" do |v|
v.name = "kmaster"
v.memory = 2048
v.cpus = 2
end
kmaster.vm.provision "shell", path: "bootstrap_kmaster.sh"
end
NodeCount = 2
# Kubernetes Worker Nodes
(1..NodeCount).each do |i|
config.vm.define "kworker#{i}" do |workernode|
workernode.vm.box = "centos/7"
workernode.vm.hostname = "kworker#{i}.example.com"
workernode.vm.network "private_network", ip: "172.42.42.10#{i}"
workernode.vm.provider "virtualbox" do |v|
v.name = "kworker#{i}"
v.memory = 1024
v.cpus = 1
end
workernode.vm.provision "shell", path: "bootstrap_kworker.sh"
end
end
end
以下shell腳本生成IP地址和主機名等,並將其保存到sample.txt文件中。
#!/usr/bin/env bash
#set -e
File=sample.txt
i=0
for ip in 172.42.42.{100..120}
do
echo 172.42.42.{1..10} | grep -q "\<$ip\>" && continue
((i++))
rand=`cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 5 | head -n 1`
if [[ $i -le 1 ]]; then
kmaster="${ip} kmaster${rand}.example.com kmaster${rand}"
if grep -q $kmaster "$File";
then
echo " entery already exist in host file.. skipping entry"
echo -e "\e[01;31mMaster Node is already exist in /etc/hosts file, aborting script execution\e[0m"
exit $ERRCODE
else
echo $kmaster >> sample.txt
echo $kmaster >> master.txt
fi
else
kworker="${ip} kworker$((i))${rand}.example.com kworker$((i))${rand}"
if grep -q $kworker "$File";
then
echo " Entery already exist in host file ... skipping entry"
echo -e "\e[01;31mWorker Node is already exist in /etc/hosts file, aborting script execution\e[0m"
exit $ERRCODE
else
echo $kworker >> sample.txt
echo $kworker >> kworker.txt
fi
fi
done
上面的shell腳本的輸出
172.42.42.100 kmasterHees5.example.com kmasterHees5
172.42.42.101 kworker2CCGET.example.com kworker2CCGET
172.42.42.102 kworker3iyDPN.example.com kworker3iyDPN
172.42.42.103 kworker4vTiDG.example.com kworker4vTiDG
172.42.42.104 kworker5eaINq.example.com kworker5eaINq
172.42.42.105 kworker6cLqPv.example.com kworker6cLqPv
172.42.42.106 kworker7o4gEQ.example.com kworker7o4gEQ
172.42.42.107 kworker8XSHBS.example.com kworker8XSHBS
172.42.42.108 kworker9SMNqc.example.com kworker9SMNqc
172.42.42.109 kworker10sV8LR.example.com kworker10sV8LR
172.42.42.110 kworker11eG3kt.example.com kworker11eG3kt
172.42.42.111 kworker128ZvkB.example.com kworker128ZvkB
172.42.42.112 kworker13su92U.example.com kworker13su92U
172.42.42.113 kworker14sL5lh.example.com kworker14sL5lh
172.42.42.114 kworker158de2K.example.com kworker158de2K
172.42.42.115 kworker16chq6W.example.com kworker16chq6W
172.42.42.116 kworker17OIpHA.example.com kworker17OIpHA
172.42.42.117 kworker18Q4UCF.example.com kworker18Q4UCF
172.42.42.118 kworker19PAahY.example.com kworker19PAahY
172.42.42.119 kworker20GMHHd.example.com kworker20GMHHd
172.42.42.120 kworker2160RK6.example.com kworker2160RK6
下一步是遍歷sample.txt文件並將值保存到變量中。
for i in ` sed s'/=/ /g' sample.txt | awk '{print $1}' `
do
declare ip_addr="$i"
#echo $ip_addr
done
for i in ` sed s'/=/ /g' sample.txt | awk '{print $2}' `
do
declare host="$i"
#echo $link
done
for i in ` sed s'/=/ /g' sample.txt | awk '{print $3}' `
do
declare name="$i"
#echo $name
done
如何將上述腳本中的shell變量(例如$ ip_add或$ host或name $ name)放入Vagrant文件中?
請建議任何有效的解決方案
謝謝
如果你在shell端運行export host
(或declare -x host
),那么你可以在從那個shell啟動的Ruby代碼中引用ENV["host"]
。
順便說一句,編寫代碼的shell端更加合理,類似於以下內容:
export ip_addr host name # mark all three variables for export to the environment
while IFS='= ' read -r ip_addr host name <&3; do # read a line from FD 3
vagrant up 3<&- # and run your vagrant command
done 3<sample.txt # with sample.txt open on FD 3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.