How To Use The CLI And API To Find All Applications Deployed To All Environments In A Specific Folder

| February 9, 2015 | 0 Comments

There are many possibilities for scripting with XL-Deploy.  XL-Deploy keeps a lot of information about the applications deployed in your environments.  With the CLI scripting tool that comes with XL-Deploy we can get access to this data, write custom reports, automate deployments and a host of other tasks.  As an example of some of the things that can be done to collect information out of XL-Deploy lets look at finding all of the applications deployed under an Environments folder.

Environments_Folders

XL-Deploy organizes environments in folders.  There can be many folders to organize an environment.  For each environment defined there can be several applications deployed.  XL-Deploy keeps track of all of the applications deployed to each environment.  We can create a script that can search through all of the environments to find all of the applications that match a given criteria.  Since this will be a CLI tool we can define some command line options to control the script.  For this script I will be defining the command line options as follows:

Find a Deployed Application in a Folder.  Command line options are as follows:
  --verbose -v  Debug mode
  --folder -f   The folders to look in.  The 'Environments/' will be added
  --app -a      A pattern to search for in the application name

To implement the switching we can use the GNU getopt library.  I my script I have done this as follows:

try:
   optList, argList = getopt.getopt(sys.argv[1:], 'vf:a:', ['verbose', 'folder=', 'app='])
except getopt.GetoptError, err:
   help()
   sys.exit(2)
#End try

After the script collects the command line options.  We can search the XL-Deploy repository for applications that match our requirements for folders and application names as follows:

depApp = repository.search("udm.DeployedApplication")

for app in depApp:
   if re.match( folder, app ) :
      if re.search( appName, app ) :
         theApp = repository.read(app)
         name = re.sub("^.*/", "", app)
         version = re.sub("^.*/", "", theApp.version)
         print "------------------------------------------"
         print "Application = " + name
         print "Version     = " + version
         print "Environment = " + theApp.environment
         print "Deployeds:"
         for deployed in theApp.deployeds :
            print "   * " + deployed
         # End for
         print "------------------------------------------"
         print " "
      # End if
   # End if
# End for

The output of the final script is as follows:

$cli.sh -q -f `pwd`/script.py -- --verbose --folder=Dev/TEST

 

------------------------------------------
Application = PetClinic-ear
Version     = 1.0
Environment = Environments/Dev/TEST
Deployeds:
* Infrastructure/Dev/Appserver-1/JBoss/PetClinic
------------------------------------------

------------------------------------------
Application = PetPortal
Version     = 2.0
Environment = Environments/Dev/TEST
Deployeds:
* Infrastructure/Dev/Webserver-1/Apache/PetPortal-to-PetClinic-ProxyPass
* Infrastructure/Dev/Webserver-1/TestRunner/Check-PetPortal-to-PetClinic-ProxyPass-Test
* Infrastructure/Dev/Database-1/MySql/sql
* Infrastructure/Dev/Appserver-1/JBoss/PetClinic-ds-on-jboss
* Infrastructure/Dev/Webserver-1/TestRunner/Check-PetPortal-On-Webserver-Test
* Infrastructure/Dev/Webserver-1/Apache/webContent
* Infrastructure/Dev/Webserver-1/TestRunner/Check-PetClinic-On-Appserver-Test
* Infrastructure/Dev/Appserver-1/JBoss/PetClinic-ear
------------------------------------------

 

The source code is available on github.

 


Rick Broker

About the Author ()

Rick is a Sales Engineer for XebiaLabs based in Columbus, Ohio. He has worked as a software developer and as a system administrator for Unix systems and middleware components including Websphere and Weblogic.