Lately I have been spending a great deal of time with the System Center Virtual Machine Manger Service model and building Service Templates.
Just understanding what the Service model is, and how it takes the SCVMM VM composition model and brings it up to the enterprise / distributed application level helps you understand where MSFT is headed. To continue this evolution, take a look at the v1 of Desired State Configuration that has been announced in Server 2012 R2. But that was a bit off topic.
In the title I mention “system” Service Settings.
If you have spent any time with building SCVMM Service Templates you know that you can define many settings by using the “@MySetting@” notation. When you deploy your Template and it becomes a running Service whomever is deploying is prompted to fill in the Settings you have defined.
This is excellent, now I have the ability to build a template, give it to you and you can personalize it for your environment. I have one example back here where I built a template for the first domain controller in a domain.
Now, that is all fine and dandy. But what if you need to know ‘something’ about all the other Tiers in the Service. Such as; “who are the machines in Tier Q?” Why; '”Because I need to configure an application on this machine to talk to them.”
Before going farther, understand what when SCVMM executes the application scripts in a Service Template as it is being deployed, the scripts within a single machine all run inside the bubble of that machine. They only know about themselves. But most enterprise applications need to know about something other than them. These are big, scaled-out, distributed applications with multiple server roles that all need to talk to each other.
Well, this is where (courtesy of a MSFT PM, who gave approval for me to write this) I ran across some undocumented Service Settings. These are Service settings that SCVMM fills in during the “Refresh Preview,” instead of prompting your customer; and will process during the deployment.
In my last post I wrote about turning a string into XML. My sample string was from the Service Setting; @ServiceVMComputerNames@.
- @ServiceVMComputerNames@ – Each Tier in the Service and the ComputerName within them. In my mind, this is the handiest. And you can get very similar information from the Azure Service.Runtime within a PaaS VM.
This gives you a string with the name of each Tier in your Service and the ComputerNames within it. It is handy information. In the follow-up post I will give my entire solution to passing and parsing this.
Other system Service settings that SCVMM can directly pass include:
- @ComputerName@ – the computer name assigned to the VM.
- @ServiceName@ – the name of the deployed Service the VM is a member of
- @VMID@ – the GUID of the VM in SCVMM
- @ServiceID@ – the GUID of the Service in SCVMM
There may be more. As far as I can tell, these are not documented at this time. And it takes a bit of work to discover them and the formatting.