Ansible 2.8 has been released. While not as many major features as 2.7, there are an absolute truckload of smaller features, including quite a few focussed on Windows. Some highlights for me:
Experimental support for Ansible Collections and content namespacing – Ansible content can now be packaged in a collection and addressed via namespaces. This allows for easier sharing, distribution, and installation of bundled modules/roles/plugins, and consistent rules for accessing specific content via namespaces.
Python interpreter discovery, which hopefully will make managing multiple Python versions a bit easier
A k8s module defaults group has now been added to reduce the amount of parameters required for multiple k8s tasks. Thank goodness!
Added experimental support for connecting to Windows hosts over SSH. This could be really useful, in those circumstances where WinRM isn’t going to fly.
I have Jenkins configured with a dozen jobs that support a microservices application. The setup worked fine for several months until, suddenly, jobs started to fail with errors similar to this (console log fragment):
ERROR:Maven JVM terminated unexpectedly with exitcode137
It caused all jobs to fail most of the time, including Bash scripts as well as Maven builds. The main Jenkins log had no additional information. A web search turned up many discussions about jobs failing (not Jenkins itself), all pointing to a memory shortage like heap space or virtual memory. But the same processes worked flawlessly when executed manually, i.e. not by Jenkins. So the problem was unrelated to memory; something else was going on.
My Jenkins service was being subjected to a denial of service attack. This article is about identifying the cause and taking preventative action.
One of our customers asked us to troubleshoot their web application: “out of memory” errors were causing page loads to fail. To understand and isolate the problem we needed a way to reproduce it, and observe it in a monitored scenario. We decided on a strategy for both server and web user:
Server: deploy a build that monitors for memory leaks, a first-pass step to diagnose the out of memory errors.
Client: simulate web requests from one or more users.
It was straightforward to monitor the server application for memory leaks. On the client side we needed a way to generate repeating user requests, potentially at high volume, because the errors didn’t occur for every request. This post describes how we built a client-side process to automate web requests.
In a recent Embarcadero webinar, Marco was demonstrating some new features of Records, including a new Assign operator that can be overloaded.
Afterwards I had a number of questions from people asking what it was all about. Why do we need an Assign operator? Why would you want to overload an operator anyway? After a bit of a discussion with them, I realised that rather than me trying to throw off a couple of sentences to explain it, I should probably write up something clearer.
If you already know what operator overloading for Records is, then this article possibly isn’t for you. But if you’ve seen this mentioned before and not been really sure what it was all about, then hopefully this article will help. (more…)