The service will be a Visual Studio Code container, defined in a Kubernetes POD YAML, launched via podman by systemd. |
For our first exercise, we are going to run some ad hoc commands to help you get a feel for how Red Hat Ansible Automation works. Ansible ad hoc commands enable you to perform repeatable tasks on local or remote nodes, without having to write a playbook. They are very useful when you simply need to do one or two tasks quickly and often, to many remote nodes.
Let’s deploy an application on your local node that can assist you with the workshop. Using ad hoc commands, we will download a configuration file from a remote git server (gitOps), set up a system service, and start the service.
The service will be a Visual Studio Code container, defined in a Kubernetes POD YAML, launched via podman by systemd. |
The systemd configuration file exists in SCM; so, we need to pull it to the local host. Since the file is available via a URL, we will use the Ansible uri module to retrieve the file.
The ansible ad hoc command will start with ansible, then the target, declaring the uri module via the --module switch, the arguments --args to the module, followed by the --become switch telling Ansible to become a superuser.
We have configured 'sudo' for you; however, Ansible can use lots of other methods to become (-b) the superuser. |
ansible localhost --module-name uri --args "url=https://raw.githubusercontent.com/RedHatGov/redhatgov.workshops/master/ansible_tower_aws/files/code-server.service return_content=yes dest=/etc/systemd/system" --become
Now in the /etc/systemd/system directory lives the code-server.service file you downloaded from the SCM system. In order to apply it, we would typically utilize the systemctl command; however, this is an Ansible workshop. With that being said, we will apply the configuration file with a module.
ansible localhost --module-name service --args "name=code-server state=started enabled=yes" --become
It is possible now to see your service running by doing the following commands:
systemctl status code-server.service
Additionally, you can see more details about the pod deployment:
podman pod list
Connect to the web based editor in a browser window, using the following URL:
https://tower-0.example.redhatgov.io:8443
First, in order to manage remote systems - we need to set up our dependencies:
Define your inventory. Inventories are crucial to Ansible, as they define remote machines on which you will run commands or your playbook(s). Use vi
or vim
to create a file called hosts
. Then, add the appropriate definitions for the node that will function as a web node.
The workshopname, in the example below, will be provided to you by your instructor. The # should be replaced by your student number. |
For example, a recent workshop student used: example.tower.0.redhatgov.io
vim hosts
Put the following content into the file:
[web] node-0.example.redhatgov.io
Let’s start with something basic - pinging a host. The ping
module tests the responsiveness of our web host.
ansible web --module-name ping
Now let’s see how we can run a Linux command and format the output, using the command
module.
ansible web --module-name command --args "uptime" --one-line
Take a look at your web node’s configuration. The setup
module displays Ansible facts (and a lot of them) about an endpoint.
ansible web --module-name setup
Like many Linux commands, ansible allows for long-form and short-form command-line arguments. For example: |
ansible web --module-name command --args "uptime" --one-line --become
The command above is the same as running the command below:
ansible web -m command -a "uptime" -o -b
We are going to be using the short-form options, going forward. Please ask your instructor if any of them are unclear!
Now, let’s install Node.js, using the dnf
module.
ansible web -m dnf -a "name=nodejs state=present" -b
ansible web -m copy -a "src=hello.js dest=hello.js"
ansible web -m copy -a "src=hello.service dest=/etc/systemd/system/hello.service" -b
Next, we will deploy an application. We first enable the application service, then open the port in the firewall, and last activate the change to the firewall:
ansible web -m service -a "name=hello state=started enabled=yes" -b
ansible web -m firewalld -a "port=8080/tcp permanent=yes state=enabled" -b
ansible web -m systemd -a "name=firewalld state=reloaded" -b
Demo site (unit test):
ansible web -m uri -a "url=http://localhost:8080 return_content=yes"
ansible localhost -m uri -a "url=node-0.example.redhatgov.io:8080 return_content=yes"
Demo site (open this in your web browser):
http://node-0.example.redhatgov.io:8080
Finally, let’s clean up after ourselves. First, stop the node service, using the following command.
ansible web -m service -a "name=hello state=stopped enabled=no" -b
Next, remove the nodejs package, as shown, below:
ansible web -m dnf -a "name=nodejs state=absent" -b
Last, let’s remove the web content and service definition:
ansible web -m file -a "path=/home/ec2-user/hello.js state=absent"
ansible web -m file -a "path=/etc/systemd/system/hello.service state=absent" -b
Domain |
![]() |
|
Workshop | ||
Student ID |