Wednesday, July 11, 2018

Processing JSON in automation scripts in IBM Control Desk 7.6

Background

You may need to deal with JSON-formatted data in an automation script, and it can be a little tricky. I've written this post to provide the few little pointers to make it easier for you.

JavaScript

You can write automation scripts in Rhino JavaScript or Jython. While Jython is the most common language used for automation scripts, it turns out that JSON processing is MUCH easier in JavaScript. Specifically, in a JavaScript automation script, you have access to the popular object named JSON that will give you everything you need. Here's an example:

var jsonObject = JSON.parse(jsonString);

And that's it. You can now work with jsonObject as a JSON object as described in this reference material from w3schools:


As far as I know, this will work in both WebSphere and WebLogic application servers. One possible caveat is that the JavaScript engine is changing from JDK 7 to JDK 8. Here's more information on that:

Jython in WebSphere

For Maximo/ICD automation scripts, Jython is by far the most popular language. It's also more thoroughly documented and, IMO, easier to work with in this context. However, JSON parsing has a couple of caveats. Specifically, the Jython interpreter in ICD 7.6 is version 2.5.2, which doesn't have a built-in JSON parser (one was added in Jython version 2.6). However, we're still in luck because WebSphere actually includes a JAR file that provides JSON processing. The specific class that you need to import is com.ibm.json.java.JSONObject :

from com.ibm.json.java import JSONObject
...
my_json = JSONObject.parse(my_filebody)

And from there, you can deal with my_json appropriately according to the JavaDoc here:


Jython in WebLogic

Admittedly, I haven't tested this one. I've tested the above two, and from my research, I believe this will work. Specifically, these two links give the necessary information:



If you find that it doesn't work, please ping me and I'll help you get it to work then update this entry as necessary.

With that in mind, you just need to import the appropriate classes in your automation script:

from javax.json import Json
from javax.json import JsonObject

And there you go.

Tuesday, July 10, 2018

It only takes an hour to get a test BigFix environment installed and working

The only caveat (which they've maybe fixed now) is that the SQL Server that's bundled with the BigFix Eval is borked, so you first need to install an eval version of MSSQL Server 2014, which is available from Microsoft.

But the whole process is really easy:

1. Create/clone a Windows 2012 or 2016 server (you can download an eval copy of Windows Server 2016 if needed)
2. Google MSSQL Server 2014 evaluation download and download it
3. Install MSSQL with all the defaults
5. Follow IBM's instructions for installation.
6. Once it's up and running (takes about 10 minutes), continue through the install instructions to add all of the available Sites. The site named IBM BigFix Inventory v9 is actually the one that will get you the BigFix Inventory install files.
8. Optionally create/clone a Windows or Linux VM to be an additional client in your environment

That's it, and even if you need to install Windows Server from scratch, it only takes at most 1.5 hours.

There are other parts you can also install now, such as BigFix Inventory or the WebUI (both are available via fixlets in one of the available Sites).

Monday, July 9, 2018

How to change the BigFix WebUI database userid and password

I recently installed the BigFix WebUI with the wrong password and needed to fix it. I found the encrypted information in the db_config.json file in the folder:

C:\Program Files (x86)\BigFix Enterprise\BES WebUI\WebUI

However, this is what the contents of that file are:

{"user":"96\u002fzY1rPfE40v69uFttQAg==","password":"MwKBDmT00BEwEZm1ctZahg==","hostname":"WIN-5M6866TPST1.mynet.foo","port":1433}

And while those look like Base64 encoded values, there's also some encryption going on (try putting either of those strings through an online Base64 encoder/decoder and you'll see).

So the first thing I tried was to just put the information in the file in cleartext and restart the WebUI service, so the file looked like:

{"user":"sa","password":"passw0rd","hostname":"WIN-5M6866TPST1.mynet.foo","port":1433}

Amazingly, that worked, and here's the logfile entry that shows it:

Wed, 04 Jul 2018 13:14:24 GMT bf:dbcredentials-error Failed to decrypt database credentials, attempting to use inputted credentials as plaintext

However, the file kept the cleartext data (I had hoped that it would re-encrypt the values on startup, but it did not).

Then I found the solution in the place I should have looked to begin with - in the BigFix console! There's a task defined in the BES Support site specifically for this purpose. The task is named "Deploy/Update WebUI Database Configuration". Run the action associated with that task and it will create a new db_config.json file with the properly encrypted data and you're good to go.

Friday, July 6, 2018

For business use, don't buy a laptop with higher than 1080p resolution

The high resolution screens available today are amazing for graphics and gaming, but absolutely horrible if you need to use any traditional/legacy applications. The main application that gives me trouble is Quickbooks Desktop Pro. We have version 2016, and I don't imagine they're going to fix it anytime soon since they seem to (rightly) want everyone to move to their online version. We've been using Quickbooks for over 15 years, so we're using some features that simply aren't available in the online version. I'm sure we'll move to the online version at some point, but it won't be any time soon. I'm certain there are other desktop applications that similarly have a problem with high resolution monitors - specifically, the text and windows are too small to see, and scaling doesn't work correctly at all. It's just ugly.

The higher end business laptops (Lenovo Thinkpad T, P or X series; Dell XPS; etc.) generally offer a 1920x1080 pixel option as a base, then higher resolutions and touchscreens cost more. In my experience, you'll be the happiest with the lower cost 1920x1080 option. Whether you get a touch-enabled screen or not is up to you, but definitely skip the high resolution screen.

Wednesday, June 27, 2018

Just Announced: IBM Cloud App Management

Here's the announcement, with architecture details:

https://developer.ibm.com/apm/2018/06/26/introducing-ibms-new-service-management-cloud-native-offering-ibm-cloud-app-management/

Some of the highlights are that it runs on IBM Cloud Private (so it runs in containers orchestrated by Kubernetes) and supports both ITM v6 and APM v8 agents.

Monday, June 25, 2018

Reading and writing files in a Maximo automation script

Background

All of the product documentation tells you to use the product provided logging for debugging automation scripts (see here, for example: https://www.ibm.com/support/knowledgecenter/SSZRHJ/com.ibm.mbs.doc/autoscript/c_ctr_auto_script_debug.html ). For quick debugging, however, I thought that was cumbersome, so I decided to figure out how to access files directly from within an automation script. This post goes over exactly what's required to do that. Maximo supports Jython and Rhino-JavaScript for automation scripting, and I'll cover both of those here.

Jython

This one was straightforward, since the Python documentation can be followed exactly. Jython is simply an implementation of Python written completely in Java. All you need to open a file is:

my_file = open('c:/tmp/outfile.txt','a')

where 'a' specifies that we're appending to the file (and creating it if it doesn't exist). You then do need to flush and close the file, and this is my function to do that:

def logit(mytext):
  my_file = open('c:/tmp/jout.txt','a')
  my_file.write(mytext + '\n')
  my_file.flush()
  my_file.close()

So to log a string, just run:

logit("this is my string")

Reading from a file is just as easy:

my_read = open('c:/tmp/computers.json')
my_json = my_read.readline()
my_read.close()

In my case, the file contains one long line of JSON data, so readline() works great to store all of the text of the file into the string named my_json.

Rhino-JavaScript

This one is quite a bit more painful than Jython, which is really just one more reason that all of your automation scripts should be written in Jython. Specifically, the Rhino implementation in Maximo doesn't seem to completely adhere to the documentation you'll fine online. For example, there is no "ReadFile()" method available in Maximo. There are also other limitations, and the only way I found to get over them was to use Java classes. I thought that would make it easy, but then you have to deal with the fact that Java objects (specifically Array objects) are absolutely not the same as JavaScript objects. 

So, writing a file isn't too difficult once you realize that you need to use Java. Here's how you open and write a file:

var outFile = new java.io.FileWriter("c:/tmp/autoscriptout.txt");
outfile.write("my string");
outfile.close();

The hard part is actually reading data from the file. Using the same JSON file as above with one long line of JSON, the following is required to read that data into a JavaScript string that can then be parsed:

var 
  thefile = new java.io.File("c:/tmp/computers.json"),
  filelength = thefile.length(),
  thefilereader = new java.io.FileReader(thefile),
  jsonData = java.lang.reflect.Array.newInstance(java.lang.Character.TYPE,filelength),
  res = thefilereader.read(jsonData,0,filelength),
  jsonString = new java.lang.String(jsonData);

And now all of the JSON data is in the string named jsonString.

Enjoy.

Friday, June 15, 2018

ICD 7.6 Fresh install and config with LDAP authentication configured will fail

We found a problem when installing IBM Control Desk 7.6 on WebSphere and MSSQL where it fails every time if you enable LDAP/AD authentication during the configuration phase of the install. Specifically, you'll see this error in the ConfigTool window:

Apply Deployment Operations-CTGIN5013E: The reconfiguration action deployDatabaseConfiguration failed. Refer to messages in the console for more information.

And if you look in the CTGConfigurationTrace<datetime>.log file, you'll see this error:

SEVERE: NOTE ^^T^Incorrect syntax near the keyword 'null'.
com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near the keyword 'null'.
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(SQLServerStatement.java:1515)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:404)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:350)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:180)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:155)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:285)
at com.ibm.tivoli.ccmdb.install.common.util.CmnEncryptPropertiesUtil.init(CmnEncryptPropertiesUtil.java:187)
at com.ibm.tivoli.ccmdb.install.common.util.CmnEncryptPropertiesUtil.<init>(CmnEncryptPropertiesUtil.java:101)
at com.ibm.tivoli.ccmdb.install.common.util.CmnEncryptPropertiesUtil.getInstance(CmnEncryptPropertiesUtil.java:141)
at com.ibm.tivoli.ccmdb.install.common.config.database.ACfgDatabase.createCronTask(ACfgDatabase.java:1391)
at com.ibm.tivoli.ccmdb.install.common.config.database.CfgEnableVMMSyncTaskAction.performAction(CfgEnableVMMSyncTaskAction.java:140)
at com.ibm.tivoli.ccmdb.install.common.config.database.ACfgDatabase.runConfigurationStep(ACfgDatabase.java:1108)
at com.ibm.tivoli.madt.reconfig.database.DeployDBConfiguration.performAction(DeployDBConfiguration.java:493)
at com.ibm.tivoli.madt.configui.config.ConfigureSQLServer.performConfiguration(ConfigureSQLServer.java:75)
at com.ibm.tivoli.madt.configui.common.config.ConfigurationUtilities.runDatabaseConfiguration(ConfigurationUtilities.java:540)
at com.ibm.tivoli.madt.configui.bsi.panels.deployment.TpaeDeploymentPanel$RunOperations.run(TpaeDeploymentPanel.java:1550)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)


This happens before the EAR files are built.

The way around this is to select "Use Maximo internal authentication" on the "Configure Application Security" screen of the ConfigTool". Once everything is installed, configured and running, you can then go in and enable J2EE application security for authentication.


Wednesday, June 13, 2018

JD-Gui is an invaluable tool for troubleshooting Java applications

If you deal with Java applications, you should get familiar with JD-Gui if you aren't already. JD-Gui (Java Decompile - Graphical User Interface) does exactly what its name states, and it seems downright magical because it shows you source code from compiled Java applications, which can give you amazingly useful insight into how an application is working. Here's a screenshot of it in action, where I'm using it to look at a JAR file that's included with the IBM Control Desk ConfigTool:


All of that information came from just dropping the JAR file onto JD-Gui.

The problem I'm encountering is a SQL error complaining about a syntax error near the keyworkd "null". By looking at the trace file produced and the source code, I've been able to reproduce the exact error message, and I'm 100% confident I know exactly in the code where the error is generated. So instead of just randomly trying different possible solutions, I can focus on the very small number of areas that could be causing this particular problem.

I've been using this tool for years, so I'm not sure what took me so long to write about it.

Monday, June 11, 2018

I definitely recommend installing Linux on Windows

If you've got Windows 10, hopefully you've been able to install a recent update that allows you to enable the Windows System for Linux feature and install a supported Linux distribution from the Microsoft Store. I finally bit the bullet and installed Ubuntu today, and it makes the life of a system administrator MUCH easier. I already had Cygwin installed, but this is just a slightly smoother integration, with many of the tools you need already installed (or available with the normal 'apt' or 'apt-get').

The Ubuntu distribution available in the MS Store even comes with vi with color highlighting for known file types (like html or js), and it's got telnet, ssh, sftp, etc. to make your life easy.

It's been available for a while, and I was hesitant to install it, but now I'm very happy I did.

Friday, June 1, 2018

Amazon Chime is a cheaper and more powerful alternative to WebEx

If you haven't looked at Amazon's different AWS offerings in a while, you definitely should take a look sometime. For example, I stumbled across their Chime web conference service:

https://aws.amazon.com/chime/

and I can report that it's just as reliable and easy as WebEx, but with more capabilities and at a fraction of the cost. Specifically, it's only a maximum of $15 per month per host, with 100 attendees allowed, plus you get a dial-in number (an 800 number is available, but there are additional per-minute charges associated with it).

We had an older WebEx account that was $50 per host per month, so I was very happy to run across this service and to get a minimum of a 70% savings. I say minimum of 70% savings because some of our host accounts were used only at most 2 days per month, which, with Chime, will now only cost a maximum of $6 per month.

High Availability for DB2 on AWS

If you're running an IBM product that requires a DB2 backend, you should really consider running DB2 on AWS. Here's a great article that provides you with the CloudFormation template to set it all up for you very quickly:

https://aws.amazon.com/blogs/database/creating-highly-available-ibm-db2-databases-in-aws/

If you're concerned about running your infrastructure in the cloud, please contact us so we can give you the information you need about the tight security and incredible flexibility that AWS provides.

Monday, February 26, 2018

Netcool and other IBM ITSM products upgrades due to Java6 EOS

Problem

IBM has announced End of Support dates for quite a few products in 2018.  In many cases, this stems from the impending end of support for Java 1.6.  You can search for IBM products and the EOS date here: https://www-01.ibm.com/software/support/lifecycle/

Solution

Gulfsoft Consulting can help you move to a supported release in a short time period, or we can get you upgraded to a product with more features (like moving to NOI from Omnibus). We have helped hundreds of clients over the years upgrade and migrate in situations exactly like this.  The typical time needed is a few weeks, not months.  For more information contact:

frank.tate@gulfsoft.com 304 376 6183
mark.hudson@gulfsoft.com 816 517 7179

Details

Some of the products whose support ends in 2018 are:

Product Version EOS Date
IBM Tivoli Monitoring  6.2.2 4/30/2018
IBM Control Desk  7.5.x 9/30/2018
Tivoli Workload Scheduler  8.6.x 4/30/2018
Netcool Operations Insight 1.2, 1.3.x 12/31/2018
Network Mgmt 9.2.x 12/31/2018
OMNIbus 7.4.x 12/31/2018
Impact 6.1.x 12/31/2018
IBM Tivoli Network Manager 3.9.x, 4.1.x 12/31/2018
Netcool Performance Manager 1.3.x 12/31/2018
Netcool Performance Flow Analyzer 4.1.x 12/31/2018
Network Configuration Manager 6.3.x, 6.4.0, 6.4.1  12/31/2018

IBM recommends upgrading to later versions of the products as soon as possible in order to maintain full support. After April 2018, support for Java™ 6 will be limited to usage and known problems with possible updates for critical security fixes through the end of 2018. After April 2018, WebSphere Application Server (WAS) 7 support will be limited to non-Java defects. Support for other components will continue as usual.

More information about Gulfsoft can be found here: https://www.gulfsoft.com/about

Friday, February 23, 2018

We've got a few open time slots for one-on-one meetings at #Think2018

The #Pink18 ITSM conference was a great success for us, and we're now looking forward to #Think2018. It's going to be a jam packed week, but we've still got a few time slots open to schedule sit down discussions with existing and potential clients and partners. Contact Frank (frank.tate@gulfsoft.com) or Mark (mark.hudson@gulfsoft.com) today to set up a 30-60 minute meeting!

Monday, February 19, 2018

#Pink18 is off to a Great Start

The #Pink18 ITSM conference kicked off last night with a reception, and it looks to be another great conference this year. Pink Elephant always has great thought leaders presenting at the sessions, and this year will continue that tradition.

If you're at the conference, please stop by our booth, #601, in the exhibitors showcase.

Friday, January 19, 2018

IBM Maximo named a Leader in Gartner Magic Quadrant for Enterprise Asset Management!

https://www.ibm.com/developerworks/community/blogs/a9ba1efe-b731-4317-9724-a181d6155e3a/entry/IBM_Maximo_named_a_Leader_in_Gartner_Magic_Quadrant_for_Enterprise_Asset_Management?lang=en

Something very important to note is that the IBM Control Desk product is built entirely on Maximo. So almost all of the features and capabilities that put Maximo into Gartner's Magic Quadrant for Enterprise Asset Management are also included in IBM Control Desk.

Tuesday, January 16, 2018

Gulf Breeze Software Partners is now Gulfsoft Consulting

Gulf Breeze Software Partners was started 15 years ago as a consulting firm that also had small
aspirations to write software at some point. Along the way, we realized that we really prefer
implementing and customizing software over writing new applications from scratch. And while
we've advertised that we're specialists in the implementation and customization of the IBM suite
of products up to this point, we're now marketing the fact that we have experience in and offer
services on a much larger array of products from multiple vendors. To effectively market our
capabilities to new customers, we decided to change our name from Gulf Breeze Software Partners
to Gulfsoft Consulting. We've still got the same amazing people and the same drive to make customers
successful, and now we've got a name that more accurately describes what we do. Here’s a link to some of the technologies we work with every day.


We look forward to continuing our relationships with existing customers and making new ones.

Monday, January 8, 2018

We will be at multiple conferences this year: Pink Elephant's Pink18, IBM's Think 2018, and ServiceNow's Knowledge18

We are growing in size and capabilities! That's why you'll see us at three great conferences this year:

Pink18 Feb 18-21, 2018 at the JW Marriott Orlando, Grande Lakes

Adopt, Adapt & Apply!
DevOps, Agile, Lean IT, ITIL® & More
The conference theme will be covered in over 120+ sessions and 12 tracks to show how you can master the dynamics of today's business environments by adopting, adapting and applying tried and true best practices. Subjects include: ITSM, ITIL, Lean IT, Agile, Scrum, DevOps, COBIT®, Organizational Change Management, Business Relationship Management, and more!

Think 2018 Mar 19—22, 2018 Las Vegas, NV

Think Campus
100s of core sessions, Think Tanks, and opportunities to get out of traditional sessions. You’ll experience face to face conversations with experts and product developers, network with clients that face similar challenges as you, and meet with 100s of IBM strategic business partners.

Think Academy
1000s of labs, certifications, client and technical deep dives that provide the info you need to take back to your organization and make it your own.

Knowledge18 May 7-10, 2018 Las Vegas, NV

Spark Your Transformation
Create smart, delightful experiences for your employees and customers