IPアドレスと名前の異なる複数のノードから起動するためのシェルスクリプト

IPアドレスと名前の異なる複数のノードから起動するためのシェルスクリプト

こんにちは、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構文が正確で適切なオプションを使用したとします。

おすすめ記事