こんにちは、IPファイルと名前を渡して複数のノードで起動しようとしています。以下は私のコードです
出力:ip.txtファイルからIPを取得し、name.txtファイルから名前を取得する必要があります。
IP=`cat ip.txt`
USER="ubuntu"
KEY="test.pem"
NAME=`cat name.txt`
for ip in $IP; do
knife bootstrap $ip -ssh-port 22 --ssh-user $USER --sudo --i $KEY --no-host-key-verify -N $NAME --run-list "role[webserver]"
done
exit $?
答え1
#!/bin/bash
# Read ip.txt and names.txt into arrays 'ips' and 'names'. This assumes that
# the files have the same number of lines, and that both files are in the
# correct order (i.e. line N of ip.txt corresponds to line N of name.txt),
# so that the indices for both arrays match.
mapfile -t ips < ip.txt
mapfile -t names < name.txt
# Don't use all-caps variable names in your own scripts, they're probably already
# used by other programs. $USER certainly is. Use lowercase variable names.
user="ubuntu"
key="test.pem"
for i in "${!ips[@]}"; do
knife bootstrap "${ips[$i]}" -ssh-port 22 \
--ssh-user "$user" --sudo --i "$key" \
--no-host-key-verify -N "${names[$i]}" --run-list "role[webserver]"
done
注:内蔵されていmapfile
ます。bash
の同義語ですreadarray
。
また、注:私はここでこれを実行しないので、あなたのコマンドが好きなように動作するかどうかはchef
わかりません。knife bootstrap
構文が正確で適切なオプションを使用したとします。
答え2
最新のスクリプトの使用強く打つ:
ip=$(< ip.txt)
user="ubuntu"
key="test.pem"
name=$(< name.txt)
for i in $ip; do
knife bootstrap $i -ssh-port 22 \
--ssh-user $user --sudo --i $key \
--no-host-key-verify -N $name --run-list "role[webserver]"
done
それが何であるかよくわかりません。
"role[webserver]"
連想配列の値の場合は、次のように作成する必要があります。
"${role[webserver]}"
答え3
実際、2つの異なるファイルから$ IPと$ NAMEを渡して、次の形式で出力を取得しようとしています。
1.1.1.1 ウェブサイト 1
2.2.2.2 Webページ2
3.3.3.3 Webページ3