| 
					
				 | 
			
			
				@@ -6,10 +6,22 @@ More information on the settings and ideas demonstrated is available in each bra 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 The branches are: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-* `standard-playbook` - a standard UNIX service (configurable via text files) deployment playbook 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-* `standard-role` - the same, but converted into a generic role 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-* `nonstandard-playbook` - a non-standard service (requiring the use of specific modules) deployment playbook 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-* `misc` - some of the demos that have not been classified yet, or are too small to have a branch of their own 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+`standard-playbook` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+: A standard UNIX service (configurable via text files) deployment playbook. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+: This playbook really deploys three services on four nodes: an `unbound` caching nameserver, a primary `bind` service, and two secondary `bind` DNS servers, and configures them. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+`standard-role` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+: The above playbook, converted into a generic role that can be used to deploy any standard UNIX service. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+: This also integrates with `molecule` and has some test playbooks (and an inventory) in the role's `tests/` directory (including a change rollback playbook). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+`nonstandard-playbook` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+: A simple playbook for a non-standard service, requiring the use of service-specific modules. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+`parallelism` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+: A couple of playbooks showcasing serialisation, asynchronous execution, and other parallelisation techniques. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+`misc` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+: These are some of the demos that have not been classified yet, or are too small to have a branch of their own. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Enjoy! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -20,7 +32,7 @@ virtual environment is probably the easiest choice. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 1. Create and activate a virtual environment: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+```bash 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 $ python3 -mvenv ./molecule 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 $ bash 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 $ source ../molecule/bin/activate 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -29,7 +41,7 @@ $ source ../molecule/bin/activate 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 2. Install `ansible-core`, `molecule` and its plugins, and the linting tools: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+```bash 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (molecule) $ pip3 install --upgrade pip molecule-plugins[podman,containers] yamllint ansible-lint 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Successfully installed ... ansible-core-2.18.2 ... molecule-25.2.0 molecule-plugins-23.7.0 ... 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -37,18 +49,21 @@ Successfully installed ... ansible-core-2.18.2 ... molecule-25.2.0 molecule-plug 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 3. _optional_ If working on Mac or Windows, ensure your Podman VM is started 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+```bash 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (molecule) $ podman machine start 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Starting machine "podman-machine-default" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Machine "podman-machine-default" started successfully 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+> *NOTE:* You may have to set up a Podman machine first using the `podman 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+> machine init` command (or use Podman Desktop to do the same). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ## Where are the playbook and role examples? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-You simply need to clone this repository after you installed molecule: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+You simply need to clone this repository after you installed all the tools: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+```bash 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (molecule) $ git clone https://github.com/rhtuser/ansible-examples.git 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Cloning into 'ansible-examples'... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ... 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -63,7 +78,7 @@ your own account. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Enter the working copy and switch to a branch you want to work on. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+```bash 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (molecule) $ cd ansible-examples 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (molecule) $ git branch -l --remote 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   origin/HEAD -> origin/main 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -78,11 +93,81 @@ branch 'misc' set up to track 'origin/misc'. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Switched to a new branch 'misc' 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+## How do I run the examples? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+There are two types of examples, those which do not involve Molecule, but 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+rather just run Ansible plays against some hosts, and those that use Molecule 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+for testing, in which case the lifecycle of containers is managed by Molecule. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+### Examples with Plain Ansible 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+For plain Ansible examples, you will need some adjustments to the inventory 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+files, as they refer to bogus server names wich most probably do not resolve to 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+IPs in your environment. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+While you could run those plays against a set of virtual machines, setting 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+those up for networking is simple, you just need to change the inventory files 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+to reflect their hostnames (or add `ansible_host=` if they do not resolve from 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+your control node). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Create a new Podman network and note its IP range. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+```bash 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+(molecule) $ podman network create ansible 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ansible 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+(molecule) $ podman network inspect ansible 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+[ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          "name": "ansible", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          "subnets": [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "subnet": "10.89.0.0/24", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    "gateway": "10.89.0.1" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+               } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          "dns_enabled": true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+          ... 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Create some containers running off of an image that has a recent enough version 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+of Python. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+```bash 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+(molecule) $ podman run -d --rm --name servera --network ansible registry.access.redhat.com/ubi9/python-312:latest sleep 10000 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+5f7a17bb1da39570d7d1753713634fb26909f42acd8367f56a9fa80ab5363003 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Look up the container IP: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+```bash 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+(molecule) $ podman inspect -f '{{.NetworkSettings.Networks.ansible.IPAddress}}' servera 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+10.89.0.3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Finally, add the IP to the inventory file as that host's IP address. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+```ini 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+[servers] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+servera ansible_host=10.89.0.3 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+> TODO: figure out how this works on macOS with machines. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+### Examples with Molecule 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+It is much easier to run Molecule tests as it manages container lifecycle for you. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+TBD. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ## How to remove the environment? 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Simply exit any shell that is using the virtual environment and remove the directory. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+```bash 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 (molecule) $ exit 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 $ rm -rf ./molecule 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ``` 
			 |