How To Integrate Universal Automation Center (UAC) With Any IT System In Your Environment
Hello, everyone. My name is Moritz. I am heading the solution engineering team of Storm Branch responsible for the EMEA region. So me and my team of solution engineers are responsible for doing, product demos, answering all kinds of RFPs that reach us, as well as things like, POC installations to prove the technical capabilities of our software. So today, in today's Stormbranch online educational forum session, I would like to talk about integration and, in particular, how to integrate Universal Automation Center with any IT system in your environment. The session is going to be structured as follows. So first of all, I'm going to give a quick introduction on integration and orchestration. So what do we what do we mean by this and why do we think it's important, especially in the context of automation? Secondly, I will introduce the concept of a universal integration platform, which is not a new product from Stormbridge. It sounds like it, but it's not a new product. It is basically a concept how to use our universal automation center to integrate all kinds of application in order to provide automation and orchestration. This is followed by a quick tutorial how to add existing integrations that have been developed by us, StormBranch, or also our customers to your existing Universal Control installation. This is followed by a quick session on how to create your own new integration to an application we have not yet written an integration for. And the way because the way StormWrench writes or develops new integrations is available for all users of or all administrative users of Universal Controller. And today, I want to show you how to make best use of this very powerful feature. Afterwards, I'm going to showcase a integration scenario that we called Orchestrate the Orchestrator because it's a little different from most of the other integrations we do because in this case, we have a third party application ServiceNow to have control over our universal controller to automate it, in this case, to provide some self-service functionality to business users for the universal controller. At the end, we have some time dedicated for q and a. But as Marissa already said, feel free to ask questions via chat during the session, and I will try to answer them as they go. Okay. Let's jump into it. So integration orchestration, what do we mean by this? So, the following scenario may be familiar with you, and it's it's not a secret that, since the rapid adoption of cloud services and the actual general availability of more and more software from different vendors for different purposes creates something we call a heterogeneous IT environment. So heterogeneous means a modern, IT environment has applications, a very mixed bag of applications from different vendors that are used by different teams for different purposes. And this is all hosted or managed by one organization. So, the small image here shows just a very abstract version of such an heterogeneous IT environment. It can be applications that are hosted on the cloud, on premise, or hybrid. And, in most cases, even though this can be very modern cloud applications, they are disconnected from most of the other applications and systems, especially the legacy on premise systems such as a mainframe, for example. Right? We do have customers that are really struggling to create automation scenarios across on premise legacy environments, systems, and very modern cloud applications, which they also use. Right? So the gap between modern and legacy becomes larger and the overall IT environment becomes very diverse. So the key in making this environment more integrated in order to provide automation is to integrate these systems with each other. Right? And there's, in our from our point of view, two philosophical approaches, how this integration can be achieved in order to enable orchestration. Right? One of it being, you see here on the left hand side, a integration via a central platform. And this is what we are going to talk about today. Right? Having a central platform that takes care of integration to any kind of application in order to provide a central platform for any IT automation scenarios. And this is what we are really going at. Another example of integration, which is also very common and very common indeed for smaller environments, is having point to point integrations between two kinds of applications, right? Which is very much used at the moment and it makes a lot of sense in a smaller environment where you have very few services or applications that you want to integrate in order to provide data from application A to application B or trigger an execution of of a job in another application from one application. Right? However, in larger environments, it really makes a lot of sense to have a central platform that takes care of all this and to provide, basically, an overview about your entire automation landscape. So with Stoneridge, think that such a platform, really drives what we call high real time hybrid IT automation, and this is what we are trying to achieve. So this slide shows a lot of different logos. Most of you most of them should be familiar to you. So we try to collect all kinds of applications that we have come across in the recent past with our customers that have been adopted and that are very heavily in use. And, of course, no organization has all of these tools implemented. Some of them are interchangeable. We wanted to paint a picture of how an heterogeneous IT environment could look like. Right? So in reality, an IT environment, as I said, is very diverse. Many different applications from different application domains that are used by different teams inside and outside of the IT department. Right? So, for example, on the bottom right side, we have a couple of big data or data analytics related applications that are used by dedicated teams. We have microservices and container related application. We have DevOps related tools that are used by totally different people again. Also off the shelf cloud applications, infrastructure automation tools, as well as business applications, and also something like UiPath to already automate a lot of things in a company. We do have a at this point, I would like to mention that we will have a dedicated session on how an integration between a word automation tool like us, like our Universal Automation Center and an RPA tool like UiPath can look like could look like. And this is going to take place on June second by my colleague, Helmut Darmen. So please, if this is of interest, tune in. So basically, what we are trying to achieve with our platform is to have a central component in your IT environment that has integrations to all of these different kind of tools from different domains in order to allow automation workflows that go across all these domains. Right? So basically allowing you to automate not only within a domain, so not only automate within ServiceNow. ServiceNow has a very powerful automation engine to do all things within ServiceNow and maybe to an application left and right from ServiceNow. However, with our integration platform, this could be any workflow, any IT automation process across your entire landscape. So how do we do this, and how do we want to achieve this? The universal integration platform, as I said, is not a new product. It is a way to use our universal automation center. And the universal automation center has two essential tools that make it a very good integration platform, which is, on the one hand, the universal task and, on the other hand, our, own REST services API. So using universal task, our universal automation center allows us to basically control or automate any system that we call, in this case, a downstream system. So a third party application that we want to control, that we want to execute any kind of workload on. And this is usually done via or this is always done via some kinds of APIs or command line interfaces. And every modern application comes with usually standardized APIs that we can use in our integration tool we call universal task. So this is a downstream systems is basically automation for a third party solution. On the other hand, there's, of course, also scenarios where it makes sense that our universal automation center is automated by a third party tool, and this is what we call in this scenario an upstream system. A very, a very good use case for an upstream system I'm going to talk about later also is ServiceNow that we integrated or we used to provide some kind of self-service functionality to our universal controller. And in this case, this is considered an upstream system that uses our API. So we can, in this case, also be a downstream system to a higher entity in this case. So these two tools or these two features basically make our Universal Automation Center a very good platform to basically integrate into any system or provide open APIs to any outside system to really allow you to create end to end automation processes. So how to add existing universal tasks, in this case, to your control installation? So let's first talk about what a universal task actually is under the hood. So when you're familiar with our universal controller, then you know that something like a Windows task or Windows job or a Linux task or a ZOS task and or something like a SQL task is something is a core feature of usually any workload automation kind of tool. So it allows us to execute scripts and workloads on Windows servers, on Linux servers. However, for an integration platform or for modern automation use cases, we don't want to go through an operating system where maybe an application is installed in order to integrate the application. We wanna go directly to the application because it provides all the APIs we need. We don't need to go through the operating system. So basically, universal task is a custom task type that can be added to the universal controller on top of a Windows task or next to a Windows task or a Linux task. This will all become more clear on the next couple of slides. So there's basically three steps involved in creating a new universal task. So first of all, we need to create a universal template. And this is done by administrators of the universal controller. It's an administrative function of the system. So an administrator either defines himself or downloads, which I'm also gonna show, a new universal template, into the universal controller. And the universal template basically is a script that contains all the logic, what you want what you would want to do with a third party application or a command, and also, couple of fields that your script needs to in order to run. And I'm going to show on the next slide how this looks like. So the second step after an administrator defines a new universal template, a new universal a new task type becomes available to users of the universal controller. So as soon as the template is saved, users will see a new type of task and can create a new task and are only provided with the fields that we have previously defined in the template. So the whole script is not visible to the user. He only sees the fields that we want him to see in order to provide the information we need to run our script. As soon as a task is created, it can be included in any schedule or workflow or connected to any kind of triggers in order to run at the desired time or at the desired event. Right? So these are basically the three steps involved. So how does this look like in reality? So this is a screenshot of a universal template that we created for integrating ServiceNow. So as I said, the main part of the template is a script, and I'm not going into too much detail about this script. We will create one ourselves in a second. So the script, basically, in the background contains the logic to create a ServiceNow incident ticket. Right? It create it contains the connection details for for the API to run against a ServiceNow instance. The only other thing we can define is an icon. So in a workflow, we can, you know, create have an icon that, you know, shows, okay, this is a ServiceNow task. And also, very importantly, fields. So when we go to the field sections of the universal template, you see in this case a long list of fields that have been defined because all this information is required in order to create a ServiceNow incident ticket. So we have, for example, the instance URL that we need so we know against which instance of ServiceNow, as it is a cloud application, we want to run against to create the ServiceNow ticket. We also have some ticket specific things like a category that the user is able to select for the ticket, a subcategory. And if you're familiar with incident management, it always comes with an impact and an urgency to define the criticality of an incident. And this can be selected here from the user, because we provide him with a field where we pull the information from to use it in our script, basically. So once the template is created, a user, in this case, is able to create a new ServiceNow based, task. So this is already a screenshot of a of a newly created task where we filled in all the essential information. So as you can see here, all these fields that already filled out were the fields that we defined in the template. And, the user, in this case, already selected an impact and an urgency, and this will later on be used to create the incident ticket. So as soon as we created the task based on the template and saved the task, it becomes available to be used in a workflow like this. So this is a short example of a use case. When do we want to create an incident ticket? In this case, if this task fails in our workflow, this this basic Windows task, we want a ServiceNow incident ticket to be created. And this is indicated by this dashed line here. Right? So if this task doesn't return, doesn't exit with return code zero, this task will be executed, we create an incident ticket in ServiceNow, and people will become aware that something has failed immediately. Right? And all everything is documented at ServiceNow. So this is just one example of an integration. Right? ServiceNow provides many other things besides incident management. However, the task we created was only well, it was for the sole purpose of creating incident tickets. So a universal task is really always only covering a fraction of the application's capabilities. Alright. So how to get new universal tasks that have been developed? So this I also can show in a live system. So let me jump over to my local controller installation. So this is basically a vanilla installation of a universal controller. And if you want to make use of some new task types that don't are not installed with a vanilla installation So you can see here in the navigation tree, have the typical the usual suspects, Windows tasks, Linux tasks, ZOS tasks, and all these things that are standard. Right? Let's call them standard. So, if you go to your administration panel to the server operations In the newest release six point eight of the controller, we implemented a new server operation called list load built in universal templates. So once we run this one, we are presented in this case only with two, but this list will become longer and longer over time. New universal tasks that we can implement into our universal controller. So once you select those two and hit load, you see already in the console two files imported successfully. And if we now go back to our navigation tree and refresh it, you see we have two new task types. In this case, an SSH task and the UDM gateway task. So these two tasks are special because they are very mature and they are very robust. And our product management support team knows what they do. So we ship them basically with the product. And if you have problems with it, we know how to troubleshoot. Right? Because we are we know what the script in the background does and so on and so forth. So this is basically one way of universal tasks that we provide you with. And this is a very handy new server operation to import them. So what about all the other universal tasks that we have developed maybe or our customers? So for this, we we, StormWrench, launched a while ago, the StormWrench Marketplace. And the Marketplace is due for a general overhaul, I would say, of a refresh, not only visually, but we want to really make the usability we want to improve on the usability of the Marketplace. And also, we have a lot of universal tasks developed over time that haven't made it to the marketplace yet. So, just FYI, this is going to be refreshed and filled with more content. However, I do want to take the chance to show you how it's currently done and how to import new tasks from the from the marketplace. So as I said, the the two earlier ones I imported are robust and known by our support and product management team. The ones we provide on the marketplace should be considered more of a more of a blueprint, something you can import, but that doesn't necessarily immediately run and does what you want it to do, because it was developed by us or by our customers with a certain use case in mind, which maybe is different from what you have in mind to do, for example, ServiceNow. However, it provides a very good starting point to change it and to adapt it to your automation needs. So it really makes a lot of sense to just check it out if something that is of interest is in the marketplace and then try it out and maybe change it to your needs. Right? So let me quickly show you how this is done. So the marketplace. So if you go to marketplaces dot stormage dot com and if you have logged in with your user credentials, you are already presented with the task that we have uploaded already here. You can filter by all kinds of applications and services. So let's quickly filter for MS SQL server related task. And there's a very handy universal task that allows you to monitor a database, a database table for changes in the table and then do to execute a job or a workflow based on these changes. This is not a standard feature of the control at the moment, so a universal task was developed to basically provide this kind of functionality. So if you want to add this to your universal control, you go to download in the marketplace. And this brings us to our public Git repository. So you don't need to sign in to to the GitHub. You can download this repository to your local file system while by going to clone or download, download ZIP file, and then hopefully downloads. There it is. So then you go to your download folder. Let me do this here in the background real quick. You export it and you copy the URL to the folder, to your clipboard, and then you go to your universal controller. So in this case, it's my local controller, so it can access the local file system. Then you go to administration. In this case, universal templates. As you can see at the moment, there are two templates already installed, the ones I imported through the server operation. Now we want to add one more for the database task. We right click on the column header, You click import, and you paste the the folder from the the file we just downloaded from GitHub. In this case, we imported three files because the folder didn't all only contain a template. It also contained an example task and I think some credentials. So again, going back to our navigation tree, refreshing it, we now have another task for our ODBC database monitor. And that's about it. So this is how you can import new tasks that we provide in the Universal Controller. So in this case, there's already an example here. So when we go to templates, refresh this one, we see the new template. And you are free to check out the script that is behind this template and basically adjust it to your needs. And this is this is exactly what I meant with blueprints. So you download them from the marketplace, which was developed with a specific use case in mind, and you can adjust it. But it provides you basically a jump start in creating a new universal task. Okay. I'm going back to the presentation. There we go. So this is nice and all. However, we, of course, haven't yet created universal tasks for every application out there and for every use case. So I'm going to show you how to quickly create new tasks yourself. However, in use in in in reality, before you, you know, start a small project to to create a new universal task, you should consider a couple of things. First of all, a use case. You a ServiceNow integration is not always it's not just a ServiceNow integration. In this case, the example I just showed was an integration to create an incident ticket, and this is exactly a use case that you, you know, should define before jumping into it. Right? Because ServiceNow provides a whole bunch of features that are maybe not relevant for us at the moment. So you should think of a specific use case first that you want to achieve with this new integration. Maybe you want to create an object in in a third party system, which we did with ServiceNow. We created a service incident ticket object. Maybe you want to create an app provide an application with data or you want to get data from it or you want to trigger something. So there's really different things to keep in mind. Secondly, very importantly, you need API documentation. In case of ServiceNow and in case of most modern applications out there, API documentation is not difficult to find. The application vendors provide it on their website because they know providing this kind of information to developers is a win win situation. Right? So check out the website of the application vendor first to see if they have any API documentation or if they have APIs at all. In most cases, we found web services API APIs are available, and they are pretty well documented. The third thing to keep in mind is the scripting language. So what I showed earlier in the universal template, there was a script. Right? So it doesn't really matter what kind of scripting language you use in the end. Any kind of scripting language, you can paste into the universal template. The only thing is it has to be executable on a system where we run the universal task from. Right? So in most cases or in in our integrations that we have been doing in the past, we heavily used Python as a scripting language for various reasons. So first of all, Python is a very modern scripting language. It's easy to read, easy to write comparably. But most more importantly, it makes your life very easy because in most cases, if you, for example, want to and this is what we recently encountered. Let's say you want to create a new integration to SharePoint. Right? Microsoft SharePoint. And SharePoint provides all the APIs. So let's say you want to upload a file to SharePoint. That's a use case. The APIs are all fine. But in Python, there's already a module available that is open source. I think the the website is pypy dot org or so where you can access all these different modules for Python that make calling this API from for SharePoint much, much easier. It provides you prebuilt functions to upload a file so you don't have to worry about the API call itself. Just call the function from the module, and you're good to go. So, recommendation, here is use Python or another widely accepted programming or scripting language. And the last point to consider is development tools. So depending on how complex or easy your script or your universal task is going to be, you may want to use some tools to make your life easier. So if it's a very simple script, of course, Notepad plus plus is simple enough with some code highlighting. However, if it's going to be more complicated or complex, maybe you want to use PyCharm or Visual Studio IDEs. Right? Also, a thing to consider is you probably want to get your hands on a developer instance of the application. You wanna make an integration for it to test it out. With enough talking yeah? We have enough we have a couple of questions before you jump into a demo. Sure. First one, this was about a couple of slides before this one. Does this import it's from Stefan Mantens. Does this import also work on SAS UAC? Absolutely. So the same functionality is available to our universal controller instances that run-in the cloud and are provided by or hosted by StormBench. Absolutely. Perfect. And then Ron Cullen, he asks, When would you choose for a web service task and when for a universal task doing the REST API handling? That's a very, very good question. And there's always a consideration. Maybe I should have added this consideration to this slide because in some cases, a web services task, which is a standard task type in the universe controller, is good enough for what you want to do. Right? So maybe you just want to do a simple GET or POST commands to an application via the Web Service API, and this is good enough. Right? However, if you want to do some kind of input validation, some error handling, and these kind of things, you probably need need a script around this API call, right, to to make sure this runs very reliably and is very robust. So, yes, in some cases, a web service task is perfectly fine. However, depending on the complexity of the integration, you won't get around, at least developing a simple script around it and using a universal task for that. That was a very good question. Yeah. Thank you. That was all. Okay. So where was I? So, I wanted to demonstrate a quick example how a new universal task can be developed. And for this, I'll jump into another demo system we have. You see there's a little bit more going on here. The first example I want to do is like a hello world kind of thing, which is always a good thing, a good approach to explain the basic concept. As I said, the first step is to create a universal template. And one second. I have to switch my slides here. Right. So universal template. You see there's a lot of templates already here. We wanna create a new one. First of all, you need a name for your template. And let's give it a good name, StormWrench Online. And I thought about using the Netstat command, which is probably known to most Windows and Linux administrators. It's a simple command to get some network statistics, some some port information from the command line. So I'm gonna use that to showcase how the basic concept works. So after giving a name to the template, we need to give it a variable prefix. And this is a very important thing because the variable prefix, will be used by our script later on. And this all becomes clear in a second. So the only other thing we need to define in the template is an agent type. So you may think, okay, but I wanna do a remote API call. Why what do I need an agent for? So the agent in this case, the agent type that we define here in this case is is used to determine on on which kind of platform the script that we define can be executed and interpreted on. Because in some cases, I think NetSet is only available to Windows. I'm not one hundred percent sure. So we would want to make sure that this universal task is only executed on a Windows machine. So in reality, universal tasks use remote APIs to communicate with an application. So we it's kind of an agentless kind of thing. Right? However, the script always needs to be executed somewhere. And in most cases, we use an agent that resides with the controller, something we call a utility agent that is able to execute a script and then do the remote API call to the application. So in this case, we say, okay, this universal task should only be executed on Windows machines. And then we can go ahead and define the script or, in this case, a command. So what I wanna use is the netstat command. Netstat. And netstat comes with a variety of parameters we can provide it with. Right? Like e is for a statistical overview, minus p allows us to define the protocol type we wanted to, monitor or we wanted to give information about, so either TCP or UDP. So this is how you would usually execute it. Right? So in this case, we want to we want the user or the universal task user to input only these parameters. Right? So instead of minus e, I will put in a variable here, and variables in the universal controller are always, declared like this. It's a dollar, a parenthesis, ops prefix, and then our prefix that we defined here earlier come into play. So s v o l, and then the name of the variable, which we haven't defined yet, so we can pick one, and let's call it, param one. Another parameter I wanna, I wanna provide here is the the protocol. So this is this is provided with the minus p. And as I said, either TCP UDP, I want the user to select either protocol, so we need another variable here. So again, dollar parenthesis ops s b o l, and then let's call this one protocol. Okay. And that's about it. So once we have our command, in in reality, you would have a large script. And with this kind of variables, you are able to fetch the input the inputs from the layout task to use in your script. So once I save this in view, we will get access to the fields. And we need to read, in this case, two fields, one for the first parameter and one for the protocol. So, the name of the field needs to be the same as the variable we just called it. I think it was param1. The label can be freely chosen. This is what we will display later on in the task parameter. And in this case, we want to allow the user to input any kind of free text. So we choose the field type text. There's other field types such as boolean, integer or choice, which we're gonna use for the other fields. Also, array and credential script allow you to look up credential and script objects within the universal controller. In this case, text is perfectly fine. We make this one required and we make this one the maximum length one because parameters are not longer than that in this case. So this was field one. We need another field for the protocol. Right? We call this one protocol, label protocol. And in this case, we want to provide the user with two choices. So we pick choice. And once we save this one, we are forwarded to the choices tab. And the first choice would be TCP. We use the same value as the as for the label. Oops. Save and new. And another one was UDP. Right? Save. So these two choices will be available, and that's pretty much it. So let's close this universal template. It's all good. And when we go back to our navigation tree and scroll past all these other universal tasks that are in this demo system and when we hit refresh, we should be able to see there it is. A new task type is created, our NetStat task. We didn't choose any icon, so it's a default icon. So now any user can go ahead and create a new NetStat task. Let's see how that looks like. So okay. When you create a new task, you you will see a bunch of fields that are not mandatory. Let's skip those. So we need to provide this with a task name, netstatdemotask. We need to pick an agent where this command is executed on because we earlier defined this as a Windows only kind of task. We are only provided with our Windows agent connected to the controller. Let's pick any. And now we see here the two fields we created in the template. One is the parameter. We made it mandatory. Let's here enter an e. We cannot put anything more because we limited the length and we have the choice to choose the protocol here. And that's pretty much it. So let's do one more thing. Let's collect the output automatically because we want to run this task and see what it does. That's the demo task. Let's launch it and take a look at the output. Okay. It ran successfully. That's always good. And if we go to the output of our task, we will see the the universal template with all the variables was substituted with the input fields we selected in the task. In this case, we entered e, and we selected UDP. And this is the output of the netstat task. Again, this is a very, very simple example. Right? But this shows very nicely how the input variables are substituted and how a universal template is executed in the background. So we don't have any active UDP connections on this machine, which which makes sense. And there, we have the statistics we we requested with the minus e. So this is, again, a very simple example. I also wanna show you how a very complex universal task can look like, and I'm gonna show you one that was recently developed by our solution engineer, Abhi Kumar. And it is about creating an AWS EC two instance from our universal controller and at the same time give our users the option to install a universal agent on this newly created EC two instance. So as you can see, the script behind the universal task is a little longer and a little more complex because there's a lot of things happening in the background. And we wanna make sure it runs reliably. And if it fails, we want to make sure that the user is presented with the correct error message. So error handling is very important here. So, all this has been taken care of. And, I think we can, we can launch it so you can see what what it does. I think the time is I think we have enough time. So when we this was the template. Right? And when we go to the actual task type, we see there's already a couple of tasks created for this template. And this one, we will take a look at because it has all the values we need for it to run already build out. So there's a cup there's many, many fields we need in order to run this job. Of course, something like the AWS region. So, you know, so the task knows to which EC two account to connect to. We can define the size of the of the server we want to provision. In this case, this is the smallest instance type, we don't incur much costs here. And there's also things like key pairs and very importantly, a function you see down here, install universal agent. So once this is clicked, we need to provide this task with a download file for our universal agent installation, and we need to select the operating system of this agent type. So let's launch it. I think it takes about two minutes to run completely, but we can see the progress of the task in the background. K. So this already ran. Twenty sixth. Okay. Now it run. My system is a little bit slow. I think my laptop is, pretty busy with all the streaming. So let's take a look at this new instance. So we can already retrieve some of the output. Even though this task is still running, we can see the progress. So the universal task already provides some output in the info category. So this is also something that you decide how well your universal template communicates, right? How much it talks. So we can also troubleshoot it. And in this case, it tells us that the EC2 instance was created. It gives us the instance ID already. We could use this instance ID in subsequent tasks. Maybe we have in a workflow to do any all all kinds of things on it. So we refreshed it, and there's something more happening. It checks the instance availability. Right? And it's still running. Right? We don't it's not a fire and forget kind of task. We are actively monitoring the progress of this task. The task status is okay. Let's refresh once more. And the cool thing is in this task that it installs as I said, it automatically installed a universal agent. And once this is this is this is done, this agent automatically registers with our universal controller. So it is available immediately to do any any kind of scheduling or automation on. So if we go to our agent list, at the moment, have nine agents. Let's give it a give it a couple more seconds. There's a lot of things involved. And, eventually, we will see a tenth agent, appearing here. Check the, output once more. If it takes too long, I will just continue with the rest of the presentation. Still running. It shouldn't take much longer. Maybe it's a good time to answer any questions. Marissa asked, has there been any questions? Yes. Freddie is asking, Hi, when integration UAC with any system, can we use with the current UAC six point eight or is it an extra add on product that is not available with UAC six point eight? Very good question because the answer is it is available with any subs with any license of the universal controller. So, yes, six point eight is the current version, and you don't need any add on in order to use all what we what I'm what I'm showing. So the universal task is a free to use feature. The all the integrations we have already published to the marketplaces are free to use. So there's really no strings attached in this case. And then we have Is it finished or should I ask another question? Yes, this is finished. So let's quickly look into this one here and then let's jump to the other questions. It was closed. Success. And refreshed. And now we have ten agents. So which one is the new one? I believe this one. So it's automatically active. We have the Amazon IP address here. So this has now taken us, I think, two or three minutes, something that otherwise would have taken minutes or maybe even hours to do manually. Right? So this is a very good example of how a universal task how powerful a universal task could be to to do all kinds of things. So this is not an individual task, but this could also be part of a larger workflow that you that you run to do even to do really an end to end IT process automation with this. Okay. There's just going back to the presentation, there's just a couple more slides I wanna show, and then we can jump to the questions. So we looked at a very simple example of the universal task and also a more complex one, and there's basically everything possible in between. The last thing I wanna show is the ServiceNow integration, and this is only screenshot based, so it doesn't take too much time. So you may remember the definition of upstream and downstream systems. What I just did or what I just showed with the Amazon EC two task was a downstream integration. Right? So we, as the universal controller, automate Amazon in this case. Right? So we have control via the Amazon API. An upstream system integration example is ServiceNow, and this is something we recently demonstrated also. It's basically using ServiceNow or the self-service catalog in ServiceNow to expose some of our features in the controller to business users that otherwise wouldn't be aware of our universal controller. Right? This is usually a t application for the FP for the IT operations people. However, the requirement was we get too many tickets from the business to create new jobs, to rerun jobs, to do all kinds of things we need to do manually, which don't, in reality, take us a couple of seconds when we log into the universal controller. So we want to we want to automate all this. We want to reduce the amount of ServiceNow tickets we get. We want to empower the business user to do some things himself. For this reason, we created in ServiceNow a new service catalog category we call universal controller self-service. And behind the service catalog, we, at the moment, have three features. One is getting basic information about a running job that is defined in the system. A more important or more interesting function would be the ad hoc execution to basically allow a business user to execute a certain job outside of the usual schedule. Right? So maybe you have a job that runs every day at twelve AM or maybe after some data has arrived. But we get a lot of tickets to run this again or ad hoc outside of the schedule. So now the business user can can trigger this himself from ServiceNow. So clicking on the schedule log item, the user It's very similar to our universal task concept just from the other side. So in this case, ServiceNow exposes only the mandatory fields we need to do our automation in the controller. In this case, a job name. This is a drop down list, the user cannot really mess up here and type the wrong job name that doesn't exist. So the user selects an existing job name. He provides a trigger date and time. When should this job run outside of the schedule? He can optionally define a trigger name and a description. And then all he does is he orders it. So in the catalog, we have the order now button. And what this does in the background, this is just a screenshot of the workflow in ServiceNow, the orchestration engine of ServiceNow takes care of this. So the it gets the values from from our fields that I've just shown, and it calls our universal controller REST API to create a trigger, to enable the trigger, to update the ticket, to let the user know the trigger has successfully been created. So the user also gets some feedback. It's not a, again, a not a fire and forget kind of thing. The user gets informed. The trigger has been created, and then the trigger is created in our Universal controller. It's attached to the task that he selected, and the user also gets notified once the task actually runs because the user is apparently concerned about this job for some reason. So he gets an email notification also once this job he has ad hocly scheduled run successfully or fails. And another example that, looking at the time, maybe I I don't wanna go into too much detail, is also regarding ServiceNow. It's kind of an interactive integration. So it's not that we create a service ticket or we get a self-service request. It's basically doing change management of the universal controller via ServiceNow to basically create if if you are familiar with the universal controller, we have this bundle and promote feature to basically promote new workflows or new jobs from controller a to controller b. However, in reality, change management needs to be centrally documented, and ServiceNow provides a very nice module for this. So what we can do is we create a new bundle in the in the development controller. This automatically creates a change request in ServiceNow, And then the manual part of ServiceNow takes over. Somebody has to look at the change request. It has to get approved. It has to be scheduled for implementation. And as soon as the ServiceNow change request hits the implementation phase, ServiceNow calls our development controllers API to basically promote this bundle. And it gets the feedback back if the bundle was successfully promoted. So everything regarding change management is then centrally documented ServiceNow. This is a different kind of integration again, more of an interactive kind of thing. Okay, trying to hurry up a bit, so there's hopefully some time left to answer any questions you may have. Marissa? Oh, okay. I think we questions now. Alright. Yes. Okay. So Lakshmi asks, do we have any integrations to Apache Spark? Apache Spark, you may have seen it on the on the slide I showed earlier. I don't think so that we have a ready, ready to use integration for it yet. I know that there's have been a request. I would have to make, do some digging, internally to see if we can already provide you with something. Would be interesting to know what kind of thing you would like to do in Apache Spark. So I can, write an email and copy you so that you can That will be quite everything. Yeah. Okay. Next question is an audio question from Elisa Moore. So Elisa Moore, I'm going to activate your audio. Okay, go ahead. Yes. The question goes to that template you created, very simple with Netstat. Yes. But in a Linux, Unix environment, you're going to pipe that to older commands like a grep, get one of those responses and save it to a fire or something. How that can be accomplished based on the templates you showed there? Thank you. Very good question. So this was just, as I said earlier, this was just an example to explain the overall concept. Right? In reality, you wouldn't probably create a universal task to provide the NetStat functionality to some users. And, yes, the piping is usually the way to to execute this command. So in the template, you could also include the pipe and then maybe another parameter that the user can input. But, again, it's really not a maybe not a good example to to yeah. It's not a real life example. That's what I what I'm trying to say. But you're very right. But would mean that we could complete put the command complete with the pipes and everything in one line, all it and get all the results. Okay. Got you. Thank Exactly. No problem. Okay, let me just quickly mute. Thank you, Elisamore. Okay, next question from Pascal LeFebbe. In a template, is it possible to disable modification of a prefilled general field by the user? Yes, absolutely. It does make a lot of sense because sometimes you don't want the user to change some of the variables. So maybe you don't even want to expose this kind of thing in the field. So it is hard coded in your script. You could also but you could also show this as a as a as a field and then make it read only, for example, or to to to to prevent the user from changing it. Excellent. Robert Chandler, do you have examples of the use of the universal task controller in Ansible? We do have an Ansible universal task developed that the time is probably not sufficient to showcase it. It would be interesting what you would like to do in Ansible. So I think what we have been doing is to run simple playbooks and basically monitor the execution of this playbook and then get the result back. And as I said, we have something. I didn't develop it myself, so I'm not a hundred percent aware what it does. If you're interested in using it, maybe Marissa can connect us after the call to discuss. Yeah, no problem. No problem at all. From Lori, for what version of Universal Controller does the self-service in ServiceNow support? So the the self-service and ServiceNow calls our, as I said, the Universal Controller API. And the Universal Controller API has been around for for, I think, a long long time. I don't exactly know with which controller version the REST API was introduced, but it's safe to say that there's a couple of versions back that would support this kind of ServiceNow integration. So at least six point six or something. Yes. It it may be even five point something. I'm not sure. Maybe Colin can can answer this question. He maybe knows. Oh, so, Maurice, I'll jump in here. So yeah, all the supported versions have API capability, but we are adding functionality and tweaking functionality in the APIs release by release, so it does depend on what functionality you want to expose in the controller. You should be good within supported releases, but there may be something specific Depending on what you're trying to do that may require a later release. That's right. For example, with the six point eight version, I think there were some additions to the bundle and promote API capabilities. So if if your self-service involves this kind of thing, you would need to have the latest version. That's great. But if you ever run into requirements for the API that we don't support, please let us know, because we are expanding that release by release. Exactly. Yeah, that's good for us to know. Okay, we have a few questions left, so I hope everyone can stick with us. I think they're all pretty good, pretty interesting. So David asks, as a partner, where do I get the integration software such as for ServiceNow? Sorry, say that again. As a partner, where would David get the integration software for something like ServiceNow? I guess he means universal task. Oh, okay. So Okay. Perfect. So one way to so I I quickly introduced the the Stormbridge marketplace where we push some of our where we push some of our universal tasks or integrations. ServiceNow is a good example because it hasn't made its way to the marketplace yet. It's something we are going to add in the near future. However, I can provide it to you directly if you like, if you wanna use it. Otherwise, we are working, as I said, on the marketplace to relaunch it and also to make all our customers aware when a new task is added to the marketplace. Transparent. If you're interested in this kind of integration, we can provide it to you directly. Yeah. Otherwise, you would have to wait until the marketplace is updated. Perfect. I've just copied you on an email anyway, just so that Robert can get ahold of that. Let's see, Lakshmi Oh, wait, hold on. Sorry, I need to go back. Here we go. Would you install Python and run the Python scripts you were referring to on the same server as UAC controller or preferably on a separate server? Also, a very good question. And this reminds me of something I forgot to mention. So it really depends on your on your on your architecture, architecture, how you how you deploy the universal controller. And because if you wanna reach third party application via this universal task, it has to be reachable from the machine where you execute the task. So if if you have a utility agent on the same server as the universal controller, there would have to be a network connection from this machine to, let's say, ServiceNow. I always use ServiceNow, but maybe to your SharePoint as well. So it's it's a network level matter, I would say, where to execute those tasks. What I forgot to mention is regarding Python. There's another reason we use it heavily internally because also our universal agents, the newer versions at least, they come with an optional Python runtime you can install and that is used by the universal task. And so you don't have to worry about installing and maintaining a runtime environment for Python anywhere or everywhere you want to execute the universal task that we developed. But to answer your question, it really depends on what application you want to reach. Okay. Excellent. Freddie asks the next question. With this new version and features, how many rows can be returned and handled with a database connection? A while ago, he said he had an issue using a SQL task with thirteen rows, and he was told that UAC is not a database tool and might not handle many rows. Interesting. So I'm I'm not aware that there was a limit of roles we can return with our SQL task, but the the answer was correct to to some extent. However, I'm not as again, I'm not aware of the limitations of the SQL task. Maybe this is a more of a support issue. However, a universal task could be developed or probably is already developed that allows you to run SQL queries or so procedures. And maybe there is a way to, to change this limitation. So we do have, universal task already on the, marketplace that allows you to run queries from any kind of agent. Maybe this limitation is not applicable for this kind of task. So maybe it's worthwhile checking this one out. Yeah. Okay. Maybe I'll have him have a follow-up email for you, maybe for an Okay. Regus of Stone Branch just wants to know if you can borrow your ladder. It's a very nice ladder, right? I just got this from the flea market, basically. It's an old I'm glad you were able to showcase your ladder today. Okay. Back to business. Jana asks, will the bundle in dev created automatically be created automatically, or does it have to be done by UAC admin team in this request? Hi, Jana. In this case, you're probably referring to this change, management integration. So the bundle would I mean, there's so at first, when we tested this, we created the bundle manually in the controller. However, I briefly mentioned it earlier with the newest release. The API of the controller was enhanced as to allow creations of this bundle via the API. So, this whole scenario could be enhanced now to allow the creation of bundles from ServiceNow as well. So you could theoretically start your change request in ServiceNow, define with, of course, some some kind of standard some some kind of standard typing, what changes you would like to or what objects you would like to bundle, and then the ServiceNow change request creates the bundle automatically by the API. This is also very much possible. So I will jump in there. So the Maurice, the the API to create and manage the bundles is actually the next release, not current release. The next release. Oh, Not current release. However, depending on how you want to do it, existing capabilities do cover promoting individual objects. Obviously, if you have an existing bundle, it can be integrated into this process, but creating and manipulating the bundle externally, not currently supported, but we're aware of that requirement. And the next release, which is scheduled for end of Q3 this year, will contain that functionality. Perfect. Thank you, Colin. This question is from Joao, although I believe I can just answer it. This ServiceNow integration is in an optional module of UAC and can be bought separately. I believe it's free. Correct? It's free. The integration itself is free, of course. You would have to have a ServiceNow subscription and probably also a developer instance to test it on first. But the integration itself is free to use. Good. Next question is from Linda. Are these presentations Oh, yes. All presentations in Stone Ranch Online are recorded and they will be available to everyone unable to attend. I will be sending an email to everyone probably in the next couple of days that will contain information about how to access the recording. So yes, we will give that to you. Robert Chandler, okay, we'll follow-up with him on that. Well, actually, I asked, can you show again the UAC in ServiceNow? I don't see it. UAC in ServiceNow. Okay. I can actually show you if if provided you have some time. Oh, actually, my ServiceNow session expired. I can show it to you live in the system. You you still see my screen. Right? Yes. Yeah. So in ServiceNow, we now have so what we did is we added this service catalog in ServiceNow, and this is how it's how it looks like. So as I said, there's, at the moment, three functionalities we tested successfully, and the ad hoc execution is, I think, the most compelling example at the moment. Yeah. That's how it's that's how it looks like. So if you wanna know more about how this is done in ServiceNow, we are not ServiceNow developers, but the ServiceNow catalog allows you to I think this is the the right menu to basically add new catalog items in ServiceNow if you're, of course, an administrator in the system. It's a very complex application. Okay. We have another one. Let's see. A couple of people asking to be added to follow-up emails, so I'll follow-up with them later. Someone says, Thank you, Morris and Colin. This integration sounds interesting, and I'm sure I'll reach out to both of you with follow-up questions. That was from Jonna. Thank you, Jonna. Thanks for the question. Everyone else looks like we can follow-up with via email. So, there any other questions, audio or written, before we conclude our session? Really good questions so far. Really good questions, yeah. I'll just give it a second or two. Sometimes they take a moment to type in and send. Thank you everyone for staying a little longer. I think it was definitely worth it. I want to thank you Moritz for participating and a great presentation. Thanks Colin for the support and thank you everyone for joining us. Have a great day. Thank you all. Bye bye.
In this on-demand webinar, we present Stonebranch’s Universal Tasks, which allow for countless API integrations customized to the needs of each user.
We introduce the UAC as a Universal Integration Platform, able to seamlessly integrate both for upstream and downstream systems. He also defines Universal Tasks and demonstrates how users can create their own, highlighting some of release 6.8’s out of the box integrations. Also, he delivers a live demo of the Stonebranch ServiceNow Universal Task and integration capabilities.
Topics covered include:
- What is a Universal Task?
- Integrations included with UAC 6.8
- How to use Universal Tasks to extend UAC's functionality
- Practical demonstration of Universal Tasks in action
Duration: 1:11:28