Product Update: What's New in UAC 7.4
UAC 7.4 highlights include workload simulations, jobs-as-code, and outbound webhooks designed to give you more flexibility when automating and orchestrating IT processes.
Hello, everyone, and welcome to today's webinar, which covers the product update on what's new in Universal Automation Center 7. 4. I'm Lauren Tancini, Senior Marketing Manager here at Stonebranch, and I'll be your moderator today. Before we begin, let's cover a few things. If you have any questions at any time during the session, just type your questions into the Q& A field and we'll answer them at the end of the session. Later today, you'll receive an email, which includes the recording so you can re- watch on demand. Today's session will be presented by Colin Cocksedge, Director of Product Management here at Stonebranch. So let's go ahead and get started. Colin, over to you. Hello and welcome to another episode of our release highlights sessions. So this time we're covering 7.4, for both the controller and the agents, so the UAC components. And we released these just over a week ago, so they're up and available. But let's get into our agenda for today. So we're going to be talking at a high level as to what the major things are in the product, dive into platform- support updates, and then go into a little more detail for the agent and the controller. And we'll talk a little bit about the Jobs- as- Code solution. Now, we did do a separate webinar there, but I've got a little demo that'll tie together that with some of the newer features in the 7. 4 release. So hopefully some of this stuff will kind of start to coming together for people. Okay. For the controller, the major things we have released is a new feature called Workload Simulation. We'll talk a little bit about this and we'll show some of this, but effectively this gives us the ability to simulate tasks without actually executing them. So it gives you the ability to manage new workloads, converted workloads, new jobs within workloads and things like that, to get a feel for how they're going to run and make sure your definitions are correct. We've also beefed up the forecasting, and we'll talk in that in some detail. We have an extension to, in the 7. 3 release, we released the webhooks, and there's been kind of a theme with UIP as to where we're going with this. But for the system events, we've released an outbound webhook to integrate the third- party products. And again, we'll talk about that in some detail. So we've provided a timeline view for the workflow activity, and we've added promotion for reports, widgets, and dashboards. Now, this is just the highlights. There's obviously a significant amount of new features, enhancements and tweaks to the product. So we encourage users to take a look at the release notes and the maintenance lists. To validate if there's specific things you're looking for, you'll find them in there. Okay. So for the agent, a lot of the focus in this last release has been on the security aspects. So we've added support for TLS 1.3 for the agent communications, along with some enhanced ciphers that are available with that implementation. Okay. OMS has received a couple of updates, in terms of we've removed a message size restriction that we have of six megabytes. Primarily this is for the extensions. As we package the extensions and their dependencies, we would from time to time hit that limit, and wanted to increase that. That will also allow us to receive or retrieve larger payloads from tasks in terms of output as well. So if anyone's hit that limit, you'll see that we have a configurable message size for that now. Also, in terms of the package of the integrations through the Universal Integration platform, some of the tasks we have out on the marketplace have dependencies for native libraries for specific platforms. And we've added support so that we can have those built into the package. They will no longer, as we get around to updating the various integrations, no longer require pre- reqs to be installed for Windows or Linux servers that are running those for you. And a number of updates to the DACA images that we publish and help host on the DACA hub. So the platform will support updates. So as usual, we support current fallbacks. So just a reminder that here are the expected end support dates. So 7.0 has just gone out of support, and obviously 7. 4 has just been added to that support matrix there. On the platform support changes, obviously the support for TLS. For the controller, we've added support for Java 17. And something worth noting, we've dropping support for Java 8. So on 7. 4 you will not be able to run Java 8 anymore, that's gone out of support. So you will need to look at upgrading your Java, which your Tomcat is based on if you have that in your production environment there. Okay, so just an FYI on that. All of the JDBC drivers that we ship have been updated to the latest drivers from the manufacturers, and we've added System D support for the you broker D on the install. Okay, so let's dive into the agent in a little more detail. So for the Docker Image Updates, a number of things that we've done there. And the first one is that the Red Hat images have been updated to the Linux Kernel 5 for UBI 9, and we've done that retrospectively from 7. 2 images onwards. From 7. 4 onwards, we've added a capability to terminate the running task when a container is stopped. So traditionally, the way the controller and the agent work together, is that the controller doesn't know when an agent goes offline. It doesn't know whether that agent's been shut down or whether that server's been shut down. So in normal practices where you have fixed infrastructure, so you're running this on a server, there's really no decision we can make as to which of those two occurrences happen. So we wait until the agent re- registers or comes back online, and then decide whether we can connect to that task or not, and if we do. So you'll see tasks sit and running. But in a docker container environment, there's really no concept of shutting the agent down, you shut the container down. So basically the workload has gone away and we know that for fact. So we've just added the capability that those tasks will show up as failed, tasks that we're running when you shut that container down, as opposed to still running. And then in a container situation, that container may never connect again, it's a transient infrastructure, so you don't want to have tasks that are set out and running. So we've provided capabilities to handle that. We've added the agent 7. 4 to the Docker Hub, so that's available for download, and we've removed the agent 7. 0 as that's just gone out support. And we've added support for UAGS message level environment variables there. So that really comes down to the capabilities of when you take the images from us, being able to set the different message levels for the components. Message levels for most of the components were supported, but a UAG's message level components were not supported until this release. On the security side, the TLS 1. 3 and the new ciphers, more advanced ciphers there. So if security is a concern, that's something to look into. You may want to adjust your configurations to take advantage of those. On the OMS I've mentioned the six megabyte message support for larger payloads, whether we're achieving output or whether we're pushing extensions with package dependencies in them out to the agents for running integrations. On the UIP side, we mentioned the packaging now at the Navy C Runtime library support for the different platforms we have there. You can specify the location of the agent Python within the extension Python list. So this kind of plug the gap that we had in terms of if you have multiple Python environments on the target server where you're running the universal tasks script- based or extension- based. You can be very specific about which extension, which Python version you're picking up to with the agent there. Okay. Support for database connection fields. So we've added those into the capabilities of the universal templates. You can now a new field type database connection. So support was added in for both the agent side and the controller side to handle that, obviously the UIP APIs within Python to give you that information and be able to extract all of the different information from those connection definitions from the controller. For the UIP CLI and the integration with the Microsoft Visual Code, we've added the ability for you to provide your own templates. Previously we provided two very basic templates, one for a script- based and one for an extension- based integration. You can now build your own templates that do more sophisticated things, and this obviously speeds up development of integrations if you are one of the customers that's taken advantage of that. So we've added some ability for the extensions to report progress in a status bar on the controller, so there's kind of a new message type that you can use to report that back. So as your extension is running, as it's doing certain things and gets to certain milestones within its activity, it can report that back and that can be reflected in the activity display on the controller. And the credential functions, we've added support for task environment variables. This is actually not just for the UIP stuff, but for all the forms or task types that support environment variables. So the Linux, the Windows, the universal tasks, you can use credential functions within those environment variables. This is really because we've come across a lot of integrations that accept credentials as environment variables. So in order to make the integration of those a little more seamless, you can use those functions to grab the user ID, the token, the password, and set that as an environment variable within those tasks. For UFTP, we can now configure or you have more control over some of the performance related capabilities, specifically the read- write buffers can be configured. This can, under certain circumstances, have an impact on the performance For SFTP transfers. Automatic output retrieval has been added for the FTP file monitors. We've had a number of requests around that. You would always be able to retrieve the output, but you couldn't set that automatically. So we've rectified that and that's been added into this release. And we've increased the number of characters accepted for the remote server field of a file transfer task. We ran into a couple of cases where the limit we had within that field was not sufficient for certain environments. So on the zOS task side, we have basically the ability to provide a customizable JCL within the UAG rerun pre- step that gets inserted. We came across a couple of environments where specific things were required within any JCL step or program calls, and we can now support that by supporting the use of a procedure. So basically you can create a JCL procedure and specify that that's the template to be used for the UAG rerun step that gets inserted there. And we've added a sample of that to the SUNVSAMP library on the zOS in install. On the controller side, on the architecture side, so in a high availability environment, you have multiple cluster nodes, in other words, instances of the application that connect to the database. And obviously we have active and available instances there. And when they fail over, one of the available instances can take over and be the active instance. Now, a lot of customers came to us and said that, " We would like to have one specific node as the active if it's available, so when we fail over, that primary node goes down and we fail over, we want it to come back when it becomes active again to become the active." So we've allowed that with creating a feature called a preferred node. So basically you can set any node as being preferred or multiple nodes as being preferred. And any preferred node when it comes online, if the node that's currently active is not a preferred node, it will take over so it'll fail back. So in the usual situation, you have a two node high availability, node A and node B. Node A is your preferred node, it goes down, we fell over to node B. At some point you recover whatever the issue was with node A, it comes back online. That will now or can have the capability if you set it as preferred, to become the active node automatically. On the workload validation and analysis side. So one of the things that we do a lot of in terms of new business, there's a lot of conversion activities. And one of the things that as we talk to our internal group that handles those conversion activities is the validation of the conversions from the customer perspective. So we've added a number of features that really help with that, but we feel are also super useful for customers that are already up and running. So the workflows now for the workflow instance have a timeline view. So on the right click there, you are able to select the graph view, the list view, and now the timeline view, which is effectively a gant- like view of the jobs within the workflow. So that gives you some extra visibility into what's going on as those are running. For the forecast, previously run criteria which had variables in it were not resolved. We've now gone through and resolved that. In most cases what we're seeing is that run criteria uses dates, and as long as you're doing this off the trigger time, then those dates will be accurately resolved for any date in the future from that point of view. And we'll talk a little bit about visibly how we represent this within the functionality there. So effectively, you'll have an asterisk next to something that is resolving a variable, so that you'll be able to see whether that we're assuming based on the information we have, that we have the capability to resolve that. We've tentatively resolved that as being skipped or as being run. But we put the asterisks just to say that there was variable resolution there. The other feature we have, which we'll talk about in some detail here, is a simulation capability. So any task form has a new checkbox called simulate, which you can check. If you simulate a workflow, all the tasks within that workflow will be simulated. Or you can simulate specific tasks within that. So what happens in simulation is that everything, and you have a control over certain things that happen, but everything that would normally happen other than executing the workload happens. So for example, it will go through resource allocation. Can it grab a resource? It'll grab it and release it, but it goes through resource allocation. It goes through agent allocation for those tasks that have an agent. So we'll check that things like the cluster nodes resolve, agent variables resolve, that there are agents available that we can do that. And then optionally, for each task that you want to simulate, you could set up simulation data, and that gives you the ability to have even more control over what happens. So do you want those tasks to publish status? So if they publish status, potentially, task monitors that are looking for that task will file. So by default it doesn't publish status, in which case, they won't. But you can make them publish status. Do you want to publish late start, late finish, early finish. Other words if you have notifications based on those, do you want those to fire? Do you want to execute various actions? So you may want to have, let's say, set variable actions executed, but not email notification actions executed for this. You could also set a status and a exit code. So if you're testing paths within a workflow, you can set specific tasks to fail with a specific exit code and confirm that that path is taken in the workflow in a simulation mode. You could also provide output data. So if you're using functions that read the output of a task, you can provide a template, variablized template for that output, that will publish that output so that, that can be accessed. You can grab whatever you need from that output in a subsequent task, make decisions based on that and so on and so forth. So a lot of valuable capabilities there in terms of that. And obviously you can pass in specific variables for the simulation as well. So when a task is simulating, simulated tasks in the workflow monitor will show with an asterisk. The asterisk means that they are simulated, and we can see here that I run a workflow where we've simulate it, certain things have been skipped, certain things have been run, and we've got all that information available. In the activity display, you have then the checkbox to show you whether it was a simulated task, and obviously you can filter that out of your activity display if you don't want to see that, or you can set specific filters to go ahead and just view the simulated jobs in terms of that. So a lot of capabilities there in the simulate capabilities there. So the outbound webhook, this is effectively a way or a new way of integrating events that we publish internally, to external products. A number of different scenarios around this. And in 7. 2 we added universal events, 7. 3 we added the webhook and we have system events, so that's an ongoing project. So in this release we've added agent events. So any event that happens to an agent, whether it gets suspended, resumed, whether it goes offline, whether it registers, whether it gets deleted, we'll generate an event and we can push that to third party products. So this is a different way of doing it. We previously could do this with the system- based events by using a monitor and a trigger and tying a task to that. We've basically created a subscription model, so you don't have to create the monitor and trigger yourself. Effectively, that all happens under the covers, so to speak. And you have the capability within that subscription to either just specify URL, in which case we'll send a payload to that URL. So that would be an inbound webhook for a third- party product. But in cases where that's either not supported or the requirements require some additional formatting, you can also get it to specify a specific task to run. And from a licensing point of view, these tasks that these subscriptions will run are excluded from the licensing counts on that. So either a URL, which happens under the covers, or it'll launch a task there. For the lifecycle management side of things, this is really the ability to get definitions through your environments, whether you've got a dev, test, UAT, QA, production, whatever it is. And it covers the bundle of promotion capabilities, but also covers the new solution that we've pushed out this year is Jobs- as- Code. So a number of things we've done in here, the reports, widgets, and dashboards are now available for the bundle and promotion. We've added the ability system to disable promoting with follow references. Depending on how you structured and what your concept is around this, this caused some problems for customers, where I think users were inadvertently checking that without fully understanding the consequences. So we've added the ability to remove that, and we've introduced the Jobs- as- Code solution. There is a webinar recording which goes into this in some detail, but we'll talk about this at a high level as we get through. So another thing, although this is a small update, it has fairly far- reaching consequences. We've added new functions to process to limited strengths. And what all this means is that within something like our recurring task, we can now accept a variable as input that contains a list of items that we can iterate through. I think I've done a demo in one of these previously where we looked at doing a database query and passing that information into a recurring task, and processing each row individually. The example I have here is using a remote file monitor. So the remote file monitor, if you have a generic query, produces a list of files that match the query. You can pass that directly into a file transfer task using UFTP, and that will accept and that will be able to transfer the files or move the files. But if you want to do something more sophisticated to each file, let's say you want to rename each file differently, that becomes a little more problematic in that. So this would give you the capability to do that, for example. So the example here is that I have a remote farm monitor task, which is going to get the list of files that it finds to the built- in variable ops trigger files. And I've just got an action in there which is going to set that to a variable that I'm going to use in a recurring task subsequently. So the new functions we have will look at that variable, and will tell me the number of items that are in that common separated list, and will also allow me to access each of those individually by number. So in the recurring task, your number of recurrences would be the value count. In other words, the number of items that are in the list of that variable, the sales data list, which is the variable that I set from the remote file monitor. Then I can access those by passing into each recurrence. So let's say I get three values, I'm going to run three recurrences. I'm going to pass each different value into the recurrence. And one of the things we also had to add was a new variable on the recurrence count, because some of the functions we use are a zero based index, and some of the functions we use are a one based index. There's a lot of reasons why there's differences there, which I won't go into at this point. But what we noticed when we were getting into this use case, was we found out that, " Oh, yeah, this is a zero based index. And the recurrence count, which is going to give you 1, 2, 3, et cetera, isn't going to cut it. We need something that gives you 0, 1, 2, 3, et cetera." So we added a new built- in variable that gives you the recurrence count minus one, which allows you to, if you're using functions that have a zero based index, to use those within the recurring task. So if we look at how that pans out, we run our file monitor, it produces the list, in this case of four files. So I've got sales data from Asia- Pacific, Europe, North America, South America. The recurring task, based on the definition we looked at previously, is going to spin off a recurrent occurrence 1, 2, 3, and 4. And we're going to access those lists and get a value 0, 1, 2, and 3 from a zero based index and see that we get that data passed to each recurrence. So we can do whatever we want within those tasks to process those files in a fashion, with extra capabilities that we don't necessarily have in the file transfer task to do for a list of files. So there's also been capabilities added there as well as common separated values, is tab separated values as well. So we've added a number of different functions there to handle different types of data of that kind of ilk there. For the web service API, a number of enhancements on new capabilities. The composite trigger list component events has been added. It was a new API. We've added the workflow forecast commands through the web service API. And we've also added a very powerful new capability tool, all the web service APIs is called user impersonation. So the scenario is here is that an administrative then can use the API to access definitions within the controller, with the user context of another user. So there's a couple of ways that this can happen. Oh, yeah. One of the use cases around this would be a service portal. If you're using our APIs with your own service portal, rather than having to capture the credentials for the users each time you want to do a call or having to go through the hassle of storing those and so on, we've added the capability for you to set up, let's say, a specific user to call that API, that you can grant the capability to the user impersonation and you can control which specific users it's allowed to impersonate. So all you then have to do is pass in the username as part of that call and you will get the data back based on that user security context there. So within the user screens within the product, you'll see some additional capabilities there to, in fact, we'll go ahead and view that within the product. Why not? Let's log back in. And if we go to services and users, within the users here, you will see that we have a... Where is that. Well, actually, I'll find that in here. My apologies. This was an ad hoc thing to come here and do this, so I don't have that system configured correctly. Decided on the spur of the moment to do this, but we'll get into it. So here, there, if we have the API user, I've granted him the role that allows him to do the impersonation, and we now have the capability within that user to add users to his impersonation list. So he's accessing the APIs via a token, that was something we introduced at 7.3. And I'm allowing him, in this case, to impersonate myself, so that he can make calls on behalf of me. And it's just a header that you pass into the call with the username within that header there. Okay. All right. So kind of the best of the rest list of things here. So the task monitor's been enhanced to support late and early, as things that you monitor for. We allow variables in the database connection definition. So if you have things in the database connection string that need to be variablized, you can do that now. We've added the database connection field types, the universal templates, talked about that already. We've added the agent event to the universal events, and we will be adding system events as we go forward, a few with every release until we get all the events in there. We've got a prioritized list. I believe that the task instance status events will be the next one that we tackle, so you'll see that in the next release. We may have the opportunity to get some others in in that release, but we've got a lot of things that we're trying to get in terms of new features and capabilities into the product. So we've added the actions tab to the task instance form so you can review the actions for a task instance and see those without having to go to the definition. So you can do that directly from the task instance form. The environment variables for the credential functions and the capability for you now. So a few releases back, we added the assistant property to allow you to say that agent should have a credential defined, so you have to use a credential when you're sending work down to the agent. We've allowed that to be more granularly set. You can do that at the agent level. And this will override the system properties. So you have specific agents that either require or don't require credentials, you can set that at the agent level there. So users can now access their own audit history. So if you're not an admin user and don't have the audit roles, you can now look at the audit history, you'll see that appear in your services menu, and you can look at your own audit history. So this could be quite useful if you have done a number of things and can't remember what you did exactly, or did I do this? You can go and look at your audit and you can see, " Yes, I launched this task. Yes, I made this update to this definition." Those kind of things. You can do that on your own now and see that within your UI display. There is, this one switched on my default. So when you log in, when you deploy 7. 4, when you log in, unless you change the property and there is a system property that controls this, you'll see a last login date and time pop up in the console. So you'll be able to see, oh, has someone logged in with my credentials since I last thought I logged in, that kind of thing. And again, the output retrieval for the remote farm monitors. So a couple of three things on the additions, things we've done to the user experience here. So the capability to, and this is a system- wide or a user property that allows you to auto expand the lists. So depending on how you use the product, how you feel about it. Some people prefer to have the wider view so that the tabs display across the whole screen. You can set that up as the default now, so when you open a list, it'll be automatically expanded. You can still collapse it just by clicking the little collapse icon there. But it gives you, again, different way to access and view that. Again, a system and a user property for the left- hand navigation menu. So if you want to have all of the options open and remain open when, the default behavior here is that I click on a group and whatever group I was looking at prior, previously collapses. The thought behind that is that, that stops you from having the left- hand menu scrolling. But some users prefer to have all of them open and scope through it, so that's fine. We better a preference, you can do that now. So on the Jobs- as- Code side, and we're going to go through a little demo that ties a few things together here. Basically this is an approach for integrating UAC definitions with an external repository, so that you can manage your application code and put that through your development pipeline, delivery pipeline, and have that job configuration managed as part of the code. So we've added some capabilities there and that there is universal tasks, basically a solution available for this. And there's a webinar recording, which I recommend you review, because it goes in somewhat more detail than I'm going to go to today. But effectively with this, we've added the capability for you to manage those definitions in YAML, and I'll talk about why that might be a good idea, as well as the native JSON from the APIs. So the concept here is very much that we provide the capability for you to get the definitions from the controller into an external repository. Currently we're supporting GitHub and GitLab. We have a list of others. In fact, we did a survey during the webinar and Bitbucket came up as being very popular. So that will be the next one that we'll add to support the capabilities of this. So then within the Git repository, you can potentially update or you can just use it as a repository for versioning, which is a valid use case, but you can do the updates in code if you want to as part of your developed lifecycle. And then there are a number of options for synchronizing that back to the controller. So as you merge those definitions up within your repository, we can use an inbound Webhook to catch that, or you can use the APIs as part of your development deployment pipeline, in order to push those back to the repository. And the export and synchronize are really very much handled with a new universal task, which is available on the marketplace, which does that Jobs- as- Code integration for you. So the recommendation there is very much to integrate your repository with, I would recommend your lowest environment, but only one environment, and then use the bundle and promote to move things through. And we kind of show how all this works, is I have a demo scenario where I have a workflow that I want to add a notification to if a certain condition is met. So if we go ahead and look at the controller here, you'll see that I have two controllers active. The green one is my production, the orange one is my test environment, if you like. And what we'll look at here is I have a data supply chain workflow, so a data ops workflow if you like. And you look at the data ops, data supply chain, it's broken down into a number of different stages. You go through collecting data, ingesting data, preparing data, calculations on the data or manipulating the data, and presenting the results. And typically within a data pipeline, it touches a lot of different groups within an organization. So it may be development groups that are specifically responsible for gathering the data. And as I drill down through this high- level workflow, we'll see that I have a couple of different points where I'm collecting data from. And if we go through my S3 collections, we can see the workflow that we have here. So in production, this workflow doesn't have the notification tasks that we want to push in. And in my development environment, we also don't have that there. So we don't see that. So what I'm also going to do with this, is I'm going to make these updates in a repository. We're going to push this, synchronize this to my lower environment, my test environment. And then as part of that pipeline, I'm going to run a simulation on this workflow. So if we go ahead and look at the simulation here, I have here set up a simulation for a specific task that I'm going to simulate, and I'm going to pass a specific variable into that task. So we're going to do that into the workflow and into that task. So this is going to fail my basic check and I'm going to get a notification. So a fairly simple use case here, but we see I've got the simulation data set up for that. What I also have within the workflow here is I am going to integrate with my repository with the webhook that's going to kick this workflow off. So basically every time I push for this project, I'm going to do a number of things. I'm going to synchronize, I'm going to pull the definitions that have been updated into this controller, I'm going to run through my simulation, which is kicked off automatically. I'm going to monitor for that simulation to complete. If the simulation works, then I'm going to just go ahead and promote it to production automatically. So that's the process we're going to go through there. So what we'll see is we get through in here, and now we're looking at my IDE, so a visual studio code. And for all of this stuff that I already have that I'm managing in GitLab, in my case, we can kind of see there's some color coding here. So I've added a new task, I've created a new task, and I've made an update to the workflow. So I've got two updates ready to push, and we can see update to the workflow is I've added the task, the notification task as a new, versus Vertex within the workflow. And I've added an edge condition, which also does the runs it based on checking the variable, which is the file size. So as we pull the data down from S3, we're going to get the number of records and we're going to do a basic gut check. Is that enough data, as much as we're expecting or not, from that site? So we can go ahead and we can commit and push this. Oops. And stage the changes, but that's fine. The pusher title, we'll go ahead do that. And once that has completed pushing, so this is my development branch that I'm working on. This is going to push this to the main branch within my repository, and that should have gone. So if we come in and look into the repository, we'll see that we have a new push that's come in and I have the ability to go ahead and merge that. So I'm going to merge, develop into main, and I have a webhook that's sitting there, waiting for that to kick off that workflow. So if you want a little more detail about how the webhooks and how to set that up, you'll see that in the Jobs- as- Code webinar there. But we're going to go ahead and merge that, change into our main. That has merged, so within my test environment. Takes a second. Yeah, so we'll see a couple of things that have happened. So we've kicked off my workflow here. And I've held everything so that we can view it, right? So this is my automation workload here. So if we go ahead and release this recursively. We can see that we're monitoring for the workflow to do, which has been kicked off. We're running the import of the data. So we had to import this before I kick off the workflow, and we'll see that the workflow itself has come through. I'm running the data pipeline collections workflow. If you view that workflow, we can see that we simulated pulling the data. We actually ran the deployment of the data and the reason we, sorry, the environment, the data's going to be pushed to. The reason we do that is that we wanted to check, we should get undeliverable here because the agent's not active. So we need to go ahead and look at why that is, always the joy of tragic things. So it looks like it's done at, why is that undeliverable? It's going to tell me that I probably have no agents in that cluster. Let's just add it. But we've also sent a notification, notification task run, and we'll take a look at that in a second as we get there. So no agency cluster, so we didn't deploy the agent successfully. I've obviously changed something in the configuration here, but if we add an agent to that, that will run through and we'll then promote that. So we'll actually go ahead and give this an agent to run on so that we can see the final part of the CICD process happen when this goes to success there. Any one of these should work for that. Okay, that's an outcome queue that should run through. We got a notification because our condition of looking at anything less than 30, 000 was met. So if we go ahead and look at, in this case, I'm using the team's notification task. You can see we got the notification here, the sanity check failed. It's just in this case, just an fyi, we're not stopping anything. We're just saying, " Oh yeah, you need to know that we didn't really get as many records. You might want to go and look at that." And we could have added a check to this to allow us to view that output directly on that. So lots of capabilities there within our integration with teams and so on from that side. So that's completed. So our CIDCD process should be finished. So we've run the promotion now. So if we go back to our production environment and reopen that workflow, and we'll go directly to the sub- level workflow, we'll see that the production environment now has the task in there as well. So we have that kind of soup to nuts where we've gone through that and gone and gone through that. Now, I have the capability here, and I don't really have enough time today to go through that, is if I back this change out, which I can do. If I revert this change in the GitLab, we'll do the synchronization again, and we'll basically go through the same process and automatic promote production, or we could remove that task. So we can back those changes out all the way through the chain by configuring that automation correctly to do all of the things we need. So we've got making the changes through Jobs- as- Code. We've automated the synchronization, we've automated testing of those changes, and allowed that then to be pushed up to the higher environment. So your QA environment where you'll do more thorough testing, and then potentially manually pushed off into a production environment. But that ties together a number of different things in terms of we are looking at the webhooks, some of the notification stuff, we have the simulation capabilities and so on. So you kind of see how you can start to use all of these features together to do sort of much more sophisticated management of your environments, of your definitions, and managing that as part of your development life cycle, depending on how you do that within an environment there. Okay. All right. So yeah, here again is just the automated testing and deployment where, just to recap, we've done that through GitLab. Changes there have come in through the webhook. In our case, we've pushed off the Jobs- as- Code definition and we've gone ahead and promoted that directly to, in our case, production environment there. So we'll open the floor for questions. I don't know if there are any yet. I'll need to open that dialogue here. Are the credential function support for task environment variables available in normal task or just UIP tasks? And that is the normal. So all of the tasks, definitions, that support environment variables that have that table in the form, are supported for this. So Windows, Linux, and there are probably others, but certainly those and all of the universal tasks as well. Okay. Can the preferred controller settings be done programmatically? We change our preferred OMS server every other month, so that would be very helpful. Not at this time, but we will add that. Our goal is always to have all the UI functionality available through the APIs. So that is on the list. But yes, so not currently, but we will do that. Regarding dropping support for Java 8, we're using open JDK version 1.8.0- 345. I'm assuming this is included in the loss of support. Right. 1. 8 is Java 8, yes. So you will have to move that out. I think it's been out of support for quite some time. We do usually don't drop support for third- party products until they've been out of support for a while. I forget what the date was. That was fairly early on in the project that we did that, and that means it would've been six months ago. My memory doesn't stretch back that far. So yes, you will need to upgrade that. Okay. How big is the ops trigger files field? I don't know off the top of my head. What did we increase it to? The ops trigger file? Good question. Oh, okay. The trigger files. The list of files. I think I would have to look, I don't know off the top of my head. My guess is I believe that that takes 4096 or something like that. It's fairly big, but don't quote me on that. I'll have to look that up. So I'll follow up with that question afterwards with a definitive answer. How did you change the colors to use orange and green for dev and prod? Oh, okay. Yeah. So when we revamped the UI, that went away. So 7. 2 I think, that went away. We added it back in 7. 3. So if you have 7. 2, you can't do it. But if you have 7. 3, you can. Let me share my screen again and show that. It's basically a system property. So if we go into these, so if we go into admin properties. It's banner color, I think. It's always banner with two Ns, I always forget. There we go. Banner background color. So it's a system property you can set there and have that. You could also put the logo on, which we have before. So if you have your own custom logo and you want to have that with a clickable link as well, you can do that. I don't have that configured on either of these systems, but yeah, you have that capability. So that was reintroduced in 7. 3. So yeah, have that capability. Thanks, Colin. All right. Are you able to show a quick example of workflow timeline view? I don't have much, any sensible data in either of these systems, which I apologize for. It's always the problem, because I don't run a full production environment. But I think you'll see some use of it in the product documentation. I'd have to look to confirm that. But no, I really don't have any data that makes sense to show that with. Okay. Looks like that's all the questions that we have for right now. Thank you, Colin, for the great presentation showing us all the new features in UAC 7.4. This concludes the webinar. Don't forget to check out the handouts with the documentation and some other useful items. And don't forget to download the global state of IT automation report if you haven't already. There should be a popup on your screen so you can download it now. And we will be sending out the recording to this later today for you to re- watch or share. Thank you everyone for joining. Great. Thank you. Stonebranch, realtime hybrid IT automation for whatever comes next.
Universal Automation Center 7.4 leads with workload simulation. Check the simulate box on any task or workflow and everything happens except the execution. Resource allocation runs. Agent allocation runs, so cluster nodes and agent variables get resolved and checked. Simulation data gives you finer control from there: decide whether tasks publish status, whether late and early notifications fire, which actions execute, and what exit code a task returns so you can prove a failure path is taken. You can even supply templated output data for downstream tasks to read. Simulated tasks show an asterisk in the workflow monitor and can be filtered in or out of the activity display.
Forecasting improved alongside it. Run criteria containing variables now resolve, with an asterisk marking anything resolved from a variable. Workflow instances also gain a timeline view, a Gantt-style look at jobs as they run, available from the same right-click menu as the graph and list views.
Outbound webhooks extend the event-driven work from 7.2 and 7.3 in the other direction. Agent events, including registration, suspension, resumption, going offline, and deletion, can now push to third-party products through a subscription model. No monitor and trigger to build yourself. Point a subscription at a URL and UAC sends the payload, or name a task if the receiving system needs custom formatting. Tasks launched by these subscriptions are excluded from licensing counts.
The jobs-as-code solution manages UAC definitions in an external repository, currently GitHub and GitLab, in YAML or native JSON. Export definitions out, version or edit them in code, then synchronize back using an inbound webhook or the APIs. The recommendation is to connect one environment, ideally your lowest, and use bundle and promote to move changes upward. Reports, widgets, and dashboards are now promotable too.
The closing demo chains everything together. A GitLab merge fires a webhook, UAC pulls the updated definitions into a test controller, runs a simulation against the changed workflow, sends a Teams notification when a data sanity check fails, and promotes to production once the simulation succeeds.
Elsewhere, agents add TLS 1.3 with stronger ciphers, and the six-megabyte OMS message limit is now configurable for larger payloads and packaged extension dependencies. Universal Templates gain a database connection field type, custom integration templates in the UIP CLI and VS Code extension, and progress reporting to the controller status bar. Credential functions work in task environment variables across Linux, Windows, and universal tasks. High availability clusters support preferred nodes that fail back automatically. The web service APIs add user impersonation, so a service portal can call the API as a specific user without storing that user's credentials. New string functions let recurring tasks iterate a delimited list, useful for processing each file a monitor returns individually.
Two platform notes worth planning around: 7.4 adds Java 17 support and drops Java 8, and 7.0 has reached end of support.
Key Takeaways:
- Simulate tasks and workflows without executing them, with control over status, actions, exit codes, and output
- Push agent events to third-party tools through outbound webhook subscriptions, with no monitor or trigger to build
- Manage UAC definitions as code in GitHub or GitLab, synchronized back through webhooks or the APIs
- View workflow instances on a Gantt-style timeline, and forecast run criteria that contain variables
- Java 8 support is dropped in 7.4, so plan a Java upgrade before you move