json
  • azure
  • azure-virtual-machine
  • azure-resource-manager
  • azure-vm-scale-set
  • 2017-02-27 6 views 0 likes 
    0

    VMスケールセットで展開されているVM名を参照する方法はありますか?私は、スケールセットの各VMがデプロイされているときにインストールスクリプトを実行するカスタムスクリプト拡張を使用しています。また、スクリプトのパラメータの1つで、VMの名前を使用したいとします。JSONテンプレートのVMSSの仮想マシン名を参照する方法

    "commandToExecute": "[concat('sh ap-cluster-setup.sh -h=',parameters('virtualMachineName'),' -s=',parameters('subnetAddressPrefix'),'')]" 
    

    しかし私はJSONでそれを参照する方法を考えることはできません配備されたときに、スケールのセットでのVM名が動的に作成されているので:単一のインスタンスのためにそれは簡単でした。 VMの命名規則はvmssTemplate_0、vmssTemplate_1などです。ここで、vmssTemplateはVMSSテンプレートのパラメータ( 'virtualMachineScaleSets_name')です。

    答えて

    0

    スクリプト実行時に同じパラメータが各VMに渡されるため、テンプレート自体でこれを行う方法はありません。ただし、スクリプト内からVM名を把握できるはずです。たとえば、Linuxマシンでは、hostnameコマンドを使用すると、VM名が返されます。これはあなたのニーズを満たしていますか?

    +0

    私はこれについて考えましたが、 'hostname'について心配しています。私が知っている限り、VMがデプロイされているときにカスタム拡張がスクリプトを実行するので、このコマンドが利用可能かどうかわかりません。正しい値を返します。しかし、私はそれを試してみる必要があると思う。 –

    0

    ここで、vmssTemplateは、 VMSSテンプレートのパラメータ( 'virtualMachineScaleSets_name')です。

    vmssテンプレートで仮想マシンの名前が定義されています。
    computernameprefix:VMSSは、オートスケールの設定をデフォルトで

    "namingInfix": "[toLower(substring(concat(parameters('vmssName'), uniqueString(resourceGroup().id)), 1, 9))]", 
    

    、およびVMの名前が自動的に作成する必要があります。

    "osProfile": { 
          "computerNamePrefix": "[variables('namingInfix')]", 
          "adminUsername": "[parameters('adminUsername')]", 
          "adminPassword": "[parameters('adminPassword')]" 
          }, 
    

    と 'namingInfix' ここで定義します。

    あなたはVMの名前を取得したい場合は、我々はそれを得るためにPowerShellを使用することができます。

    PS C:\windows> Get-AzureRmVmssVM -ResourceGroupName YOUR_RESOURCE_NAME -VMScaleSetName YOUR_VMSS_NAME 
    

    また、あなたがアップロードした後、あなたのスクリプトで(自分の仮想マシンの名前を取得するには)いくつかのスクリプトを追加することができますカスタムスクリプト拡張へのスクリプト。

    +0

    これは完全に理解でき、私はこのアプローチを利用したテンプレートも見つけました。https://github.com/Azure/azure-quickstart-templates/blob/master/201-vmss-ubuntu-autoscale/azuredeploy.jsonこれがテンプレート内のVMSSの一部であるVM名を参照する方法だとは思わない。これは、VMの接頭辞を設定する単なる方法です。 –

    関連する問題