 Thanks for coming out everyone. As I said my name is Timowl. I'm a senior product manager with Red Hat on the Ansible team and I have a long background with Ansible. So I've actually started working with Ansible almost since it became a project, which means my use of Ansible actually of course predates using predates Ansible as a company let alone a Red Hat product. So I've been working with the community I was actually a customer for a while. I worked at Bank of America and was Ansible's customer there and then I joined Ansible as a consultant and a product manager. So my whole point here being I've seen it all from all sides of how Ansible works. Today, we're going to talk about get-ups particularly the Ansible way and I'll explain a lot more what's gone into my thinking and why I've done what I'm doing here but quick show of hands so I know I know where I'd develop a conference. I just wanted to get an idea of my audience Who here works with Ansible knows Ansible? Perfect. Okay, so so the Ansible slides that I do have here just in case I promised a speed right past. I just put them in just in case I do a lot of talking to people that aren't familiar with Ansible I didn't think that'd be the case didn't want to presume. How many people though are working with Ansible Tower or AWX the open store? Okay, so a lot less. So we'll do a little bit of explaining about that. Kubernetes Okay operators few less. Okay, last one. I promise who's familiar with get-ups All right, great. That's fine. That's fine. I'm gonna cover all this I didn't want to cover anything that everyone here already knows. I was hoping people would know Ansible though that you're at an Ansible presentation So let's start off with a little background on what is get-ups? What do they mean by get-ups? And like so many terms in our space in our industry It's something that evolved and emerged and it really has come from the insights and the practices that came before it and I Found when I started looking at it. So when I first started hearing about it myself that finding a true concise definition You know something definitive is a bit elusive it actually had to do a lot of reading and didn't really find a great one The whole idea of get-ups started in 2017 and it was coined by a guy named Alexis Richardson he's the CEO and founder of a company called we we've works and a lot of how I define get-ups in this presentations comes from him and The work that we've works is done So I just want to acknowledge them and that that's a really good place to read up on more of the stuff It's the stuff that they've been writing this here's the initial blog post that first explained the concept of Get-ups and put out some baseline ideas It didn't provide the concise definition I was hoping for since this is the one everyone refers back to as being like this is what get-ups is all about But it is Good starting place so depending on Like I said it puts out baseline idea. It doesn't provide a concise definition But depending on who you asked you will get varying definitions of the terms that are out there So anyway, this is a workflow that really began from Martin Fowler's comprehensive, you know continuous integration thinking that went into it back in I think it was 2006 and it really just Descends from site reliability engineering from DevOps culture from infrastructure as code What makes get-ups different is well It it's part of that and it descends from that It's a very prescriptive workflow and a pipeline for how you develop things So that's what makes get-ups what it is is that it's very prescriptive in what they mean and how it works And this is all come from the wisdom and experience of people that have been trying to deploy these You know hugely distributed systems and run it as quickly as possible From dev all the way out to production in reliable ways and in secure ways Keeping systems stable and doing this 30 40 50 even a hundred times a day pushing these type of changes So that's the background On get-ups Okay, so in more of my reading this is the this is the one that I came up with which I thought really Concisely definitively Explained what is get-ups and it's get-ups works by using get as a single source of truth for declarative infrastructure and applications So the key points I have here I bolded which is that systems are declarative that they use desired state in some way shape or form So we'll go in a little bit more about what we mean by that That there's a single source of truth that you don't have things spread all over the place Things in databases things in your code repositories things in run books if you still do that You know manual instructions things of that nature and then the third is that get is the UI get is how you do all your work How you manage things how you push things out to your systems? When I've been read when I was reading up on this and seeing what everyone else is thinking about when I was learning about it myself I did read other things that people have Put in there and that they include as part of get ops. You'll hear a lot about immutable architectures Being a key part of net ops or sorry get ops wrong wrong talk And even more specifically Kubernetes very specific the Kubernetes and that is what I will demo, but I want to expand that definition a little bit spoiler there So like I said, this is it's a little what I found is when you bring in immutability and Kubernetes while they're really a good idea and there's definitely a place for them I thought it was a little too prescriptive and too limiting because I really think that there are ways to Use this workflow to use these pipelines in ways that aren't strictly mutable and aren't strictly In the Kubernetes space out there. So there are there are You know, like I said, they're really good ideas. They're strong preferences But I don't I don't feel that they're requirements at least that's that's my theory on this So some of the principles of get ops The entire system is described Declaringably and what that means is that instead of giving a set of instructions, you're giving a set of facts You're saying I want 10 servers or I need 10 servers. You don't say Sorry, I just got that you say there are 10 servers. You don't say get me 10 servers and What so with the difference there is that you're stating I need those 10 and the system figures out how to bring them up Or if you need the 10 or if you already have the 10 things of that nature So that's you know, the difference here and what we're talking about Systems being declarative another way that people sometimes refer to declarative as it being desired state I need 10 servers That should be my state if I don't have that state get me there Whether that's I need to scale down or scale up. That's up to the underlying system to figure out So that desired state system is versioned and get all the workflows and all the tools and everything that you get out of Get with your code can be applied to your infrastructure to your configuration to these declarations And that these changes can be automatically approved to the system so that once you commit something to get there isn't a separate Step that you as a developer need to take this is at that point when the get ops pipeline picks it up and gets it out and deployed from there and another thing that that that They list out there as a principle is get ops is a software agents to ensure the correctness and alert on divergence I Put the little aster's in there because anyone that know has we're all familiar with Ansible know that we're kind of Against agents here So my interpretation of what is a software agent is a bit liberal in this one And I'll explain that a little bit more, but this is the idea that that like I said once you make that commit There is something that looks at what is in your single source of truth your get repo and says okay What is the what is the actual state of my infrastructure right now and then to? Orchestrate getting it to getting them to converge getting them to match at that point So this is the typical get ops workflow that you'll see out there It starts like I say with the developer doing their code and their CI that continues that that's pretty much stays the same a Key thing that that they'll talk about is keeping a separation from your CI CD So there's there's a lot of talk that that's a really good best practice is that to not use the same tool pushing changes Out to production for example doing the deployment So so that you keep that separation from all your testing and CI create images or VMs or whatever it is and push it into a registry as part of one One step and then a separate process picks them up from the registry and deploys them pulls them out Into production whatever that is it could be an RPM package In my liberal definition. It could be a container going out there From Kubernetes the other part is that we have a you have a configuration repo And that's where all your desired state sits of hey here. Here's the state I want my infrastructure in all the different feature switches and parameters and paths and Certificates and secrets and things like that. Well, maybe not secrets in a git repo. That is one of the areas that they Do suggest possibly keeping things out of your git repo is you don't want passwords and certificates sitting in there But the idea there is that then the ops people and ops work with that git repo to make changes and manage The infrastructure through that git repository all right, so The purpose of the presentation isn't to sell you on the merits of GitOps and it's really to show you You know, what is GitOps and how it can be applied? Using using Ansible, but these are some of the benefits that they list for why you'd want to use GitOps or what you get out Of practicing GitOps Almost just poured Water on myself here that would have been really cool No, I don't have a drinking problem strange caps All right So where was I? Okay, so the idea is you know you get these increased productivity of being able to Push changes, you know 30 40 a hundred times a day This was part of the thinking that went into why to do GitOps. We hear you know of it a lot in Code is as in our infrastructures code and things like that That is also part of what they were trying to do with GitOps you get the enhanced developer experience of All the workflow all the audits the checks the Code reviews and and everything that goes on there that leads to better stability and reliability the separation of CI and CD Is part of it the ability to have to be able to? Reverse changes to have that audit log that if something bad goes out or something adversely in fact Affects your infrastructure you can revert that change and go back to the previous stable state all those things that we get out of code You can now apply To your infrastructure itself using these GitOps principles Okay, so that was that that was the whole GitOps thing So let's talk a little bit about Ansible we were Why we're here I guess so As I've been saying I first started hearing about GitOps. I was going I go to cube con and everyone's talking about GitOps there And so I've been hearing about that a lot and it and it got me thinking well, what would get off the Ansible way Look like was this even possible? Was this even a good idea? So it led me to build this proof of concept to just see you know How how would how would this look? You know, I'm an Ansible guy. I've you know, have my clear biases Let me see what what this would look like if I went ahead and did that so like I said a quick review of Ansible when I talk about the Ansible way You know, what do we mean? You know Ansible is based on the whole simple powerful agentless idea and the key parts of it being you know human readable and No coding skills needed is what really is Declarative and when we talk about desired state, that's where that comes from from the whole Ansible philosophy Ansible we talk about usually when we say Ansible referring to the engine I'm going to be showing some stuff that relies on Ansible tower. See all the reason I'm showing you this In tower sits on top of engine for those of you who aren't familiar with it as a whole lot of functionality for Doing things at scale in an organization That's the key part that you need to know about that like some not here to do a sales pitch AWX is the Upstream open source version of tower towers the product that red hat sells and helps us pay Pay the bills, but AWX is the open source project that that is turned into Ansible tower primarily turned into Ansible tower So if this is where all of our developers are actually working day to day gang things done pushing out You know fixes and new features before it gets turned into tower Just a little bit just really fast is some of the high-level features the key one You know it's the restful API here that tower runs as a server brings a whole lot of other functionality I've said I'm not here to pitch this I'm just Quickly giving you an idea so you for those of you who aren't familiar no And can follow along with what I'm doing one key part of tower Concept that if you're not familiar with tower or AWX and have been using as well It's this concept of a job template and this is where all the different parts get pulled together your inventory your credentials Your playbook your roles all those different command line settings You would normally run an Ansible engine gets put into what's called a job template So again, this is just some really quick background so you can follow along with the rest of What I'm going to talk about here I'm actually Moving along faster than I thought it would be okay This is a typical get centric Ansible deployment Workflow that we see here So this is similar to what we saw on get ops, which is partially why when I first saw get ops and I saw a similar diagram I kind of said to myself. Oh, this kind of looks like Ansible Workflows that we see out there the one thing that we see today though is that we see a lot of people using a CI typically it's Jenkins and I Saw this when I first came in as a consultant and helping our customers there is that they Would deploy Jenkins strictly to watch a get repo and then when a change happened in that get repo Launch an Ansible job and that was the sole reason they were running Jenkins at the time In a lot of ways they would use other things for CI or they would have a separate Jenkins system running out there Just to do that one thing so that was an interesting thing that we noticed in saw happening on man Within our user base in there and then they had of course the operations people that would work directly with Ansible engine or Ansible tower AWX whatever they're using there to push things out to the cloud networks Whatever they had in there So more recently I think it was last fall shortly after Ansible Fest. We launched its Ansible tower 3.6. I believe this came in around a wx-9 oh From the best I can tell from the change logs and we added These automation web hooks and the whole idea there is that now you could link up your automation inside of and Inside of tower AWX to do things like project updates or update inventories or perform deployments When a change happens on a given Repository using a web hook right now we're this supports get hub both private and enterprise and also Get lab out there and there's plans to add more of that But this is the initial feature that we added partially from what we were seeing here We said you know, maybe we need to get rid of one extra piece here So we went ahead and did that So now what happens today with these new capabilities is that you can remove The need for a dedicated CI just to trigger you know catch changes happening in a given repository and then tell Ansible to run do a deployment or whatever it is that you need to do All right, so I talked about there was a reason you needed to understand what job templates were and this would be the reason you Configure your web hook within the job template here under options now. There's a Little web hook Option that you you click and at that point it opens up this bottom half of Options where you can pick or more options. I guess details configurations of the web hook That's going to be associated to a given job template You can pick you know get up get lab and then at that point the system will generate a Unique web hook URL for you for this system that you're running and then you can It will also generate the the token that you can put into your github Account or your github account in order for it to fire the the web hook. It's pretty nice When I was using it once you put all this in It's it's pretty straightforward and you go over to github for example They have a nice little test button and you can see you know that everything's now wired up and working So it's a really pretty straightforward process Okay So That laid out how you would do these things how you would Use Ansible in a get centric Workflow Questions now is what what are the advantages here of using as well at least how I see I'm like I said I already told you I'm biased but For the sake of argument of what what do I mean by by you know get ops in the as well way Is that you have these declarative state definitions like kubernetes? So you know as well is a declarative state desired state engine It works declaratively this is very similar to kubernetes and we saw that you know a lot of definitions of get ops say this is Something that kubernetes You know why you should use kubernetes or get ops is only specific to kubernetes You can also do that with ansible The other thing that I thought was a really great advantage to this and where it brought in my definition of get ops with the biases that I have is that ansible can support not only cloud native Like kubernetes, but also traditional it automation and do that in a declarative way So it it made me say well Why does it have to be immutable and kubernetes only if you apply ansible you get the declarative state and hey look I can manage my network and hey I can manage my my more traditional cloud provider vms Both public and private things like that so it gives you that Flexibility and that freedom to choose What tools you want to use and also what you're going to apply get ops to that get ops isn't necessarily only tied to? cloud native and kubernetes and that sort of stuff so like I said, there's there are integrations beyond kubernetes and It's it's the same tooling if you're already using ansible great now. You don't have to learn something new You can you can leverage all that stuff. You already know and what you've already been doing out there So when it comes to get ops, then this is what I mean by Get ops done the ansible way The the first part the CI so you know that still remains the same Still kind of works the way you're used to working with it there where it changes and and where a lot of the focus of Get ops is on the delivery part, which is on the right side of the screen there So that once you have these artifacts ready, whatever they are like I said, they can be RPMs They can be Python packages a jars wars Things of that nature are already You can then apply these features that you find an ansible tower in order to create a get ops pipeline so that when these When you make changes down in your configuration repo when you say I'm updating this war file or I'm updating this image or oh we're It's the holidays and I need more capacity So I'm gonna up the the the pool of cash servers or database nodes or webs whatever it is you're making those changes and at that point ansible can pick that up and handle the process of going out there and Deploying to your infrastructure what you need So the one thing there are a couple things of note here that are a little bit different than get ops as I said in an earlier slide that I had a Agent with stars next to it in this case here Ansible's working as the agent and a number of the specific deployments that I saw out there. They used a Dedicated kubernetes operator that you put on your cluster itself that did the work of pulling from your Repository and then seeing what the state of your kubernetes cluster is and what is in this What's in git and then to resolve the two in this case ansible is taking that over so essentially we're providing Agentless way to get ops is the way that I was looking at it because now you don't have to install this dedicated operator You can have ansible sitting outside of whatever platform it is that you're managing and it can do all of that For you, so that's one of the things and that's why I put the stars and Next to the use of software agent and that's my liberal interpretation of operators. I'm sorry of These agents which typically end up being operators and it's operators like we've worked has flux if you're Into that thing. There's also one that has been making the rounds within different red hat events. I think it's said you know Mia EU NO MIA So I've seen other ones out there like that Another thing that's interesting is that You have a bit more flexibility with a push pull workflow here in the past. This has just been pull The way git ops works is that you'll see this these agents that are out there and pull everything in with ansible You have a little bit. It's a there's a little bit of push to it. There's also a lot of pull Especially if you're working with operators here and that's What I'm going to be doing in the demo that's coming up here. So I think I said enough This slide so yeah, so what I'm going to demo here I'm silly enough to try a live demo being jet lag That I'm going to be focused on this part here that I have circled in red I'm not going to show the whole CI part because that's like I said pretty much what we all are used to doing and using the only Like I said the only thing that's maybe a little bit different is that you you push something in your CI to that registry and That that's a that there's kind of a wall there from what tools you're using in that regard. So Let me switch over here. Oh Right No, man, I lost my there went okay Great so Of course, I got logged out of here So I did was I tried to build a basic demo of what What this thing would look like the what the the desktop, I'm sorry the desktop I'm looking at the dashboard and saying desktop Of what Ansible in a GitOps workflow would look like so this is what I came up with so I have Didn't think ahead and I've built this all out in the state. So fingers crossed that this isn't too slow going all the way back back over is So I just have All right, so so this here is my Kubernetes cluster I've running what I did ahead of time is I'm using an operator for something called McRouter, so this is for a system that is a Dynamic caching system out there that you have at the front of it. You have I should actually use this diagram Gram for this that I'm gonna All right, so what I'm showing so so what this app does is it's for Deploying and managing a scalable caching service and there's two components to it It's one part is using memcache Mencache has been around a long time general purpose caching system, but it's it's Highly capable, but it's sort of dumb in that it's just a single node It doesn't know about other nodes. It can't do sophisticated things like replication and clustering and failover and things of that It's it's a it's a pretty rudimentary caching system, but widely used There's this other thing out there that Facebook actually created Facebook's actually a major user of memcache I was actually involved in the memcache community like 15 years ago I remember when some of the engineers first showed up there. We were like wow this new startup Facebook is using memcache It's cool They built this thing called McRouter, and it's a memcache protocol router that sits in front of a pool of these sort of dumb memcache nodes and Provides all sorts of advanced functionality connection pooling flexible routing replication pools and a whole bunch of things like that So the way it works then is that if you're running this in Kubernetes, and you have all these different different nodes out there that McRouter needs to know what's in its pool so that as you have scaling events and you know one goes away or Some more come online. You have to keep updating McRouter. So that's what the operator is doing It's watching the state of that memcache pool and then as things come in and out it updates the operator Automatically so it's monitoring what's happening on the Kubernetes cluster itself and doing that Doing that work out there. So I already deployed all that ahead of time. So you won't have to sit through this there, but what I did then is So what we have actually here So this is all my automation that's out there. I have cube cube control configuration file, and then I have a Playbook Which lets me update what's going on here the key part is that bottom one there That the case module that lets me talk to the case API cluster and tell it You know, here's my definition file what I want to do. So it's talking to the operator itself to say I need I Need certain state from here or here's the state that I want this Resource to be in and this is the template that it uses That's one of the advantages of using ansible. Why would I'm already spoiling my talk tomorrow Is that we have that whole templating system so you can template your definitions and make them repeatable So this is a whole bunch of what gets fed into it and then what I have here is a configuration See here To do so I want to have three so I'm just going to run this as well actually that's not going to show you much So let's say five. We're going to go big So in the get ops, so I've made my change. I want five of these out there. I will add that now Nice commit message. All right now before I do the push. So this is only on here locally right now I want to go over here Just so I can show you working now typically one of one of the advantage of this is that you never have to go into tower itself Once you have all this stuff set up You can be just making commits to get and then watching your Observability and monitoring tools to see what's happening Maybe not even look at all leave it to the ops people out there But I'm just to show you it working here. We'll go out there. I'll pull this up here. All right So I also didn't get enough caffeine today, so I'm really dragging. All right, so I'm going to push this now up to my repo and Head over here and give it a second towers picked it up. There's working Slow, but it's going All right. We see there now. It's the configure Kate's cash service job is running after it did a SCM update that's something I forced just to make sure things worked. All right, so that ran successfully Here and we see that everything ran looks good. And if I go back over here Like I said, this is going all the way back We now see that it's deployed five memcache nodes just by me making that one change inside of git and an ansible Passing it all the way through In this case, like I said, we're using an operator I've been working a lot also on kubernetes stuff in the ansible kubernetes story integration So I have a colleague that's looking at Net networks so that you could be updating your network configuration and it getting pushed out to all your physical networking gear The same way here. So so there we go. That was That's the demo. I guess I could make time to change one more scale it down to show that I Not faking this we'll go to three Give that a second to run We won't even look in Use a few more seconds Okay, we see now it's starting to work Do we see pods now or so I went from five to three and we see that it's in the process of of Tearing those down so let's see if by now we should Yeah, so four already died threes terminating things like that so that's Proof this isn't all smoke and mirrors crazy American and his lion president is not the Hasn't been infected by him at least mm-hmm. All right So so that that's the main gist of get ops the ansible way There is more though, so I just wanted to just take a couple more minutes here to I should bring this back up Yeah, so I believe it's still yes. I'm still good on time plenty of time There's more that you can do with this expanding out this idea like I said I just wanted to do a basic demo basic proof of concept of how this would work It's not just job templates and single Automation jobs here you can actually apply this to workflows workflows also have the ability to do a webhook and what a workflow Let's you do is wire together Multiple job templates for people that aren't familiar with tower AWX and add some logic to it If it fails if it passes things like that, that's what's pictured on the left-hand side here part of this and automating and using Ansible is that you can do multi-cluster deployments and management So you can have repeatable ways of rolling things out to Kubernetes or other systems By using as well because of the templating and things like that yet you can do Using things like inventory hosts or groups So I could roll out different sizes of the pools or different versions of the memcache image that I'm using Based on maybe what part of the world that's getting pushed to or things of that nature You can take advantage of all the other things that come along with Tower and AWX out of the box the ability to do Streaming of logs to splunk or elastic The ability to send out notifications to IRC when these jobs run things like that And you also have the ability to do some things that are I'll call get op-ish that that may be break from the traditional definition For example like adding approval steps along the way where something maybe Gets pushed out to dev or test and someone has to go in and say yeah, this looks good and push it along I know probably a lot of us aren't into that But I used to work for a major bank and they're kind of paranoid and they like their checks and balances and so okay We'll allow them to do that here with with get ops sort of thing so now in To be open and transparent there were some areas that I hit that were a little rough and that there was some room for improvement The one that I ran into and I'm still not sure I figured out the the best approach to is what's the handling of Kubernetes credentials and secrets Particularly in how it's integrated into tower I had actually a talk with one of my colleagues and there's now a feature request ticket that I have up there that's tracking this in the AWX project, but the whole idea of that I had a cube control file and Do I put that in git and then if I do put it in git now I have these secrets that someone can control Kubernetes with so I had to use vault to make sure that only people that need to use that or can use that and then you know Doesn't even maybe maybe that's something that best practice says well That should be in a secret store somewhere in the tower credentials in which case there isn't something built in today To do that Another thing I ran into is native support of the kates module could be a little bit better I had to install external libraries into tower and AWX itself in order to get this to work I really wish and hope that those would be included with tower itself. We do it for all the major cloud providers Why not Kubernetes? Pretty optimistic battle change eventually also The kates modules that the underlying ones I only use the kates one, but there are some others They could be a little bit better. They were mostly developed by the community and some other some red hat engineers open shift If anyone has any ideas pull requests are accepted on For all this actually but particularly in that area and then the other thing that came to me Is I looked at other tools that are out there in this space like Argo CD. I know that's being talked about very shortly You know towers a generalized Automation UI so I knew I had to figure out where to put things which isn't very hard But there isn't it isn't as straightforward if you're doing this with Kubernetes where if you're using something like Argo Well that is specifically made for doing get ops and continuous deployment in the Kubernetes space All right, so Wrapping up here as I mentioned I actually have one more talk happening tomorrow if you're interested more About ansible engine and how to use it with kubernetes. I'll be doing a short talk tomorrow different room Three o'clock, so please stop on by if I didn't totally Bore you and offend you in today's talk There's a few links up here for reading up more and get ops is a lot of it out there I found the best stuff is actually we weave works Which you know hey, they they they kind of coined the term and developed the idea so doesn't doesn't surprise me There are articles out there under the open shift team. There's a really good introduction to get ops with open shift There they're using Argo CD for their CD part of it and a An agent as an operator Out there There's a mention of the kates module and there's a really good article I was written by a guy named Jeff geerling recently on the ansible blog That talks about the different ways that you can use ansible with cloud native and kubernetes, which also like I said pours into tomorrow's talk that I'll be giving and I believe with that. That's all I have. Is there any questions? Did I? Did I lose anyone? Yes Yeah, so there okay, so the question is how how would I test the the manifest of like Right, right There's a couple different ways. I mean you get well first of all that could be in your CI chain that it that it happens Over there, but on the configuration side I could see you putting in something that doesn't work at that point And that's an area that and where the operator itself could help because because when you would feed in the spec to your To your custom resource you would get an error back from kubernetes saying that this is something that That cr doesn't understand or doesn't know how to work with and then the operator would stop it from propagating out to the actual application So you would in that case that that api would kind of give you an error message And you would know I have a problem, but you could also put a task in your automation. We have like assert modules For example that you could actually do some validation of that file going in at that point So it depends how you like to work There are some tools out there that I heard about I didn't get to actually try themselves that are supposed to do that also I'm forgetting the name of them, but I saw some tools for validating Your your yaml before it goes into kubernetes So if you have a spec for here's this needs to be an integer this needs to be required This has to be between this range. This could check that I'm sorry, I couldn't yeah, I'm sure the open shift team is so big and there are so many people don't work I would no doubt someone's out there working on this so Any other questions? Yes Yes, you could you could do that There that is an area that I probably should have put that up There's another thing that you could do better. There is a way to pull out a get I'm sorry to pull out a job template and put it in to get and then reverse it, but it's a little Clunky I guess would be the word for that That is another good point I should add to this yes Yeah, I had to I had to set up my job template by clicking around and yeah, you're right that That would be nice if we could put that and get itself There is work being done on modules inside of Ansible for talking to tower itself Okay, all right great so so that that'll that'll provide a path to making that easier more straightforward But yeah, that should be another another point of my That last slide I showed Any other questions? Okay, well, I will be around the rest of the conference. Please feel free to say hello or Don't be shy talk to me I have some Ansible swag our mascot for operators with Ansible the operable if anyone wants any I Got him here stop on by And thank you for listening Thanks