Thanks for the suggestions. Just following up here. I decided on going with a two fold approach. First I create following job structure:
Job Structure
Base Build
--01. Job
--02. Job
--xx. etc
--99. Conditional Sequence Job
IIS Build
--00. Conditional Catch Job
--01. Job
--xx. etc
SQL Build
--00. Conditional Catch Job
--01. Job
--xx. etc
...Then I create the following computer group structure:
Computer Group Structure
SQL Servers
IIS Servers
etc
...In Job #99, I use the following conditions:
Field: User Defined Token
Operation: is Exactly
Value:
the name of the computer group folder (i.e. SQL Servers, IIS Servers, etc)
Token: %#*"SELECT g.name FROM dbo.computer AS c JOIN dbo.computer_group AS g on c.group_id=g.group_id WHERE c.computer_id='%ID%'"%
...Still in Job #99, I put add a
run script task to each condition that has the following line of code:
REM Placer task to sequence jobs
...this will always exit with an Error code=0 which I then chain the job to the appropriate 00. Catch Sequence Job.
~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Reflection on this Architecture
Benefits:
- I can visually see jobs completed (I'm with Bhawver on need to see a list of completed jobs and not getting confused with which jobs apply and which dont)
- I can stop, start, pause and resume and job in the sequence (very helpful for hardware / network failures)
- I can combo system roles (such as IIS + SQL) manually by completing one role and then kicking off the first job in the second system role
- My jobs conditionally based on Hardware and Platform... This means its easier to manage condition statments instead of having a whole bunch for a single job
- Management of jobs is easy to understand and configure
- Systems management is pivoted on server role, so corporate policies are easier to write
Cons:
- I have to manually move the computer object into the proper group before execution
- I have no feedback mechanism to provide to the user if they didn't add the machine to the proper computer group
- I can not execute a single job without it attempting to continue to execute the rest of the jobs in the sequence
There might be more I'm not considering, but overall it works. I think it's a shame that DS doesn't naturally have these capabilities. I'm still open to suggestions and comments.
Thanks,
jasbro