Thursday, October 1, 2015

There's a new cloud in town, Part 4 How to reset ICMWO 4.3 to reinstall a cloud

After making sure ICMWO (IBM Cloud Manager With OpenStack) had the correct fixpack installed, the installation and configuration of ICO 2.5 succeeded and is working fine. I'm able to deploy individual VMs and Heat stacks to an OpenStack cloud. I've only created a small vSphere cloud, and I believe that's the reason that I haven't had much success getting ICMWOS to work with that cloud (I can launch instances, but those instances can't see their operating system). But I've learned several useful pieces of information through the process. I'll list the most important one here, and I'll write a new post for each of the others.

How to "reset" ICMWO to reinstall a cloud

While you're kicking the tires (or even installing into a production environment), you will certainly encounter the need to try to re-deploy a cloud. This "reset" functionality isn't made available from the GUI, and really involves doing some things outside of ICMWO. Happily, ICMWO doesn't install anything on your vCenter or ESXi servers (the controller uses the appropriate vSphere APIs through the vCenter server to do all the dirty work). So, to reset things so you can re-deploy a vSphere cloud, you need to:

1. Delete and re-create the "controller" node that you previously specified. This is the server that ICMWO deployed OpenStack to. You created this server specifically for this purpose based on the topology requirements of ICMWO. My entire environment is running under VMWare Workstation, so I simply took a snapshot of this VM once I had the OS installed and configured, so I could revert to that snapshot before each successive attempt.

2. Next, you need to delete the TWO Chef resources associated with the controller. There is a NODE and a CLIENT that have been created for the controller. To delete those, you need to run the following two commands (where "" is the FQDN of the controller for your VMWare cloud):

knife client delete
knife node delete

3. Finally, to delete the cloud from ICMWO Deployer GUI (, you need to log into the ICMWO server (via the console, ssh, VNC, etc.) as the same user you use to log into the Deployer GUI and delete a directory. The name of the directory contains the name of the cloud that you specified in ICMWO when you deployed the cloud and the datetimestamp when it was created. The directory is under:


And the name will be "cloudName_datetimestamp". So to delete the cloud named "vc55" from my GUI, I needed to run this command:

rm -rf ~/icm/clouds/vc55_2015-09-29_173201

And now ICMWO is ready to allow you to try to deploy a cloud to that node. I don't know if this name is stored anywhere else, so the safest route in my opinion is to use a different name for the new cloud.

Monday, September 28, 2015

There's an updated cloud in town Part 3: Reinstalling everything

The prerequisite checker doesn't check the ICMWO fixpack

ICO 2.5 has a great prerequisite check script, but I found out the hard way that it doesn't check to make sure you have the correct ICMWO fixpack installed (fp 2 or later is required). Specifically, what I got was a crash of the script, rather than anything useful. Even after I made it so the script didn't crash, the error still didn't directly point to the fact that I had forgotten to install the fixpack. Here's the failure message I received at the end of the output:

Traceback (most recent call last):
  File "/mnt/hgfs/ico25/ico_install/installer/", line 347, in <module>
    if not validator.validate(param_dict, prereq, log_file) and not os.path.exists("/tmp/skip-checking"):
  File "/mnt/hgfs/ico25/ico_install/installer/validator/", line 74, in validate
    openstackServices.validate(params, response1, messageValidator)
  File "/mnt/hgfs/ico25/ico_install/installer/validator/", line 70, in validate
    if not user_response:
UnboundLocalError: local variable 'user_response' referenced before assignment

I edited line 70 of to allow it to at least complete correctly, and this was the error message at that point:

 -  Checking that the following services are available: ['cinder', 'glance', 'nova', 'neutron|nova network']
   -  Status: Failed
   -  The following services must be available and running : ['cinder', 'glance', 'nova', 'neutron|nova network']
ERROR: The cinder service API is not enabled
   -  User response: Ensure that the openstack services are available

All of those services were running, but it jarred me into remembering that I hadn't installed FP3. Once I installed the fixpack, the prereq checker script and install were able to complete successfully.

Verifying you ran correctly

To verify that you ran the script correctly on your servers, open the OpenStack Dashboard (https://openstack_controller) and navigate to IDENTITY->Domains, then click the down arrow far to the right of a domain and select Edit Domain to get this dialog:

Specifically, notice that there are 5 tabs: Domain Information, Domain Members, Domain Groups, Domain Administrators, Quota and Availability Zones. This is how it should look. If it doesn't, you did something wrong in running the script. I think my problem was that I ran it twice on my controller - once with the "master_controller" option and once with the "controller" option. I should have only run it ONCE, with the "master_controller" option.

You will need to go to the Availability Zones tab and add the "nova" availability zone to the Default domain.

Also navigate to IDENTITY->Projects and click the down arrow to the far right of the "admin" project, then select Edit project and you should see this dialog:

Notice that it has an Availability Zones tab. Again, that is not there if the scripts didn't run correctly.

And now for the project (similar to the domain above), you will need to go to the Availability Zones tab and add the "nova" availability zone to the projects you'll be working with through ICO.

Thursday, September 24, 2015

There's an updated cloud in town Part 2: Still Installing ICO 2.5

A few more hurdles overcome as I get closer to getting ICO 2.5 installed.

Some RHEL 7 notes

The firewall in RHEL7 (and 7.1) is not iptables. Instead, it's the firewalld service that's controlled by systemd. I'm not sure which install option causes it to be configured because it wasn't running on all of my RHEL 7.1 systems. Anyway, to turn it off, you can run:

systemctl stop firewalld
systemctl disable firewalld

In my case, it was blocking port 53 (dns), which I needed open to configure the vCenter server (next section). I first just used Applications->Sundry->Firewall to open port 53, then realized that I could just turn it completely off in my test environment so I don't hit any more problems with it.

Installing vSphere 6.0 Without a Windows Machine

I decided to also install vSphere 6.0 to use that as a testbed, and that has a few challenges. Specifically, the vCenter Server Appliance (VCSA) no longer ships directly as a .OVA file. It is now an ISO file that you're supposed to mount and run on a Windows machine to remotely install the vCenter Server Appliance on a remote ESXi server.

I didn't want to get a Windows machine involved if at all possible, and it turns out to be fairly straightforward to do this. You will find 99% of the instructions in this great article:

Specifically, the .OVA file can be found in the .ISO file that you download from VMWare. It just doesn't have a .ova extension. So you need to extract the file, change the name to include the .ova extension, and then you're mainly off to the races. HOWEVER, you have to do ONE MORE THING to actually get it working. Specifically, you need to add this additional line to the end of the .vmx file after you import the .ova file:""

Set the value appropriately for your network. If you don't add this, the VM will start up, but will have the error:

Failed to configure network

And I couldn't find a way to fix that in the VM as it stood. I updated the DNS settings, rebooted the server, did lots of other things, etc., and it still just showed that error. So I knew I would have to recreate the VM from the OVA file, but needed to figure out how to set the DNS server of the VM from the VMX file.

So I mounted the VCSA ISO file on Linux and ran the following command at the root of it:

grep -r guestinfo.cis *

Somewhat amazingly, that came back within seconds and I found all of the settings from the linked article, and then I searched for "dns" and found the above REQUIRED setting.

I didn't have a "good" DNS server on my network, so I quickly created a DNS server on one of my RHEL7.1 systems. It's REALLY easy to do this if you have all of your hosts in the /etc/hosts file. You just need to run the command:

service dnsmasq start

systemctl start dnsmasq

(Edit 9/26: I changed the above command to use the systemd mechanism for starting the service)

And that's it. You now have a DNS server.

You still NEED a Windows machine for vSphere

I thought that the vSphere Web Client would allow me to just use a browser, but that's not quite right. the web interface requires Flash, and really only supports Windows or MacOS clients. So I've had to bring a Windows machine into the mix anyway.

Wednesday, September 23, 2015

There's an updated cloud in town Part 1: Installing ICO 2.5

IBM Cloud Orchestrator 2.5 was recently released, so I'm installing it in my lab. This new release is based on IBM Cloud Manager with OpenStack 4.3, so quite a bit has changed. This series of posts will discuss some of the issues with installation and overall thoughts as I go through.

Wrong Version of IBM Cloud Manager 

IBM Cloud Manager is included in the eAssembly for ICO, but it's not the required level! The Cloud Manager files included with ICO are JUST version 4.3. However, version 4.3 with at least fixpack 2 is what's required. So after installing Cloud Manager, you will need to go to IBM Fix Central to download Cloud Manager 4.3 fixpack 3, which was released after ICO 2.5.

Cloud Manager: Additional YUM Repository Needed for KVM

If you're deploying a KVM cloud to Red Hat 7 or 7.1, you will need to enable the Red Hat "Optional" repository to have access to several python packages, including python-zope-interface and python-pyasn1-modules.

If your target machines don't have access to the Red Hat Subscription Network, you can get around this by downloading Fedora 19 and add it as a Yum repository. But the Fedora ISO doesn't include the python-pyasn1-modules rpm. So you'll need to download that and add it to a local repository on the ICM Deployer machine. I used the 'createrepo' command to create the repository under /opt/ibm/cmwo/yum-repo/operatingsystem/redhat7.1/x86_64/optional .

I downloaded the Fedora 19 ISO from here:

And I downloaded the python-pyasn1-modules RPM from here: I think a better link is:

I didn't need any other packages - the Fedora 19 ISO and the python-pyasn1-modules RPM gave my install everything it needed.

Monday, July 6, 2015

Loading the SCCD 7.5.1 Demo Content Package into SCCD (ICD) 7.5.3

This tip is specifically for SCCD 7.5.3.


When trying to install the SCCD 7.5.1 Content Pack into SCCD 7.5.3, you'll get an error about the column named GMAPSDISTANCEMATRIX. Specifically, the error will state that there is no default value and no values for that column in the data. The first round of errors come from the Data/SCCD_SI_MAPMANAGER.xml file in the content pack. If you manually download the content pack, you can view the file to see that the data it's complaining about really isn't there. And once you fix the errors found in that file, there are other errors.


Since this is just demo data on a demo system, I figured it was OK to modify the offending Maximo objects, and the modifications worked to eliminate the error and allow me to go through all of the scenarios. You should be on a demo system, so you should be OK with that stipulation.

To workaround the problem, you need to make two different types of database modifications within Maximo.

First, turn on Admin mode.

, you need to mark that the following attributes are NOT required:


Go To Applications->System Configuration->Platform Configuration->Database Configuration and search for the MAPMANAGER object:

Select the object found and look for the each one of the listed attributes Attribute. You'll need to go to the second page of attributes to find SPATIALDISTANCEMATRIX.

You can then de-select "Required?" flag which will make it a non-required attribute (which corresponds to a column in the database). Once you've done this for the four attributes, click the Save button.

Now open the ASSET object and you need to add an attribute named AMCREW. Go into the ASSET object and add a new row named AMCREW. All of the default values work fine. This attribute won't hold any data - it just needs to be there.

Then go back to "List View" and select "Apply Configuration Changes on the left under "More Actions":

Once the process completes, you should see dialogs similar to the following:

At this point you can successfully install the content pack.

Tuesday, June 30, 2015

IBM Performance Management 8.1.1 is GA!

IBM® Performance Management is a comprehensive solution that helps manage the performance and availability for complex applications that might be running in a data center, public cloud, or hybrid combination. This solution provides you with visibility of your applications, ensuring optimal performance and efficient use of resources.
The Performance Management solution collects data from both Performance Management agents and Tivoli® Monitoring agents. Data is displayed in the Application Performance Dashboard for both Performance Management agents and their hybridized Tivoli Monitoring counterparts.

The IBM Performance Management solution has four offerings:

  • IBM Application Performance Management Advanced combines IBM MonitoringIBM Application Performance Management, and IBM Application Diagnostics into one offering.
  • IBM Application Performance Management for end user experience, transaction tracking, and resource monitoring of all your application components. Application Performance Management is useful for managing your critical applications in production.
  • IBM Monitoring for resource monitoring of infrastructure, application components, and cloud workloads. Resource monitoring helps you identify and address slow transactions, capacity issues, and outages.
  • IBM Application Diagnostics for code level visibility into your applications and the health of your application servers. Use the diagnostics dashboards to find performance bottlenecks in application code.

A new piece of documentation included with this release is the Scenarios guide. There is currently only one scenario documented, but it is very detailed and represents the most common scenario by far.

Friday, June 19, 2015

Live Video Presentation: ITM Nugget: Overview of how to retrieve enterprise wide information in one simple output

IBM's Mark Leftwich has made a great video on how you can pull enterprise wide information in one simple step. These techniques and examples are great for audits, sanity checking monitoring and problem diagnosis work:

Thursday, June 18, 2015

A great document from IBM on integrating SCCD processes with traditional Maximo asset management functions

IBM Control Desk (previously named SCCD - SmartCloud Control Desk) is Maximo, but because it provides several additional customizations to Maximo, many traditional Maximo developers are intimidated by it. But that shouldn't be the case. Like other Maximo additions (Maximo for Oil and Gas, etc.), ICD is mainly a collection of additional pages (officially named "applications") that access the same Maximo database that you know and love. It does deal with some different objects (tables) in the database, but it's all the exact same architecture. And while it does add new workflows and a few other things, these are all really just "normal" Maximo customizations. It just happens to be that ICD contains quite a few of these customizations, and that's why IBM packages it as its own product.

Have a look at this paper for more information on the use of automated vs manual processes when dealing with ICD and asset management:

IBM's TCR Community

Reporting is an indispensable part of your IT implementation. Check out IBM's Tivoli Common Reporting community for tips, tricks and updates on this tool that's included with nearly all IBM ITSM products:

Thursday, June 4, 2015

DASH Customizations with data from ITNM and TBSM

Jason Shamroski is creating some custom dashboards for a customer this week using DASH, TBSM and a component developed by IV Blankenship for pulling ITNM topology data into DASH.

Tuesday, May 19, 2015

Video - Creating a REST Service with Tivoli Directory Integrator (TDI)

Tivoli Directory Integrator is a truly amazing tool. It has all of the plumbing in place to connect to numerous datasources and to automatically transform endless types of data. Plus it's included with many IBM products. Your company probably owns a license for it, and you're probably not leveraging even a fraction of its capabilities. 

Monday, May 18, 2015

Video - Integrating data with SmartCloud Control Desk (SCCD) using TDI

It's a little old, but still absolutely valid. TSRM is one component of IBM's SCCD offering, and it still has the same architecture that it had in 2008. TDI has some new features, but it still has the same architecture and the process is still the same for integration.

Tuesday, May 12, 2015

Wednesday, May 6, 2015

Wednesday, April 29, 2015

IBM Monitoring v8.1is Available - the next generation of Application-Aware Infrastructure Monitoring

Announcing IBM Monitoring v8.1 - the next generation of Application-Aware infrastructure monitoring solution that simplifies the life for IT Ops. With a single end to end view of metrics and logs/errors collected across the application stack, IT operators can detect problems and troubleshoot in the context of the application always. They no longer need to struggle to understand which component belongs to which application or which application's performance will be impacted due to a failed infrastructure component. It is able to monitor any component hosted anywhere (public cloud, private cloud or on premises) and visualize the end to end app stack in a unified hybrid view.
We have significantly simplified the time it takes to set up and get going. In under 30 minutes you can get a complete monitoring infrastructure up and running on a single box.
Here are some of the key capabilities:
  • Offers hybrid management, delivering a single integrated management view across on premises and cloud environment
  • Delivers application-aware infrastructure monitoring by monitoring user response time as well as the health of application components such as the application server or runtime, databases, web servers, middleware stacks, and more, for applications covering cloud and traditional workloads
  • Offers huge breadth of coverage spanning from traditional enterprise technologies such as java, .NET to cloud technologies such as Node.js, Ruby, PHP etc
  • Includes search analytics capabilities for unlimited monitoring data, plus up to 2 gigabytes of external log data per day.
  • 'Predicts' outages instead of detecting them using integrated Predictive Insights
  • Includes a simple unified, easy to maintain architecture that can be deployed in minutes and can help reduce total cost of ownership by up to 30% and improve time to value 5x-10x.
  • Enables seamless expansion of capabilities with IBM Control Desk, IBM Operations Analytics, and IBM Netcool® Operations Insight

New TBSM video available - Setting SSL debug tracing in a TBSM environment

Setting SSL debug tracing in a TBSM environment

Video - Using Netcool/Impact to display data from Web Services in JazzSM Dashboard

Tuesday, April 28, 2015

IEM Patch Management for Windows Application Updates now supports Adobe Digital Editions

IBM Endpoint Manager Patch Management for Windows Application Updates has announced that support for Adobe Digital Editions is now available in the Updates for Windows Applications site.
Use the following Fixlets:
  • 4000000: Adobe Digital Editions 4.0.3 Available
    This Fixlet updates Adobe Digital Edition to version 4.0.3 on endpoints in your deployment.
  • 4000001: Adobe Digital Editions - Multiple Versions Installed - ADE 2.0 and Later
    Use this Fixlet when one endpoint in your deployment has several different versions of Adobe Digital Edition. The Fixlet retains the latest version of Adobe Digital Editions and uninstall the earlier versions in the endpoint.
  • Fixlet 4000000: Adobe Digital Editions 4.0.3 Available
  • Fixlet 4000001: Adobe Digital Editions - Multiple Versions Installed - ADE 2.0 and Later
For more information about the products and the types of updates that are supported by Patch Management for Windows Application Updates, see the Supported Applications and Languages wiki page:!/wiki/Tivoli%20Endpoint%20Manager/page/Supported%20Applications%20and%20Languages.
Actions to Take:
Use the Fixlets applicable to your deployment.
Published site version:
Updates for Windows Applications site, version 767.

Friday, April 24, 2015

Customizing ITNM->TBSM Integration

This week at a customer site we've been customizing the integration of ITNM data into TBSM. While the ITNM DLA provides topology data, this large customer needed more detailed information. Some highlights of the work done:

We integrated ITNM with TBSM using a policy and the XMLToolkit. The requirement was to represent the MPLS VPNs in a service tree and show the VPN Type, VPN Name, devices used in the VPN and the interfaces on the devices. ITNM does not represent the data this and default import using the DLA didn't give us what we wanted or needed.

We started scouring the ITNM Oracle database and found the entityID's for the devices and worked from there to find the devices, interfaces and vpn names and types and then built the service tree hierarchy based on the SQL query. This process created book that the XMLtoolkit read (API data).

We can provide innovative solutions for you, too. Contact Tony Delgross at to get the ball rolling.

Wednesday, April 22, 2015

What are some time-saving tips that every Linux user should know?

Here's the link

I ran across this information while browsing, a crowdsourcing site for answering everyday questions from normal people. It's a very active community with some good gems of information.

Monday, March 30, 2015

Impact recently released

And we've been able to do some pretty amazing stuff with it. Specifically, we've been able to pull ITNM multi-parent topology information into DASH using an Impact policy and display that data without using Java - only HTML5/JavaScript/CSS. Here's a screenshot of that data in DASH:

This is a better view of the data, with correct icons and state information:

Cloud Computing Simplified

IBM really produces a TON of great information on all computer-related topics. One they recently released is this redpaper on Cloud Computing, available here: . From the abstract:

"Starting with the basic building blocks of cloud computing, we cover a wide range of cloud topics in this book. We do not go into details of specific cloud products on the market, so this book serves as a cloud primer for readers who are new to this exciting technology. If you are already familiar with the fundamentals of cloud computing and would like to explore more advanced cloud topics, you can still benefit from this book. Each section is independent of the others, so it is OK to skip the sections you are familiar with and go directly to the section you’d like to read first"

Thursday, January 29, 2015

ICO all-in-one deployment doesn't install Workload Deployer

The ICO 2.4 and Deployment Server installers are definitely great pieces of software. They check prerequisites correctly and install without a hitch. They are really, really nice.

This post is about one of the options in the 'ds wizard' script options. Specifically, when you take the path:

[0] New IBM Cloud Orchestrator deployment.
[0] Demo
[1] All In One
[2] All In One IBM Cloud Orchestrator Deployment
   - Deploys IBM Cloud Orchestrator all-in-one in one machine.

This path actually deploys the template sco-devstack (/opt/ico_install/topology_templates/sco_devstack.json), which does NOT install the IBM Workload Deployer component. The effect that this has is that you do NOT have a PATTERNS option in the Administrator GUI (https://machine.fqdn:8443/), and so you can't create, view or use any patterns.

So if you want an all-in-one deployment, you should take a different option. Specifically, the path you should take through the wizard is:

[0] New IBM Cloud Orchestrator deployment.
[0] Demo
[1] All In One
[2] All In One IBM Cloud Orchestrator Deployment 
[0] All In One with addtional KVM compute node
   - Deploys IBM Cloud Orchestrator all-in-one KVM topology with an additional KVM compute node where components use a shared 
   - internal database.

And when it asks you for the FQDNs of the three servers, specify the FQDN of the ONE server that you'll be using in each of those three places.

Tuesday, January 27, 2015

A BIG note about running ICO

I successfully installed ICO using 2 machines:

1: Deployment Server (where I could then run the 'ds wizard' command)

2: My all-in-one deployment to a KVM hypervisor.

Both machines are running RHEL 6.5 and have lots of CPU, RAM and disk.

My HUGE problem after install was that the Deployment Server automatically started an unnecessary dnsmasq process. And because of this, I could not create any new instances. Every time I tried, I got errors similar to the following in /var/log/nova/compute.log (and similar in network.log also):

2015-01-27 13:29:14.987 19521 ERROR oslo.messaging.rpc.dispatcher [-] Exception during message handling: Remote error: ProcessExecutionError Unexpected error while running command.
Command: sudo nova-rootwrap /etc/nova/rootwrap.conf env CONFIG_FILE=["/etc/nova/nova.conf"] NETWORK_ID=3 dnsmasq --strict-order --bind-interfaces --conf-file=/etc/dnsmasq.conf --pid-file=/var/lib/nova/networks/ --listen-address= --except-interface=lo --dhcp-range=set:franknet,,static,,120s --dhcp-lease-max=256 --dhcp-hostsfile=/var/lib/nova/networks/nova-br1002.conf --dhcp-script=/usr/bin/nova-dhcpbridge --leasefile-ro --domain=novalocal --no-hosts --addn-hosts=/var/lib/nova/networks/nova-br1002.hosts
Exit code: 2
Stdout: u''
Stderr: u"2015-01-27 13:29:13.983 10307 INFO nova.openstack.common.periodic_task [req-0d06a702-1f2a-4b95-a8f3-0f8665d4c83b None None] Skipping periodic task _periodic_update_dns because its interval is negative\n2015-01-27 13:29:13.985 10307 INFO [req-0d06a702-1f2a-4b95-a8f3-0f8665d4c83b None None] Loading network driver ''\n2015-01-27 13:29:13.986 10307 DEBUG nova.servicegroup.api [req-0d06a702-1f2a-4b95-a8f3-0f8665d4c83b None None] ServiceGroup driver defined as an instance of db __new__ /usr/lib/python2.6/site-packages/nova/servicegroup/\n2015-01-27 13:29:14.107 10307 DEBUG stevedore.extension [-] found extension EntryPoint.parse('file =') _load_plugins /usr/lib/python2.6/site-packages/stevedore/\n2015-01-27 13:29:14.121 10307 DEBUG stevedore.extension [-] found extension EntryPoint.parse('file =') _load_plugins /usr/lib/python2.6/site-packages/stevedore/\n\ndnsmasq: failed to create listening socket for Address already in use\n"
[u'Traceback (most recent call last):\n', u'  File "/usr/lib/python2.6/site-packages/oslo/messaging/rpc/", line 134, in _dispatch_and_reply\n    incoming.message))\n', u'  File "/usr/lib/python2.6/site-packages/oslo/messaging/rpc/", line 177, in _dispatch\n    return self._do_dispatch(endpoint, method, ctxt, args)\n', u'  File "/usr/lib/python2.6/site-packages/oslo/messaging/rpc/", line 123, in _do_dispatch\n    result = getattr(endpoint, method)(ctxt, **new_args)\n', u'  File "/usr/lib/python2.6/site-packages/nova/network/", line 193, in deallocate_for_instance\n    super(FloatingIP, self).deallocate_for_instance(context, **kwargs)\n', u'  File "/usr/lib/python2.6/site-packages/nova/network/", line 563, in deallocate_for_instance\n    instance=instance)\n', u'  File "/usr/lib/python2.6/site-packages/nova/network/", line 246, in deallocate_fixed_ip\n    address, instance=instance)\n', u'  File "/usr/lib/python2.6/site-packages/nova/network/", line 980, in deallocate_fixed_ip\n    self._teardown_network_on_host(context, network)\n', u'  File "/usr/lib/python2.6/site-packages/nova/openstack/common/", line 249, in inner\n    return f(*args, **kwargs)\n', u'  File "/usr/lib/python2.6/site-packages/nova/network/", line 1906, in _teardown_network_on_host\n    self.driver.update_dhcp(elevated, dev, network)\n', u'  File "/usr/lib/python2.6/site-packages/nova/network/", line 1004, in update_dhcp\n    restart_dhcp(context, dev, network_ref)\n', u'  File "/usr/lib/python2.6/site-packages/nova/openstack/common/", line 249, in inner\n    return f(*args, **kwargs)\n', u'  File "/usr/lib/python2.6/site-packages/nova/network/", line 1118, in restart_dhcp\n    _execute(*cmd, run_as_root=True)\n', u'  File "/usr/lib/python2.6/site-packages/nova/network/", line 1211, in _execute\n    return utils.execute(*cmd, **kwargs)\n', u'  File "/usr/lib/python2.6/site-packages/nova/", line 165, in execute\n    return processutils.execute(*cmd, **kwargs)\n', u'  File "/usr/lib/python2.6/site-packages/nova/openstack/common/", line 196, in execute\n    cmd=sanitized_cmd)\n', u'ProcessExecutionError: Unexpected error while running command.\nCommand: sudo nova-rootwrap /etc/nova/rootwrap.conf env CONFIG_FILE=["/etc/nova/nova.conf"] NETWORK_ID=3 dnsmasq --strict-order --bind-interfaces --conf-file=/etc/dnsmasq.conf --pid-file=/var/lib/nova/networks/ --listen-address= --except-interface=lo --dhcp-range=set:franknet,,static,,120s --dhcp-lease-max=256 --dhcp-hostsfile=/var/lib/nova/networks/nova-br1002.conf --dhcp-script=/usr/bin/nova-dhcpbridge --leasefile-ro --domain=novalocal --no-hosts --addn-hosts=/var/lib/nova/networks/nova-br1002.hosts\nExit code: 2\nStdout: u\'\'\nStderr: u"2015-01-27 13:29:13.983 10307 INFO nova.openstack.common.periodic_task [req-0d06a702-1f2a-4b95-a8f3-0f8665d4c83b None None] Skipping periodic task _periodic_update_dns because its interval is negative\\n2015-01-27 13:29:13.985 10307 INFO [req-0d06a702-1f2a-4b95-a8f3-0f8665d4c83b None None] Loading network driver \'\'\\n2

Once I killed the offending dnsmasq process, I could successfully create instances.


Saturday, January 24, 2015

How to remove a bridged network interface in Red Hat Linux

So ICO 2.4 requires the Deployment Server machine to have interface br0 defined as a bridge connected to eth0. However, ICO does NOT want br0, but wants eth0. I had already created br0 using the virsh command, so I had to look up how to remove it, and it's very simple once you find it:

virsh iface-unbridge br0

and that's it. It puts all of the configuration back on eth0 and you're in business.

Friday, January 23, 2015

I'm giving up on ICO 24 on RHEL 6.6

After installing the Deployment Service (which gives you the ds command), I tried to deploy an all-in-one ICO environment, and it failed very badly. So badly that multiple components stopped running and there was no recovering from it. So I'm now starting over with RHEL 6.5.

Thursday, January 22, 2015

Getting IBM Cloud Orchestrator to install on Red Hat Enterprise Linux 6.6

This is probably fixed in ICO 2.4.1, but in 2.4, you need to modify a file to get the installation to work on RHEL 6.6 because it believes that only RHEL 6.4 and 6.5 are supported. You'll encounter an error when you run through the ds wizard command.

The file you need to update (after installing the Deployment Service) is:


In that file, you'll see multiple stanzas similar to this:

             "os": {
                        "release": "Red Hat Enterprise Linux Server release",
                        "arch": "64",
                        "version": ["6.5","6.4"]

You need to update the line that contains "version" to be:

                        "version": ["6.6","6.5","6.4"]

And then the wizard can complete.

Some background:

I found this because I saw the error: 

"DeployTaskFailed: Failed to execute deployment task: deploy-precheck, error message: precheck failed on ico24demo.mynet.fooincorrect os version,expected:['6.5', '6.4']actually:6.6\n\n"

And I ran the following command in multiple directories:

grep -r "6\.5" *

until I found the file I needed to change.

Configuring RHEL prerequisites for IBM Cloud Orchestrator 2.4


The first basic requirement for your systems when deploying ICO 2.4 is to have DNS name resolution working correctly. For some reason or another, this is the area that has the largest number and most frequent problems in every single enterprise. So this short post is meant to help you get something going quickly, normally in a test environment, until you can communicate with your networking team to get the problems solved permanently.

My Simple Environment

My test environment is the demo configuration with one RHEL 6.6 server with 8 cores and 32GB of RAM, with KVM for virtualization.

Setting Your Hostname

You need to set your hostname to a Fully Qualified Domain Name (FQDN), and in a test environment, the format just needs to be correct - the actual name doesn't have to be registered anywhere. For example, I named my host I don't care if .foo is a valid root or not because I get to make the rules in my own environment.

To permanently set your hostname to an FQDN if you didn't do it at install time, you need to edit the file:


and set:


If you don't want to reboot to have it set, also run the following as root:

hostname your.full.fqdn

Update Your Hosts File

You also need to update your /etc/hosts file with your hostname and IP. So edit /etc/hosts and add that information for your host. In my environment, my hostname is and my static IP address is So here's my /etc/hosts entry:   ico24demo

Start dnsmasq

dnsmasq is a simple DNS server (and DHCP and some other things) that we'll configure locally for name resolution.

I picked a pretty standard installation for my Red Hat server (software development system with all of the Virtualization options selected), and it automatically installed the dnsmasq-2.48.14.el6.x86_64 package. You can check to see if you have this package installed with:

rpm -q -a | grep dnsmasq

If it's not installed, install it.

Assuming it is installed, make sure it's not already running with:

ps -ef | grep dnsmasq

If it is, kill it with:

service stop dnsmasq

The above may or may not work. If the process is still running kill it with the kill command.

And now that your /etc/hosts file has your host information, start dnsmasq with:

service start dnsmasq

Test Your New DNS Server

Probably the easiest way to test your server is to first edit your /etc/resolv.conf file to set your nameserver to your local machine. So my local IP is, and the IP address of my subnet's nameserver is So in my /etc/resolv.conf file, I have the following:

# Generated by NetworkManager

Now run the command:


The correct output for me is: domain name pointer

If you get something different, go back over the steps above. But if it's correct, keep going.

Make the Nameserver Change Permanent

Go to System->Preferences->Network Connections to set your nameserver to be your local IP address.

A non-GUI way to do this is to update your /etc/sysconfig/network-scripts/ifcfg-eth0 file to set the DNS server.

Good luck!

Monday, July 7, 2014

APM UI 7.7 - Creating Windows Services

If you've installed APM UI v7.7 on a Windows server, you probably have noticed that IBM doesn't create Windows services.  As a result, none of the services start after a reboot, etc.

Below are the steps necessary to create Windows services for APM UI and SCR (Service Component Repository).  In this scenario, we have the SCR database using DB2 vs. Derby.

We've also included the commands necessary to create the service for SCR on Derby (however, this hasn't been tested).

Our base install directory for the APM UI is C:\IBM\APMUI - your path may differ, adjust the commands below as appropriate.


  • Download the Apache Commons Daemon (link).
  • Extract and copy prunsrv.exe to C:\IBM\APMUI\bin\
  • Open a Command Prompt and change into your C:\IBM\APMUI\bin directory 
  • Create the Windows service for SCR and have it depend on Tcpip and DB2 being up first.

prunsrv //IS//SCR --Startup=auto --DisplayName="IBM APMUI - SCR" --Description="IBM WebSphere Liberty Profile SCR" ++DependsOn=Tcpip ++DependsOn=DB2-0 --LogPath=C:\IBM\APMUI\usr\servers\apmui\logs --StdOutput=auto --StdError=auto --StartMode=exe --StartPath=C:\IBM\APMUI --StartImage=C:\IBM\APMUI\bin\server.bat --StartParams=start#scr --StopMode=exe --StopPath=C:\IBM\APMUI --StopImage=C:\IBM\APMUI\bin\server.bat --StopParams=stop#scr

  • Create the Windows service for APMUI and have it depend on SCR being up first.

prunsrv //IS//APMUI --Startup=auto --DisplayName="IBM APMUI - APMUI" --Description="IBM WebSphere Liberty Profile APMUI" ++DependsOn=SCR --LogPath=C:\IBM\APMUI\usr\servers\apmui\logs --StdOutput=auto --StdError=auto --StartMode=exe --StartPath=C:\IBM\APMUI --StartImage=C:\IBM\APMUI\bin\server.bat --StartParams=start#apmui --StopMode=exe --StopPath=C:\IBM\APMUI --StopImage=C:\IBM\APMUI\bin\server.bat --StopParams=stop#apmui

Derby vs. DB2

If you have SCR running under Derby vs. DB2, you can create a third service for SCRDERBY.  The start-up of SCR would then depend on SCRDERBY instead of DB2-0.

  • Create the Windows service for SCRDERBY and have it depend on TCPIP being up first
prunsrv //IS//SCRDERBY --Startup=auto --DisplayName="IBM APMUI - SCRDERBY" --Description="IBM WebSphere Liberty Profile SCRDERBY" ++DependsOn=Tcpip --LogPath=C:\IBM\APMUI\usr\servers\apmui\logs --StdOutput=auto --StdError=auto --StartMode=exe --StartPath=C:\IBM\APMUI --StartImage=C:\IBM\APMUI\bin\server.bat --StartParams=start#scrderby --StopMode=exe --StopPath=C:\IBM\APMUI --StopImage=C:\IBM\APMUI\bin\server.bat --StopParams=stop#scrderby

  • In this case, have the SCR service depend on SCRDERBY instead of DB2.
prunsrv //IS//SCR --Startup=auto --DisplayName="IBM APMUI - SCR" --Description="IBM WebSphere Liberty Profile SCR" ++DependsOn=Tcpip ++DependsOn=SCRDERBY --LogPath=C:\IBM\APMUI\usr\servers\apmui\logs --StdOutput=auto --StdError=auto --StartMode=exe --StartPath=C:\IBM\APMUI --StartImage=C:\IBM\APMUI\bin\server.bat --StartParams=start#scr --StopMode=exe --StopPath=C:\IBM\APMUI --StopImage=C:\IBM\APMUI\bin\server.bat --StopParams=stop#scr

The name specified after //IS// is effectively the "short name" for the service.  So, you can issue commands such as "net start apmui", "net stop scrderby", etc. based on those names.  As with all services, you can use the full Display Name  if you enjoy typing (net start "IBM APMUI - APMUI", etc.)

The typical startup sequence would be:

  • net start scrderby (if running Derby vs. DB2)
  • net start scr
  • net start apmui

The typical shutdown sequence would be:

  • net stop apmui
  • net stop scr
  • net stop scrderby (if running Derby vs. DB2)

prunsrv Documentation/Usage:

Here's a link to the prunsrv documentation/usage.

Sample - APMUI Service

Sample - APMUI Service Dependencies

Wednesday, January 29, 2014

MongoDB Setup and Monitoring with Application Insight


MongoDB might be new to you.  It certainly was new to us, so when we took some time to experiment with IBM SmartCloud Monitoring - Application Insight of a MongoDB, our first hurdle was setting up MongoDB!  It should be noted that stand-alone DB instances are not currently supported by the monitoring agent, so we needed to build up a clustered/replicated MongoDB configuration.  This is common in a production environment, but a bit more than we expected to need in the lab.

MongoDB Setup Overview

Our MongoDB setup was accomplished using a single virtual machine.  While this isn't a recommended setup for a production environment, it is perfectly fine for this testing.  Our setup included the following overall steps:

  1. Create 3 databases, each configured to use unique paths and ports (ports: 37017, 37018, 37019)
  2. Connect to the "soon-to-be" primary database (port 37017) and configure the replica set.
  3. Add second (port 37018) and third (port 37019) databases to the replica set.
  4. Installed a demo database using JSON import
  5. Started a Configuration Server (port 37020)
  6. Started mongos, pointing at Configuration Server and listening on port 37021
  7. Connected to mongos (port 37021)
  8. Added replica set to Shard
  9. Enabled Sharding on our demodb
  10. Enabled Sharding on the collection (aka table)

A special thanks to the following website for providing some demo database data and a nice presentation on MongoDB and Ruby apps.  Also thanks to the MongoDB docs for creating a cluster.

You may ask, why 3 databases, aren't 2 enough?  This is because the recommended MINIMUM number of databases for a Replica Set is 3.  If your setup only has 2 databases, Application Insight will flag the Global MongoDB Status as a Warning.

MongoDB Setup

VM hostname is "openpulse".
Replica Set is named "rs1".

Download MongoDB (we used 64-bit Linux) from here.
Untar file.  Location of files will be referred to as $MEDIA
The remaining commands assume the $MEDIA/bin directory are in your path.

mkdir -p /srv/mongodb/rs1-0 /srv/mongodb/rs1-1 /srv/mongodb/rs1-2
# Start up 3 databases
mongod --port 37017 --dbpath /srv/mongodb/rs1-0 --replSet rs1 --smallfiles --oplogSize 128
mongod --port 37018 --dbpath /srv/mongodb/rs1-1 --replSet rs1 --smallfiles --oplogSize 128
mongod --port 37019 --dbpath /srv/mongodb/rs1-2 --replSet rs1 --smallfiles --oplogSize 128

# Connect to to-be-primary
mongo --port 37017

#Give Primary a configuration for a replication set
rsconf = {
           _id: "rs1",
           members: [
                       _id: 0,
                       host: "openpulse:37017"

#Initiates the replica set
rs.initiate( rsconf )

#Displays Replication set

#Add 2nd db - NOTE: you might need to wait for prompt to change to PRIMARY before continuing.

#Add 3rd db

#Display Replication set, confirm three are listed

#Install DemoDB
curl -L | mongoimport --port 37017 -d demodb -c venues

#Start a config server
mkdir /data/configdb2
mongod --configsvr --dbpath /data/configdb2 --port 37020

#Start mongos pointing at config server
mongos --port 37021 --configdb openpulse:37020

#Connect to mongos
mongo --host openpulse --port 37021

#Add replica set to shard
sh.addShard( "rs1/openpulse:37017" )

#Shows replica set and other stats

#Connect to mongos
mongo --host openpulse --port 37021

#Enable sharding for the DB

#switch DB
use demodb

#Set index for sharding
db.venues.ensureIndex( { _id : "hashed" } )

#Setup sharding of the collection (table)
sh.shardCollection("demodb.venues", { "_id": "hashed" })

MongoDB Agent Setup

Reference IBM documentation here.
Our monitoring instance is named "Pulse21" install config pulse21
Agent configuration started...
Edit "Monitoring Agent for MongoDB" settings? [ 1=Yes, 2=No ] (default is: 1):

Agent Configuration :
Configuration variables for agent start up

The directory where the Java runtime is located. This value is optional. The agent will use the built in Java by default. Use this to over ride the Java to be used.
Java (default is: ):
Allows the user to say whether these system is a cluster or single replication set. This value is optional. By default the agent will monitor a cluster.
Type [ 1=Cluster, 2=Single Set ] (default is: 1):
Port Number for the router of a MongoDB cluster or a mongod instance of a MongoDB replication set being monitored. This value is optional. The agent will automatically discover the cluster location if only one is present on the system. This is used to over ride discovery of a cluster or explicitly monitor a replication set.
Port (default is: ): 37021  (Note: this is the port of the mongos process, not the individual databases)
The ip address for the host system of the router or the mongod instance. This value is optional. The agent will automatically discover the default ip address. This is used to select a particular interface on a system where MongoDB is bound to only one of several addresses.
Host (default is: ):

Agent configuration completed...
As a reminder, you should restart appropriate instance(s) for new configuration settings to take effect.

./ start pulse21
Processing. Please wait...
Starting Monitoring Agent for MongoDB ...
Monitoring Agent for MongoDB started

Application Insight Screenshots

Anthony Segelhorst and Jamie Carl

Monday, January 6, 2014

Creating ITM deployment packages for IBM Endpoint Manager

A question came up on the IBM Endpoint Manager forum on how to deploy ITM agents using IEM. This is not something that I have done in IEM, but have done with TCM (Configuration Manager) and TPM (Provisioning Manager). I did recall that ITM had a switch that allowed for the creation of SPD (Software Package Definitions) or SPB (Software Package Blocks), so thought I would look at this for IEM.
Now there are a few ways of using the SPB/SPD or even just create the bundle with no export format. If you use the SPD format, you will get the command line that would need to be used in the IEM action script. So for this example. I am going to use the SPD export. Just to note though, IEM also supports the import of SPB files, so this could be another option.

Assumption: The particular bundle that you desire is already in the ITM depot.

The high level steps would be as follows:
    - Create the bundle
    - Create IEM Download File
    - Determine the sha1 information.
    - Review the SPD file and determine install command and options for the NT_Silent_Install.txt
    - Use the BFArchive tool to ZIP the bundle directory and upload to the IEM server.
    - Determine relevance method
    - Create the fixlet

Create the Bundle

ITM uses the “tacmd” command with the “exportBundles” switch to create a silent installation folder. For this example, I am using the “-o SPD” switch to define that I want the export to also create the SPD file to determine the command line an contents of the NT_Silent_Install.txt file.
tacmd exportBundles -o SPD -t nt -e e:\data\bundle
KUICEB023I: Are you sure you want to export the following bundles to the e:\data\bundle directory?
Product Code : NT
Deployable   : True
Version      : 063000000
Description  : Monitoring Agent for Windows OS
Host Type    : WINNT
Host Version : WINNT

Product Code : NT
Deployable   : True
Version      : 063000000
Description  : Monitoring Agent for Windows OS
Host Type    : WIX64
Host Version : WIX64
 KUICEB024I: Enter Y for yes or N for no: y

 KUICEB020I: Exporting bundles to the e:\data\bundle directory. The time required to complete this operation depends on the number and size of the exported bundles.

 KUICEB022I: The following bundles were successfully exported to the e:\data\bundle directory:

Product Code : NT
Deployable   : True
Version      : 063000000
Description  : Monitoring Agent for Windows OS
Host Type    : WINNT
Host Version : WINNT

Product Code : NT
Deployable   : True
Version      : 063000000
Description  : Monitoring Agent for Windows OS
Host Type    : WIX64
Host Version : WIX64

Create IEM Download File

BFArchive- -a e:\data\bundle\NT_063000000_WINNT e:\data\NT_063000000_WINNT.tmp

Determine sha1 information

The SHA1 tool (!/wiki/Tivoli%20Endpoint%20Manager/page/SHA1%20Tool) can be used to determine the SHA1 value and also will provide a template for the “prefetch” command.

Sha1.exe -r e:\data\NT_063000000_WINNT.tmp
prefetch NT_063000000_WINNT.tmp sha1:32685b95f970e8f61e187d8433360072f213dba8 size:85360201 http://EXAMPLEURL/REPLACEME.exe

Use the sha1 value as the folder name and create a folder under “E:\Program Files (x86)\BigFix Enterprise\BES Server\wwwrootbes\Uploads\” (this is the directory on my TEM server), then  copy the TMP file to the new folder. For this example the folder would be “E:\Program Files (x86)\BigFix Enterprise\BES Server\wwwrootbes\Uploads\32685b95f970e8f61e187d8433360072f213dba8”

Review the SPD file and determine install command and options for the NT_Silent_Install.txt

If you do not already have a silent install response file, this can be created by reviewing the information in the SPD file. This is no different than the response file used for non-IEM deployments. This also goes for the command line.
The SPD file does contain quite a bit of information in it and if you are not familiar with them, you might be better off reading the ITM install guides on how to create the response file.
Most of what is needed is either in the “default_variables” or in the “add_text_file_objects”. These sections will show the variables that are used and the command line required to execute the install.

     SOURCE_DIR = "e:\data\bundle\NT_063000000_WINNT"
     TEMS_HOSTNAME = "localhost"
     FIREWALL = "NO"
     IP_PIPE_PORT_NUMBER = "1918"
     CANDLE_ENCRIPTION_KEY = "IBMTivoliMonitoringEncryptionKey"
     ARGS_INSTALL_CMD = '/c start /wait $(CANDLEHOME)\spbInstall\setup.exe /w /z"/sf$(CANDLEHOME)\spbInstall\NT_Silent_Install.txt" /s  /f2"$(DEST_SILENT_INSTALL_LOG)"'
     DEST_SILENT_INSTALL_LOG = "$(temp_dir)\Silent_NT.log"
     DEST_SILENT_UNINSTALL_LOG = "$(temp_dir)\Silent_NT.log"
     ARGS_UNINSTALL_CMD = '/c start /wait $(CANDLEHOME)\spbInstall\setup.exe /w /z"/sf$(CANDLEHOME)\spbInstall\NT_Silent_Uninstall.txt" /s  /f2"$(DEST_SILENT_UNINSTALL_LOG)"'

     replace_if_existing = y
     file = $(CANDLEHOME)\spbInstall\NT_Silent_Install.txt
     stop_on_failure = n

        replace_if_existing = y
        text = ";Install Directory=C:\IBM\ITM"
        command = "Install Directory"
        key = "C:\IBM\ITM"
        position = begin
        pattern = "Install Directory=C:\IBM\ITM"

        replace_if_existing = y
        text = ";EncryptionKey=IBMTivoliMonitoringEncryptionKey"
        command = "EncryptionKey"
        key = "IBMTivoliMonitoringEncryptionKey"
        position = begin
        pattern = "EncryptionKey=IBMTivoliMonitoringEncryptionKey"

        replace_if_existing = y
        text = "Install Directory=$(CANDLEHOME)"
        position = before_first
        pattern = ";Install Directory=C:\IBM\ITM"
        replace_if_existing = y
        text = "EncryptionKey=$(CANDLE_ENCRIPTION_KEY)"
        position = before_first
        pattern = ";EncryptionKey=IBMTivoliMonitoringEncryptionKey"
        replace_if_existing = y
        text = "[CMA_CONFIG]"
        position = end
        replace_if_existing = y
        text = "FTO Flag=N"
        position = end
        replace_if_existing = y
        text = "AUDIT=Y"
        position = end
        replace_if_existing = y
        text = "Protocol1=$(NETWORK_PROTOCOL)"
        position = end
        replace_if_existing = y
        text = "IPPIPE_Port=$(IP_PIPE_PORT_NUMBER)"
        position = end
        replace_if_existing = y
        text = "IPPIPE_Host=$(TEMS_HOSTNAME)"
        position = end
        replace_if_existing = y
        text = "CONNECT=Y"
        position = end

With this information, I am able to build the action script. Of course there will be different paths for some items, but that goes with knowing the IEM environment.

My command line will look something like this:
waithidden "C:\IBM\Install\setup.exe" /w /z"sfc:\IBM\install\IEM_NT_Silent_Install.txt" /s /f2"c:\IBM\Install\Silent_NT.log"

During my download, I will extract the .TMP file and then copy the files to “C:\IBM\Install”. This is not required as they can be executed from the “__Download” folder, but I just wanted the code to be kept local. I am also going to create the response file called “IEM_NT_Silent_Install.txt” using the appendfile command.

Here is what my action script looks like
prefetch NT_063000000_WINNT.tmp sha1:32685b95f970e8f61e187d8433360072f213dba8 size:85360201 http://winbfsrv:52311/Uploads/32685b95f970e8f61e187d8433360072f213dba8/NT_063000000_WINNT.tmp

extract NT_063000000_WINNT.tmp

dos mkdir "c:\IBM\install"
delete "__Download\NT_063000000_WINNT.tmp"

dos xcopy /s/e/v/q/y "__Download\*.*" "C:\IBM\Install"

parameter "TEMS_HOSTNAME"="temhub"
parameter "Install Directory"="C:\IBM\ITM"
parameter "FIREWALL"="NO"
parameter "IP_PIPE_PORT_NUMBER"="1918"

delete __appendfile
appendfile ;---------------------------------------------------------------------
appendfile AgentDeploy=yes
appendfile License Agreement=I agree to use the software only in accordance with the installed license.
appendfile Install Directory={parameter "Install Directory"}
appendfile Install Folder=IBM Tivoli Monitoring
appendfile EncryptionKey=IBMTivoliMonitoringEncryptionKey
appendfile [FEATURES]
appendfile KNTWICMA=Monitoring Agent for Windows OS

appendfile [CMA_CONFIG]
appendfile FTO Flag=N
appendfile AUDIT=Y
appendfile Protocol1={parameter "NETWORK_PROTOCOL"}
appendfile IPPIPE_Port={parameter "IP_PIPE_PORT_NUMBER"}
appendfile IPPIPE_Host={parameter "TEMS_HOSTNAME"}
appendfile CONNECT=Y
appendfile FIREWALL={parameter "FIREWALL"}

delete "c:\IBM\Install\IEM_NT_Silent_Install.txt"

copy __appendfile "c:\IBM\Install\IEM_NT_Silent_Install.txt"

waithidden "C:\IBM\Install\setup.exe" /w /z"sfc:\IBM\install\IEM_NT_Silent_Install.txt" /s /f2"c:\IBM\Install\Silent_NT.log"

Now this action script does work and would be ok if you always had the same TEMS/RTEMS, but I am sure that is not realistic. If you want to add to it, I would look at possibly prompting for the TEMS/RTEMS host name with the “action parameter query”.

For example, you would replace the:
parameter "TEMS_HOSTNAME"="temhub"

action parameter query "Primary RTEMS Hostname" with description "Please enter the Primary RTEMS Hostname:" with default value "ITMHUB"

Determine relevance method

There are many ways to check the relevance, this really comes down to your preferred method. Here are a couple options:


For simplicity, I will just use the service “KNTCMA_Primary”. The relevance will look like:
not exists service “KNTCMA_Primary”

Create the fixlet

With all the information gathered and the TMP file copied to the Uploads folder, the fixlet can be created and used to deploy ITM agents. The fixlet can be created by putting the following into a text file with the BES extension and then use the Import function from the IEM Console to import the file to the desired site.

<?xml version="1.0" encoding="UTF-8"?>
<BES xmlns:xsi="" xsi:noNamespaceSchemaLocation="BES.xsd">
                <Title>Deploy: IBM Tivoli Monitoring Agent for Winnt</Title>
                <Description><![CDATA[Created: Jan 5, 2014<BR>Created By: Martin Carnegie, Gulf Breeze Software Partners<BR>Comment: Sample Fixlet for deploying ITM agent.]]></Description>
                <Relevance>(name of it contains "Win") of operating system </Relevance>
                <Relevance>not exists service "KNTCMA_Primary"</Relevance>
                        <Value>Mon, 06 Jan 2014 04:57:48 +0000</Value>
                <DefaultAction ID="Action1">
                                <PreLink>Click </PreLink>
                                <PostLink> to deploy this action.</PostLink>
                        <ActionScript MIMEType="application/x-Fixlet-Windows-Shell">prefetch NT_063000000_WINNT.tmp sha1:32685b95f970e8f61e187d8433360072f213dba8 size:85360201 http://winbfsrv:52311/Uploads/32685b95f970e8f61e187d8433360072f213dba8/NT_063000000_WINNT.tmp

extract NT_063000000_WINNT.tmp

dos mkdir "c:\IBM\install"
delete "__Download\NT_063000000_WINNT.tmp"

dos xcopy /s/e/v/q/y "__Download\*.*" "C:\IBM\Install"
action parameter query "Primary RTEMS Hostname" with description "Please enter the Primary RTEMS Hostname:" with default value "ITMHUB"

parameter "TEMS_HOSTNAME"="temhub"
parameter "Install Directory"="C:\IBM\ITM"
parameter "FIREWALL"="NO"
parameter "IP_PIPE_PORT_NUMBER"="1918"

delete __appendfile
appendfile ;---------------------------------------------------------------------
appendfile AgentDeploy=yes
appendfile License Agreement=I agree to use the software only in accordance with the installed license.
appendfile Install Directory={parameter "Install Directory"}
appendfile Install Folder=IBM Tivoli Monitoring
appendfile EncryptionKey=IBMTivoliMonitoringEncryptionKey
appendfile [FEATURES]
appendfile KNTWICMA=Monitoring Agent for Windows OS

appendfile [CMA_CONFIG]
appendfile FTO Flag=N
appendfile AUDIT=Y
appendfile Protocol1={parameter "NETWORK_PROTOCOL"}
appendfile IPPIPE_Port={parameter "IP_PIPE_PORT_NUMBER"}
appendfile IPPIPE_Host={parameter "TEMS_HOSTNAME"}
appendfile CONNECT=Y
appendfile FIREWALL={parameter "FIREWALL"}

delete "c:\IBM\Install\IEM_NT_Silent_Install.txt"

copy __appendfile "c:\IBM\Install\IEM_NT_Silent_Install.txt"

waithidden "C:\IBM\Install\setup.exe" /w /z"sfc:\IBM\install\IEM_NT_Silent_Install.txt" /s /f2"c:\IBM\Install\Silent_NT.log"


After Thoughts

There are many ways that this could be done and some people may prefer to use the SPD/SPB file or even the IEM Software Distribution Wizards rather than this sort of manual method that I have here. Once you have the response files created and the command lines to use, the SPD file section will not be required.

I think it would also be interesting to use the “SWTAG” files “C:\IBM\ITM\properties\version” on Windows or the “VER” files in “C:\IBM\ITM\INSTALL\ver” as part of an analysis as there is some useful information in there to query the ITM environment. This would have to be explored more on the various agents to see where these files are and if they are there for all agents.

Hope you were able to get some useful information out of this. Please let me know if you come across an issue or a possible enhancement to this process.


Martin Carnegie.