write ansible
This commit is contained in:
		
							
								
								
									
										226
									
								
								slides/ansible/ansible.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										226
									
								
								slides/ansible/ansible.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,226 @@ | ||||
| --- | ||||
| title: Ansible | ||||
| author: Malin | ||||
| theme: Warsaw | ||||
| colortheme: orchid | ||||
| --- | ||||
|  | ||||
| # First: Idempotence | ||||
|  | ||||
| ## My Setup Script | ||||
|  | ||||
|  | ||||
| ```sh | ||||
| # Place locale info | ||||
| echo 'LANG=en_GB.UTF-8' >> /etc/locale.conf | ||||
| /etc/default/libc-locales | ||||
| xbps-reconfigure -fy glibc-locales | ||||
|  | ||||
| # Start cron service | ||||
| xbps-install -y crontab | ||||
| ln -s /etc/sv/cronie /var/service | ||||
| sv start crontab | ||||
|  | ||||
| #  Add default dot files | ||||
| git clone https://gitlab.com/andonome/mkdots.git /etc/skel/.dots | ||||
|  | ||||
| useradd -m ghost | ||||
| usermod -aG wheel | ||||
|  | ||||
| ``` | ||||
|  | ||||
| *** | ||||
|  | ||||
| > Error: no package 'cron tab' | ||||
|  | ||||
| *** | ||||
|  | ||||
| ```sh | ||||
| # Place locale info | ||||
| echo 'LANG=en_GB.UTF-8' >> /etc/locale.conf | ||||
| /etc/default/libc-locales | ||||
| xbps-reconfigure -fy glibc-locales | ||||
|  | ||||
| # Start cron service | ||||
| xbps-install -y cronie | ||||
| ln -s /etc/sv/cronie /var/service | ||||
| sv start cronie | ||||
|  | ||||
| #  Add default dot files | ||||
| git clone https://gitlab.com/andonome/mkdots.git /etc/skel/.dots | ||||
|  | ||||
| useradd -m ghost | ||||
| usermod -aG wheel | ||||
|  | ||||
| ``` | ||||
|  | ||||
| > ...loading locales | ||||
|  | ||||
| *** | ||||
|  | ||||
| > Error: No command 'git' | ||||
| > Error: user already exists | ||||
|  | ||||
| *** | ||||
|  | ||||
| ```sh | ||||
| # Place locale info | ||||
| echo 'LANG=en_GB.UTF-8' >> /etc/locale.conf | ||||
| /etc/default/libc-locales | ||||
| xbps-reconfigure -fy glibc-locales | ||||
|  | ||||
| # Start cron service | ||||
| xbps-install -y cronie git | ||||
| ln -s /etc/sv/cronie /var/service | ||||
| sv start cronie | ||||
|  | ||||
| #  Add default dot files | ||||
| git clone https://gitlab.com/andonome/mkdots.git /etc/skel/.dots | ||||
|  | ||||
| useradd -m ghost | ||||
| usermod -G wheel | ||||
|  | ||||
| ``` | ||||
|  | ||||
| *** | ||||
|  | ||||
| > `$ cat /etc/locale.conf` | ||||
|  | ||||
| ```sh | ||||
| LC_COLLATE=C | ||||
| LANG=en_GB.UTF-8 | ||||
| LANG=en_GB.UTF-8 | ||||
| LANG=en_GB.UTF-8 | ||||
| LANG=en_GB.UTF-8 | ||||
| LANG=en_GB.UTF-8 | ||||
| LANG=en_GB.UTF-8 | ||||
| ``` | ||||
|  | ||||
| > `$ ???` | ||||
|  | ||||
| *** | ||||
|  | ||||
|  | ||||
| ```sh | ||||
| grep en_GB /etc/locale.conf || \ | ||||
|     echo 'LANG=en_GB.UTF-8' >> /etc/locale.conf | ||||
|  | ||||
| ``` | ||||
|  | ||||
| *** | ||||
|  | ||||
| # So Ansible... | ||||
|  | ||||
|  | ||||
| ```sh | ||||
| ansible --module-name=ping localhost | ||||
| ansible -m package -a 'upgrade=yes' localhost | ||||
| ``` | ||||
|  | ||||
| ## Lines in Files | ||||
|  | ||||
| ```sh | ||||
| ansible -m lineinfile -a 'line=test create=yes path=/tmp/x' localhost | ||||
| ansible -m say -a 'voice=en_GB msg="Testing"' localhost | ||||
| ansible -m say -a 'voice=en_GB msg="Testing"' localhost | ||||
| ``` | ||||
|  | ||||
| *** | ||||
|  | ||||
| # More Hosts! | ||||
|  | ||||
| Hark at the hosts in `~/.ssh/config`: | ||||
|  | ||||
| ```sh | ||||
| Host soft | ||||
|     HostName soft.dmz.rs | ||||
|     Port 2222 | ||||
| 	User ghost | ||||
| 	IdentityFile ~/.ssh/id_rsa | ||||
| Host krov | ||||
| 	HostName krov.dmz.rs | ||||
| 	User malin | ||||
| Host kralizec | ||||
| 	HostName dmz.rs | ||||
| 	User root | ||||
| Host laka | ||||
| 	HostName 192.168.0.50 | ||||
| 	IdentityFile ~/.ssh/id_rsa | ||||
| ``` | ||||
|  | ||||
| *** | ||||
|  | ||||
| ## Hosts in toml | ||||
|  | ||||
|  | ||||
| ```toml | ||||
| [webby] | ||||
| nginx12 | ||||
|  | ||||
| [webby:vars] | ||||
| user=alice | ||||
| ``` | ||||
|  | ||||
| This is easy to read, but breaks standards. | ||||
|  | ||||
| *** | ||||
|  | ||||
| `ansible-play -i hosts.toml playbooks/mmcli` | ||||
|  | ||||
| *** | ||||
|  | ||||
| Better to stick with standards, even if you can't read it! | ||||
|  | ||||
| *** | ||||
|  | ||||
| Very yaml: | ||||
|  | ||||
| ```yml | ||||
| all: | ||||
|   vars: | ||||
|     ansible_python_interpreter: /usr/bin/python3.13 | ||||
|     cow_selection: random | ||||
|     username: ghost | ||||
|     locale: Europe/Belgrade | ||||
|     libc_locale: en_GB.UTF-8 UTF-8 | ||||
|   children: | ||||
|     arch: | ||||
|       children: | ||||
|         archyay: | ||||
|           hosts: | ||||
|             ratking: | ||||
|             archkube: | ||||
|             nimbus: | ||||
|     void: | ||||
|       hosts: | ||||
|         hex: | ||||
|     debian: | ||||
|       vars: | ||||
|         ansible_python_interpreter: /usr/bin/python3.12 | ||||
|       hosts: | ||||
|         laka: | ||||
|         proxmox: | ||||
|  | ||||
| ``` | ||||
|  | ||||
| *** | ||||
|  | ||||
| `ansible-play -i hosts.yml playbooks/mmcli` | ||||
|  | ||||
| *** | ||||
|  | ||||
| # What it Does | ||||
|  | ||||
| - Installs packages | ||||
| - Copies configs *to* host | ||||
| - Fetches files *from* host | ||||
|     * Backup ssl certs | ||||
|     * Backup ssh identify keys | ||||
|  | ||||
| *** | ||||
|  | ||||
| # Check the Repository Here! | ||||
|  | ||||
| `[ $git_repo_address ]` | ||||
|  | ||||
|  | ||||
							
								
								
									
										22
									
								
								slides/ansible/examples/bind.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								slides/ansible/examples/bind.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| --- | ||||
| - name: Compile BIND | ||||
|   hosts: hex | ||||
|   become: false | ||||
|   environment: | ||||
|     PATH: '{{ ansible_env.PATH }}' | ||||
|  | ||||
|   tasks: | ||||
|     - name: Git pull BIND | ||||
|       ansible.builtin.git: | ||||
|         repo: https://gitlab.com/bindrpg/core.git | ||||
|         dest: "{{ ansible_user_dir }}/core" | ||||
|         clone: true | ||||
|         verify_commit: true | ||||
|         version: master | ||||
|  | ||||
|  | ||||
|     - name: Make BIND | ||||
|       community.general.make: | ||||
|         chdir: "{{ ansible_user_dir }}/core" | ||||
|         jobs: 3 | ||||
|         target: all | ||||
							
								
								
									
										27
									
								
								slides/ansible/examples/mmcli.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								slides/ansible/examples/mmcli.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | ||||
| --- | ||||
| - name: Install Mermaid ASCII | ||||
|   hosts: laka | ||||
|   become: true | ||||
|  | ||||
|   tasks: | ||||
|     - name: Install deps | ||||
|       ansible.builtin.package: | ||||
|         name: | ||||
|           - git | ||||
|           - golang | ||||
|           - make | ||||
|  | ||||
|     - name: Ensure local src dir exists | ||||
|       ansible.builtin.file: | ||||
|         path: /usr/local/src/ | ||||
|         state: directory | ||||
|         mode: '0755' | ||||
|     - name: Clone mermaid-ascii | ||||
|       ansible.builtin.git: | ||||
|         repo: https://github.com/AlexanderGrooff/mermaid-ascii.git | ||||
|         dest: /usr/local/src/mermaid-ascii/ | ||||
|         update: yes | ||||
|     - name: Install mermaid | ||||
|       community.general.make: | ||||
|         chdir: /usr/local/src/mermaid-ascii/ | ||||
|         target: install | ||||
							
								
								
									
										10
									
								
								slides/ansible/examples/tlmgr.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								slides/ansible/examples/tlmgr.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| --- | ||||
| - name: Install tlmgr | ||||
|   hosts: june | ||||
|   become: true | ||||
|  | ||||
|   tasks: | ||||
|     - name: Install texlive | ||||
|       ansible.builtin.script: mintex.sh | ||||
|       args: | ||||
|         creates: /usr/local/bin/tlmgr | ||||
							
								
								
									
										18
									
								
								slides/ansible/examples/transmission.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								slides/ansible/examples/transmission.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| --- | ||||
| - name: Make crontab | ||||
|   hosts: june | ||||
|   become: true | ||||
|  | ||||
|   tasks: | ||||
|     - name: Late-night transmission start | ||||
|       ansible.builtin.cron: | ||||
|         name: start transmission | ||||
|         minute: 0 | ||||
|         hour: 3 | ||||
|         job: /usr/bin/systemctl start transmission | ||||
|     - name: Late-night transmission end | ||||
|       ansible.builtin.cron: | ||||
|         name: stop transmission | ||||
|         minute: 0 | ||||
|         hour: 6 | ||||
|         job: /usr/bin/systemctl stop transmission | ||||
							
								
								
									
										24
									
								
								slides/ansible/examples/tspreed.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								slides/ansible/examples/tspreed.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| --- | ||||
| - name: Install tspreed | ||||
|   hosts: october | ||||
|   become: true | ||||
|  | ||||
|   tasks: | ||||
|     - name: Ensure local src dir exists | ||||
|       ansible.builtin.file: | ||||
|         path: /usr/local/src/ | ||||
|         state: directory | ||||
|         mode: '0755' | ||||
|     - name: Install make | ||||
|       ansible.builtin.package: | ||||
|         name: make | ||||
|         state: present | ||||
|     - name: Clone tspreed | ||||
|       ansible.builtin.git: | ||||
|         repo: https://github.com/n-ivkovic/tspreed.git | ||||
|         dest: /usr/local/src/tspreed | ||||
|         update: yes | ||||
|     - name: Install tspreed | ||||
|       community.general.make: | ||||
|         chdir: /usr/local/src/tspreed | ||||
|         target: install | ||||
		Reference in New Issue
	
	Block a user