2016-08-21 2 views
0

セットアップを自動化し、Kubernetesマスターノードのprocessessをインストールするスクリプトを作成しようとしています。 以下のコードで何が間違っているのかわかりません。目標はあまりに簡単です。ワーカーノードの情報です。Linux Shell Scritping - コマンドで変数内の変数

私のスニペットコードを共有させてください。

function create_worker() 
{ 

    echo "Generate the Kubernetes Worker Keypairs ..."; 

    WORKER_NUMBER=3 
    WORKERS_FQDN=("worker1" "worker2" "worker3") 
    WORKERS_IP=("192.168.0.10" "192.168.0.11" "192.168.0.12") 
    MASTER_IP=("192.168.0.20") 
    K8S_SERVICE_IP=10.3.0.1 

    for ((i=0; i <= $WORKER_NUMBER; i++)); 
    do 
    openssl genrsa -out ${WORKERS_FQDN[i]}-worker-key.pem 2048 
    WORKER_IP="${WORKERS_IP[i]}" openssl req -new -key "${WORKERS_FQDN[i]}"-worker-key.pem -out "${WORKERS_FQDN[i]}"-worker.csr -subj "/CN="${WORKERS_FQDN[i]}"" -config worker-openssl.cnf 
    WORKER_IP="${WORKERS_IP[i]}" openssl x509 -req -in "${WORKERS_FQDN[i]}"-worker.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out "${WORKERS_FQDN[i]}"-worker.pem -days 365 -extensions v3_req -extfile worker-openssl.cnf 
    echo ${WORKERS_IP[i]} ${WORKERS_FQDN[i]} 
    sleep 2; 
    done 

    echo "Done ..."; 

    create_adminkey 

} 

そして、ここで出力されます:

+ WORKER_IP= 
+ openssl req -new -key -worker-key.pem -out -worker.csr -subj /CN= -config worker-openssl.cnf 
Error Loading request extension section v3_req 
139752372545168:error:220A4076:X509 V3 routines:a2i_GENERAL_NAME:bad ip address:v3_alt.c:476:value= 
139752372545168:error:22098080:X509 V3 routines:X509V3_EXT_nconf:error in extension:v3_conf.c:95:name=subjectAltName, [email protected]_names 
+ WORKER_IP= 
+ openssl x509 -req -in -worker.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out -worker.pem -days 365 -extensions v3_req -extfile worker-openssl.cnf 
Error Loading extension section v3_req 
140642872743568:error:220A4076:X509 V3 routines:a2i_GENERAL_NAME:bad ip address:v3_alt.c:476:value= 
140642872743568:error:22098080:X509 V3 routines:X509V3_EXT_nconf:error in extension:v3_conf.c:95:name=subjectAltName, [email protected]_names 

私は他の変数内の変数の値を読み、その変数内のコマンドを実行することはできません。

私を助けるための任意のアイデアですか?

おかげ

+0

「他の変数の中の変数の値を読み込みますか?私はこの文脈でこれらの言葉が意味するもの、そしてそれらがあなたの質問にどのように関係しているかを理解していません。あなたはもっと明白かもしれませんか? (大きなOpenSSLコマンドラインを除外し、変数の逆参照に焦点を当てたMCVEを作成すると役立つかもしれません)。 –

+0

どのLinuxシェルを使用していますか? – fpmurphy1

+0

スクリプトに無駄なセミコロンがたくさんあります。シェルはCではありません。 – Jens

答えて

1

あなたは、あなたのループまたは最後の繰り返しの最初の反復でそのエラーを見ているかどうかを言うことはありません。シェルスクリプトの内容に基づいて、後者を想定しています。

私はあなたのスクリプトを簡素化した場合:

echo "Generate the Kubernetes Worker Keypairs ..." 

WORKER_NUMBER=3 
WORKERS_FQDN=("worker1" "worker2" "worker3") 
WORKERS_IP=("192.168.0.10" "192.168.0.11" "192.168.0.12") 
MASTER_IP=("192.168.0.20") 
K8S_SERVICE_IP=10.3.0.1 

for ((i=0; i <= $WORKER_NUMBER; i++)); do 
    echo WORKER_IP="${WORKERS_IP[i]}" 
done 

echo "Done ..."; 

私は出力として参照してください。WORKER_IP=が値を示していた中で最後の反復が、あなたのループで誤った比較ですが原因である

Generate the Kubernetes Worker Keypairs ... 
WORKER_IP=192.168.0.10 
WORKER_IP=192.168.0.11 
WORKER_IP=192.168.0.12 
WORKER_IP= 
Done ... 

for ((i=0; i <= $WORKER_NUMBER; i++)); do 

これは値0、1、2を反復し、3。あなたのリストには、${WORKERS_IP[2]}${WORKERS_IP[0]}を3つの値を、持っている:あなたが持っています。 ${WORKERS_IP[3]}はありません。ループを次のように変更してください。

for ((i=0; i < $WORKER_NUMBER; i++)); do 

...これらの作業は意図した通りに動作するはずです。

さて、これを言った、あなたはおそらくこれを行うことによって、物事をより管理しやすくすることができます

for WORKER_IP in "${WORKERS_IP[@]}"; do 
    echo WORKER_IP="$WORKER_IP" 
done 

これは$WORKERS_IPの長さを追跡する必要はありません。

0

問題が見つかり、次の回避策に従います。

function create_worker() 
    { 

    echo "Generate the Kubernetes Worker Keypairs ..."; 

    WORKER_NUMBER=2 
    WORKERS_FQDN=("worker1" "worker2" "worker3") 
    WORKERS_IP=("192.168.0.10" "192.168.0.11" "192.168.0.12") 
    MASTER_IP=("192.168.0.20") 
    K8S_SERVICE_IP=10.3.0.1 

    for ((i=0; i <= "$WORKER_NUMBER"; i++)); 
    do 
     echo "${WORKERS_IP[i]}" --- "${WORKERS_FQDN[i]}"; 
     openssl genrsa -out "${WORKERS_FQDN[i]}"-worker-key.pem 2048 
     WORKER_IP="${WORKERS_IP[i]}" openssl req -new -key "${WORKERS_FQDN[i]}"-worker-key.pem -out "${WORKERS_FQDN[i]}"-worker.csr -subj "/CN="${WORKERS_FQDN[i]}"" -config worker-openssl.cnf 
     WORKER_IP="${WORKERS_IP[i]}" openssl x509 -req -in "${WORKERS_FQDN[i]}"-worker.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out "${WORKERS_FQDN[i]}"-worker.pem -days 365 -extensions v3_req -extfile worker-openssl.cnf 
     sleep 2; 
    done 

すべて正常に機能しています。

ありがとうございます。

親切にして、