<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://howto.cactus.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tim</id>
	<title>Cactus Howto - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://howto.cactus.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Tim"/>
	<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php/Special:Contributions/Tim"/>
	<updated>2026-05-30T19:28:09Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Main_Page&amp;diff=430</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Main_Page&amp;diff=430"/>
		<updated>2021-07-14T09:33:47Z</updated>

		<summary type="html">&lt;p&gt;Tim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Security&lt;br /&gt;
** Encryption&lt;br /&gt;
*** [[OpenSwan VPN]]&lt;br /&gt;
*** [[Letsencrypt Howto]]&lt;br /&gt;
** Firewalling&lt;br /&gt;
*** [[Migrate FortiGate 60D to FortiWiFi 60E]]&lt;br /&gt;
* Webpublishing&lt;br /&gt;
** [[MediaWiki Howto]]&lt;br /&gt;
* Container&lt;br /&gt;
** [[Docker.io Howto]]&lt;br /&gt;
* Automation&lt;br /&gt;
** [[Ansible Howto]]&lt;br /&gt;
* Android&lt;br /&gt;
** [[Android rsync App]]&lt;br /&gt;
** [[Android VCF Import]]&lt;br /&gt;
* [[Ubuntu Howtos]] (desktop, server)&lt;br /&gt;
* [[Phone stuff]]&lt;br /&gt;
* Development Tools&lt;br /&gt;
** Anonymizer - Tool for anonymizing network config files: https://github.com/tpurschke/IP-anonymizer&lt;br /&gt;
 NB: this perl script &lt;br /&gt;
 - can be used to anonymize config files (router, firewall)&lt;br /&gt;
 - replaces IP addresses as well as strings&lt;br /&gt;
 - requires the non-standard module &amp;quot;NetAddr::IP&amp;quot;&lt;br /&gt;
* Return to Cactus main page: https://www.cactus.de&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Main_Page&amp;diff=429</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Main_Page&amp;diff=429"/>
		<updated>2021-06-26T18:12:10Z</updated>

		<summary type="html">&lt;p&gt;Tim: Created page with &amp;quot;* Security ** Encryption *** OpenSwan VPN *** Letsencrypt Howto ** Firewalling *** Migrate FortiGate 60D to FortiWiFi 60E * Webpublishing ** MediaWiki Howto *...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Security&lt;br /&gt;
** Encryption&lt;br /&gt;
*** [[OpenSwan VPN]]&lt;br /&gt;
*** [[Letsencrypt Howto]]&lt;br /&gt;
** Firewalling&lt;br /&gt;
*** [[Migrate FortiGate 60D to FortiWiFi 60E]]&lt;br /&gt;
* Webpublishing&lt;br /&gt;
** [[MediaWiki Howto]]&lt;br /&gt;
* Container&lt;br /&gt;
** [[Docker.io Howto]]&lt;br /&gt;
* Automation&lt;br /&gt;
** [[Ansible Howto]]&lt;br /&gt;
* Android&lt;br /&gt;
** [[Android rsync App]]&lt;br /&gt;
** [[Android VCF Import]]&lt;br /&gt;
* [[Ubuntu Howtos]] (desktop, server)&lt;br /&gt;
* [[Phone stuff]]&lt;br /&gt;
* Development Tools&lt;br /&gt;
** Anonymizer - Tool for anonymizing network config files: https://github.com/tpurschke/iso-anonymizer&lt;br /&gt;
 NB: this perl script &lt;br /&gt;
 - can be used to anonymize config files (router, firewall)&lt;br /&gt;
 - replaces IP addresses as well as strings&lt;br /&gt;
 - requires the non-standard module &amp;quot;NetAddr::IP&amp;quot;&lt;br /&gt;
* Return to Cactus main page: https://www.cactus.de&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Hauptseite&amp;diff=428</id>
		<title>Hauptseite</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Hauptseite&amp;diff=428"/>
		<updated>2020-01-15T21:00:26Z</updated>

		<summary type="html">&lt;p&gt;Tim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Security&lt;br /&gt;
** Encryption&lt;br /&gt;
*** [[OpenSwan VPN]]&lt;br /&gt;
*** [[Letsencrypt Howto]]&lt;br /&gt;
** Firewalling&lt;br /&gt;
*** [[Migrate FortiGate 60D to FortiWiFi 60E]]&lt;br /&gt;
* Webpublishing&lt;br /&gt;
** [[MediaWiki Howto]]&lt;br /&gt;
* Container&lt;br /&gt;
** [[Docker.io Howto]]&lt;br /&gt;
* Automation&lt;br /&gt;
** [[Ansible Howto]]&lt;br /&gt;
* Android&lt;br /&gt;
** [[Android rsync App]]&lt;br /&gt;
** [[Android VCF Import]]&lt;br /&gt;
* [[Ubuntu Howtos]] (desktop, server)&lt;br /&gt;
* [[Phone stuff]]&lt;br /&gt;
* Development Tools&lt;br /&gt;
** Anonymizer - Tool for anonymizing network config files: https://github.com/tpurschke/iso-anonymizer&lt;br /&gt;
 NB: this perl script &lt;br /&gt;
 - can be used to anonymize config files (router, firewall)&lt;br /&gt;
 - replaces IP addresses as well as strings&lt;br /&gt;
 - requires the non-standard module &amp;quot;NetAddr::IP&amp;quot;&lt;br /&gt;
* Return to Cactus main page: https://www.cactus.de&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=427</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=427"/>
		<updated>2019-09-22T15:39:51Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* Restore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ansible host ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
as root:&lt;br /&gt;
 echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver-options http-proxy=http://10.5.1.10:3128/ --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
&lt;br /&gt;
install sudo (as root, if sudo does not exist)&lt;br /&gt;
 apt-get install sudo&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
=== Install python (if it does not already exist) ===&lt;br /&gt;
  sudo apt install python&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
=== additional useful packages on clients ===&lt;br /&gt;
install acl package to make sure &amp;quot;become_user&amp;quot; works correctly in debian:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
install python (needed for Fedora clients):&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=python state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
then add&lt;br /&gt;
 eval `keychain --eval id_rsa`&lt;br /&gt;
to $HOME/.bashrc&lt;br /&gt;
&lt;br /&gt;
Make ssh timeout resistant:&lt;br /&gt;
 tim@spike-vm:~$ cat .ssh/config &lt;br /&gt;
 Host *&lt;br /&gt;
 ServerAliveInterval 240&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
=== Add alias in .bashrc ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Add new user &amp;quot;newuser&amp;quot; to sudo group ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Change setting: remove (deprecated) settings in config file only on specific os versions ===&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 pfad=44&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 # removed deprecated config line &amp;quot;pfad=44&amp;quot;&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== use case install package ==&lt;br /&gt;
Install package &amp;quot;acl&amp;quot;:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;br /&gt;
&lt;br /&gt;
== using ansible via cron in pull mode ==&lt;br /&gt;
&lt;br /&gt;
see https://github.com/ansible/ansible-examples/blob/master/language_features/ansible_pull.yml&lt;br /&gt;
&lt;br /&gt;
= ansible tower / AWX =&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Documentation setting up AWX: https://www.jeffgeerling.com/blog/2017/ansible-open-sources-ansible-tower-awx&lt;br /&gt;
&lt;br /&gt;
* prepare&lt;br /&gt;
 tower-cli config host http://&amp;lt;old-awx-host.example.com&amp;gt;&lt;br /&gt;
 tower-cli config username &amp;lt;user&amp;gt;&lt;br /&gt;
 tower-cli config password &amp;lt;pass&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Backup &amp;amp; Restore ==&lt;br /&gt;
Backup and restore (or migration): https://github.com/autops/awx-migrate, https://github.com/ansible/awx/blob/devel/DATA_MIGRATION.md&lt;br /&gt;
&lt;br /&gt;
=== Backup ===&lt;br /&gt;
 tower-cli receive --all &amp;gt; assets.json&lt;br /&gt;
&lt;br /&gt;
=== Restore ===&lt;br /&gt;
 tower-cli send backup.json&lt;br /&gt;
&lt;br /&gt;
Then add credentials manually as they are not part of the backup.&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=426</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=426"/>
		<updated>2019-09-22T15:38:57Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* Restore */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ansible host ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
as root:&lt;br /&gt;
 echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver-options http-proxy=http://10.5.1.10:3128/ --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
&lt;br /&gt;
install sudo (as root, if sudo does not exist)&lt;br /&gt;
 apt-get install sudo&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
=== Install python (if it does not already exist) ===&lt;br /&gt;
  sudo apt install python&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
=== additional useful packages on clients ===&lt;br /&gt;
install acl package to make sure &amp;quot;become_user&amp;quot; works correctly in debian:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
install python (needed for Fedora clients):&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=python state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
then add&lt;br /&gt;
 eval `keychain --eval id_rsa`&lt;br /&gt;
to $HOME/.bashrc&lt;br /&gt;
&lt;br /&gt;
Make ssh timeout resistant:&lt;br /&gt;
 tim@spike-vm:~$ cat .ssh/config &lt;br /&gt;
 Host *&lt;br /&gt;
 ServerAliveInterval 240&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
=== Add alias in .bashrc ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Add new user &amp;quot;newuser&amp;quot; to sudo group ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Change setting: remove (deprecated) settings in config file only on specific os versions ===&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 pfad=44&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 # removed deprecated config line &amp;quot;pfad=44&amp;quot;&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== use case install package ==&lt;br /&gt;
Install package &amp;quot;acl&amp;quot;:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;br /&gt;
&lt;br /&gt;
== using ansible via cron in pull mode ==&lt;br /&gt;
&lt;br /&gt;
see https://github.com/ansible/ansible-examples/blob/master/language_features/ansible_pull.yml&lt;br /&gt;
&lt;br /&gt;
= ansible tower / AWX =&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Documentation setting up AWX: https://www.jeffgeerling.com/blog/2017/ansible-open-sources-ansible-tower-awx&lt;br /&gt;
&lt;br /&gt;
* prepare&lt;br /&gt;
 tower-cli config host http://&amp;lt;old-awx-host.example.com&amp;gt;&lt;br /&gt;
 tower-cli config username &amp;lt;user&amp;gt;&lt;br /&gt;
 tower-cli config password &amp;lt;pass&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Backup &amp;amp; Restore ==&lt;br /&gt;
Backup and restore (or migration): https://github.com/autops/awx-migrate, https://github.com/ansible/awx/blob/devel/DATA_MIGRATION.md&lt;br /&gt;
&lt;br /&gt;
=== Backup ===&lt;br /&gt;
 tower-cli receive --all &amp;gt; assets.json&lt;br /&gt;
&lt;br /&gt;
=== Restore ===&lt;br /&gt;
&lt;br /&gt;
 tower-cli send backup.json&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=425</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=425"/>
		<updated>2019-09-22T15:36:54Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* ansible tower / AWX */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ansible host ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
as root:&lt;br /&gt;
 echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver-options http-proxy=http://10.5.1.10:3128/ --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
&lt;br /&gt;
install sudo (as root, if sudo does not exist)&lt;br /&gt;
 apt-get install sudo&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
=== Install python (if it does not already exist) ===&lt;br /&gt;
  sudo apt install python&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
=== additional useful packages on clients ===&lt;br /&gt;
install acl package to make sure &amp;quot;become_user&amp;quot; works correctly in debian:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
install python (needed for Fedora clients):&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=python state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
then add&lt;br /&gt;
 eval `keychain --eval id_rsa`&lt;br /&gt;
to $HOME/.bashrc&lt;br /&gt;
&lt;br /&gt;
Make ssh timeout resistant:&lt;br /&gt;
 tim@spike-vm:~$ cat .ssh/config &lt;br /&gt;
 Host *&lt;br /&gt;
 ServerAliveInterval 240&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
=== Add alias in .bashrc ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Add new user &amp;quot;newuser&amp;quot; to sudo group ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Change setting: remove (deprecated) settings in config file only on specific os versions ===&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 pfad=44&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 # removed deprecated config line &amp;quot;pfad=44&amp;quot;&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== use case install package ==&lt;br /&gt;
Install package &amp;quot;acl&amp;quot;:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;br /&gt;
&lt;br /&gt;
== using ansible via cron in pull mode ==&lt;br /&gt;
&lt;br /&gt;
see https://github.com/ansible/ansible-examples/blob/master/language_features/ansible_pull.yml&lt;br /&gt;
&lt;br /&gt;
= ansible tower / AWX =&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
Documentation setting up AWX: https://www.jeffgeerling.com/blog/2017/ansible-open-sources-ansible-tower-awx&lt;br /&gt;
&lt;br /&gt;
* prepare&lt;br /&gt;
 tower-cli config host http://&amp;lt;old-awx-host.example.com&amp;gt;&lt;br /&gt;
 tower-cli config username &amp;lt;user&amp;gt;&lt;br /&gt;
 tower-cli config password &amp;lt;pass&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Backup &amp;amp; Restore ==&lt;br /&gt;
Backup and restore (or migration): https://github.com/autops/awx-migrate, https://github.com/ansible/awx/blob/devel/DATA_MIGRATION.md&lt;br /&gt;
&lt;br /&gt;
=== Backup ===&lt;br /&gt;
 tower-cli receive --all &amp;gt; assets.json&lt;br /&gt;
&lt;br /&gt;
=== Restore ===&lt;br /&gt;
./setup.sh -e &#039;restore_backup_file=/path/to/nondefault/backup.tar.gz&#039; -r&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=424</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=424"/>
		<updated>2019-02-26T12:26:38Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* ansible tower / AWX */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ansible host ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
as root:&lt;br /&gt;
 echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver-options http-proxy=http://10.5.1.10:3128/ --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
&lt;br /&gt;
install sudo (as root, if sudo does not exist)&lt;br /&gt;
 apt-get install sudo&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
=== Install python (if it does not already exist) ===&lt;br /&gt;
  sudo apt install python&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
=== additional useful packages on clients ===&lt;br /&gt;
install acl package to make sure &amp;quot;become_user&amp;quot; works correctly in debian:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
install python (needed for Fedora clients):&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=python state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
then add&lt;br /&gt;
 eval `keychain --eval id_rsa`&lt;br /&gt;
to $HOME/.bashrc&lt;br /&gt;
&lt;br /&gt;
Make ssh timeout resistant:&lt;br /&gt;
 tim@spike-vm:~$ cat .ssh/config &lt;br /&gt;
 Host *&lt;br /&gt;
 ServerAliveInterval 240&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
=== Add alias in .bashrc ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Add new user &amp;quot;newuser&amp;quot; to sudo group ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Change setting: remove (deprecated) settings in config file only on specific os versions ===&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 pfad=44&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 # removed deprecated config line &amp;quot;pfad=44&amp;quot;&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== use case install package ==&lt;br /&gt;
Install package &amp;quot;acl&amp;quot;:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;br /&gt;
&lt;br /&gt;
== using ansible via cron in pull mode ==&lt;br /&gt;
&lt;br /&gt;
see https://github.com/ansible/ansible-examples/blob/master/language_features/ansible_pull.yml&lt;br /&gt;
&lt;br /&gt;
= ansible tower / AWX =&lt;br /&gt;
&lt;br /&gt;
* documentation setting up AWX: https://www.jeffgeerling.com/blog/2017/ansible-open-sources-ansible-tower-awx&lt;br /&gt;
* backup and restore (or migration): https://github.com/autops/awx-migrate, https://github.com/ansible/awx/blob/devel/DATA_MIGRATION.md&lt;br /&gt;
* prepare&lt;br /&gt;
 tower-cli config host http://&amp;lt;old-awx-host.example.com&amp;gt;&lt;br /&gt;
 tower-cli config username &amp;lt;user&amp;gt;&lt;br /&gt;
 tower-cli config password &amp;lt;pass&amp;gt;&lt;br /&gt;
* backup &lt;br /&gt;
 tower-cli receive --all &amp;gt; assets.json&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=423</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=423"/>
		<updated>2019-02-26T12:01:32Z</updated>

		<summary type="html">&lt;p&gt;Tim: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ansible host ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
as root:&lt;br /&gt;
 echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver-options http-proxy=http://10.5.1.10:3128/ --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
&lt;br /&gt;
install sudo (as root, if sudo does not exist)&lt;br /&gt;
 apt-get install sudo&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
=== Install python (if it does not already exist) ===&lt;br /&gt;
  sudo apt install python&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
=== additional useful packages on clients ===&lt;br /&gt;
install acl package to make sure &amp;quot;become_user&amp;quot; works correctly in debian:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
install python (needed for Fedora clients):&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=python state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
then add&lt;br /&gt;
 eval `keychain --eval id_rsa`&lt;br /&gt;
to $HOME/.bashrc&lt;br /&gt;
&lt;br /&gt;
Make ssh timeout resistant:&lt;br /&gt;
 tim@spike-vm:~$ cat .ssh/config &lt;br /&gt;
 Host *&lt;br /&gt;
 ServerAliveInterval 240&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
=== Add alias in .bashrc ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Add new user &amp;quot;newuser&amp;quot; to sudo group ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Change setting: remove (deprecated) settings in config file only on specific os versions ===&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 pfad=44&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 # removed deprecated config line &amp;quot;pfad=44&amp;quot;&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== use case install package ==&lt;br /&gt;
Install package &amp;quot;acl&amp;quot;:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;br /&gt;
&lt;br /&gt;
== using ansible via cron in pull mode ==&lt;br /&gt;
&lt;br /&gt;
see https://github.com/ansible/ansible-examples/blob/master/language_features/ansible_pull.yml&lt;br /&gt;
&lt;br /&gt;
= ansible tower / AWX =&lt;br /&gt;
&lt;br /&gt;
* documentation setting up AWX: https://www.jeffgeerling.com/blog/2017/ansible-open-sources-ansible-tower-awx&lt;br /&gt;
* backup and restore (or migration): https://github.com/autops/awx-migrate, https://github.com/ansible/awx/blob/devel/DATA_MIGRATION.md&lt;br /&gt;
** prepare&lt;br /&gt;
 tower-cli config host http://&amp;lt;old-awx-host.example.com&amp;gt;&lt;br /&gt;
 tower-cli config username &amp;lt;user&amp;gt;&lt;br /&gt;
 tower-cli config password &amp;lt;pass&amp;gt;&lt;br /&gt;
** backup &lt;br /&gt;
 tower-cli receive --all &amp;gt; assets.json&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=422</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=422"/>
		<updated>2019-02-17T17:24:59Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* ansible advanced topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ansible host ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
as root:&lt;br /&gt;
 echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver-options http-proxy=http://10.5.1.10:3128/ --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
&lt;br /&gt;
install sudo (as root, if sudo does not exist)&lt;br /&gt;
 apt-get install sudo&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
=== Install python (if it does not already exist) ===&lt;br /&gt;
  sudo apt install python&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
=== additional useful packages on clients ===&lt;br /&gt;
install acl package to make sure &amp;quot;become_user&amp;quot; works correctly in debian:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
install python (needed for Fedora clients):&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=python state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
then add&lt;br /&gt;
 eval `keychain --eval id_rsa`&lt;br /&gt;
to $HOME/.bashrc&lt;br /&gt;
&lt;br /&gt;
Make ssh timeout resistant:&lt;br /&gt;
 tim@spike-vm:~$ cat .ssh/config &lt;br /&gt;
 Host *&lt;br /&gt;
 ServerAliveInterval 240&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
=== Add alias in .bashrc ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Add new user &amp;quot;newuser&amp;quot; to sudo group ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Change setting: remove (deprecated) settings in config file only on specific os versions ===&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 pfad=44&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 # removed deprecated config line &amp;quot;pfad=44&amp;quot;&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== use case install package ==&lt;br /&gt;
Install package &amp;quot;acl&amp;quot;:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;br /&gt;
&lt;br /&gt;
== using ansible via cron in pull mode ==&lt;br /&gt;
&lt;br /&gt;
see https://github.com/ansible/ansible-examples/blob/master/language_features/ansible_pull.yml&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=421</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=421"/>
		<updated>2019-02-04T21:52:13Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* on ubuntu older than 18.04 and debian (up to 9/stretch) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ansible host ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
as root:&lt;br /&gt;
 echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver-options http-proxy=http://10.5.1.10:3128/ --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
&lt;br /&gt;
install sudo (as root, if sudo does not exist)&lt;br /&gt;
 apt-get install sudo&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
=== Install python (if it does not already exist) ===&lt;br /&gt;
  sudo apt install python&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
=== additional useful packages on clients ===&lt;br /&gt;
install acl package to make sure &amp;quot;become_user&amp;quot; works correctly in debian:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
install python (needed for Fedora clients):&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=python state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
then add&lt;br /&gt;
 eval `keychain --eval id_rsa`&lt;br /&gt;
to $HOME/.bashrc&lt;br /&gt;
&lt;br /&gt;
Make ssh timeout resistant:&lt;br /&gt;
 tim@spike-vm:~$ cat .ssh/config &lt;br /&gt;
 Host *&lt;br /&gt;
 ServerAliveInterval 240&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
=== Add alias in .bashrc ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Add new user &amp;quot;newuser&amp;quot; to sudo group ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Change setting: remove (deprecated) settings in config file only on specific os versions ===&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 pfad=44&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 # removed deprecated config line &amp;quot;pfad=44&amp;quot;&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== use case install package ==&lt;br /&gt;
Install package &amp;quot;acl&amp;quot;:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=420</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=420"/>
		<updated>2019-02-04T21:52:02Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* on ubuntu older than 18.04 and debian (up to 9/stretch) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ansible host ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
as root:&lt;br /&gt;
 echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo sudo apt-key adv --keyserver-options http-proxy=http://10.5.1.10:3128/ --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
&lt;br /&gt;
install sudo (as root, if sudo does not exist)&lt;br /&gt;
 apt-get install sudo&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
=== Install python (if it does not already exist) ===&lt;br /&gt;
  sudo apt install python&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
=== additional useful packages on clients ===&lt;br /&gt;
install acl package to make sure &amp;quot;become_user&amp;quot; works correctly in debian:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
install python (needed for Fedora clients):&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=python state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
then add&lt;br /&gt;
 eval `keychain --eval id_rsa`&lt;br /&gt;
to $HOME/.bashrc&lt;br /&gt;
&lt;br /&gt;
Make ssh timeout resistant:&lt;br /&gt;
 tim@spike-vm:~$ cat .ssh/config &lt;br /&gt;
 Host *&lt;br /&gt;
 ServerAliveInterval 240&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
=== Add alias in .bashrc ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Add new user &amp;quot;newuser&amp;quot; to sudo group ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Change setting: remove (deprecated) settings in config file only on specific os versions ===&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 pfad=44&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 # removed deprecated config line &amp;quot;pfad=44&amp;quot;&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== use case install package ==&lt;br /&gt;
Install package &amp;quot;acl&amp;quot;:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=419</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=419"/>
		<updated>2019-01-25T20:13:37Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* prepare a client for ansible usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ansible host ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
&lt;br /&gt;
install sudo (as root, if sudo does not exist)&lt;br /&gt;
 apt-get install sudo&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
=== Install python (if it does not already exist) ===&lt;br /&gt;
  sudo apt install python&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
=== additional useful packages on clients ===&lt;br /&gt;
install acl package to make sure &amp;quot;become_user&amp;quot; works correctly in debian:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
install python (needed for Fedora clients):&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=python state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
then add&lt;br /&gt;
 eval `keychain --eval id_rsa`&lt;br /&gt;
to $HOME/.bashrc&lt;br /&gt;
&lt;br /&gt;
Make ssh timeout resistant:&lt;br /&gt;
 tim@spike-vm:~$ cat .ssh/config &lt;br /&gt;
 Host *&lt;br /&gt;
 ServerAliveInterval 240&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
=== Add alias in .bashrc ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Add new user &amp;quot;newuser&amp;quot; to sudo group ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Change setting: remove (deprecated) settings in config file only on specific os versions ===&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 pfad=44&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 # removed deprecated config line &amp;quot;pfad=44&amp;quot;&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== use case install package ==&lt;br /&gt;
Install package &amp;quot;acl&amp;quot;:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=418</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=418"/>
		<updated>2019-01-25T20:12:29Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ansible host ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
=== Install python (if it does not already exist) ===&lt;br /&gt;
  sudo apt install python&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
=== additional useful packages on clients ===&lt;br /&gt;
install acl package to make sure &amp;quot;become_user&amp;quot; works correctly in debian:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
install python (needed for Fedora clients):&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=python state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
then add&lt;br /&gt;
 eval `keychain --eval id_rsa`&lt;br /&gt;
to $HOME/.bashrc&lt;br /&gt;
&lt;br /&gt;
Make ssh timeout resistant:&lt;br /&gt;
 tim@spike-vm:~$ cat .ssh/config &lt;br /&gt;
 Host *&lt;br /&gt;
 ServerAliveInterval 240&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
=== Add alias in .bashrc ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Add new user &amp;quot;newuser&amp;quot; to sudo group ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Change setting: remove (deprecated) settings in config file only on specific os versions ===&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 pfad=44&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 # removed deprecated config line &amp;quot;pfad=44&amp;quot;&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== use case install package ==&lt;br /&gt;
Install package &amp;quot;acl&amp;quot;:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=417</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=417"/>
		<updated>2019-01-20T19:45:51Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* setup ssh shell */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
=== Install python (if it does not already exist) ===&lt;br /&gt;
  sudo apt install python&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
=== additional useful packages on clients ===&lt;br /&gt;
install acl package to make sure &amp;quot;become_user&amp;quot; works correctly in debian:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
install python (needed for Fedora clients):&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=python state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
then add&lt;br /&gt;
 eval `keychain --eval id_rsa`&lt;br /&gt;
to $HOME/.bashrc&lt;br /&gt;
&lt;br /&gt;
Make ssh timeout resistant:&lt;br /&gt;
 tim@spike-vm:~$ cat .ssh/config &lt;br /&gt;
 Host *&lt;br /&gt;
 ServerAliveInterval 240&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
=== Add alias in .bashrc ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Add new user &amp;quot;newuser&amp;quot; to sudo group ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Change setting: remove (deprecated) settings in config file only on specific os versions ===&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 pfad=44&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 # removed deprecated config line &amp;quot;pfad=44&amp;quot;&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== use case install package ==&lt;br /&gt;
Install package &amp;quot;acl&amp;quot;:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=416</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=416"/>
		<updated>2018-12-23T17:27:53Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* prepare a client for ansible usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
=== Install python (if it does not already exist) ===&lt;br /&gt;
  sudo apt install python&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
=== additional useful packages on clients ===&lt;br /&gt;
install acl package to make sure &amp;quot;become_user&amp;quot; works correctly in debian:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
install python (needed for Fedora clients):&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=python state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
Make ssh timeout resistant:&lt;br /&gt;
 tim@spike-vm:~$ cat .ssh/config &lt;br /&gt;
 Host *&lt;br /&gt;
 ServerAliveInterval 240&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
=== Add alias in .bashrc ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Add new user &amp;quot;newuser&amp;quot; to sudo group ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Change setting: remove (deprecated) settings in config file only on specific os versions ===&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 pfad=44&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 # removed deprecated config line &amp;quot;pfad=44&amp;quot;&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== use case install package ==&lt;br /&gt;
Install package &amp;quot;acl&amp;quot;:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=415</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=415"/>
		<updated>2018-12-23T17:21:19Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* setup ssh shell */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
=== additional useful packages on clients ===&lt;br /&gt;
install acl package to make sure &amp;quot;become_user&amp;quot; works correctly in debian:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
install python (needed for Fedora clients):&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=python state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
Make ssh timeout resistant:&lt;br /&gt;
 tim@spike-vm:~$ cat .ssh/config &lt;br /&gt;
 Host *&lt;br /&gt;
 ServerAliveInterval 240&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
=== Add alias in .bashrc ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Add new user &amp;quot;newuser&amp;quot; to sudo group ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Change setting: remove (deprecated) settings in config file only on specific os versions ===&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 pfad=44&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 # removed deprecated config line &amp;quot;pfad=44&amp;quot;&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== use case install package ==&lt;br /&gt;
Install package &amp;quot;acl&amp;quot;:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=414</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=414"/>
		<updated>2018-12-09T18:57:03Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* additional useful packages on (debian) clients */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
=== additional useful packages on clients ===&lt;br /&gt;
install acl package to make sure &amp;quot;become_user&amp;quot; works correctly in debian:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
install python (needed for Fedora clients):&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=python state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
=== Add alias in .bashrc ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Add new user &amp;quot;newuser&amp;quot; to sudo group ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Change setting: remove (deprecated) settings in config file only on specific os versions ===&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 pfad=44&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 # removed deprecated config line &amp;quot;pfad=44&amp;quot;&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== use case install package ==&lt;br /&gt;
Install package &amp;quot;acl&amp;quot;:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=413</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=413"/>
		<updated>2018-12-09T18:56:16Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* additional useful packages on (debian) clients */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
=== additional useful packages on (debian) clients ===&lt;br /&gt;
install acl package to make sure &amp;quot;become_user&amp;quot; works correctly:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=python state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
=== Add alias in .bashrc ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Add new user &amp;quot;newuser&amp;quot; to sudo group ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Change setting: remove (deprecated) settings in config file only on specific os versions ===&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 pfad=44&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 # removed deprecated config line &amp;quot;pfad=44&amp;quot;&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== use case install package ==&lt;br /&gt;
Install package &amp;quot;acl&amp;quot;:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=412</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=412"/>
		<updated>2018-12-09T18:29:24Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* prepare a client for ansible usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
=== additional useful packages on (debian) clients ===&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=python state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
=== Add alias in .bashrc ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Add new user &amp;quot;newuser&amp;quot; to sudo group ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Change setting: remove (deprecated) settings in config file only on specific os versions ===&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 pfad=44&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 # removed deprecated config line &amp;quot;pfad=44&amp;quot;&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== use case install package ==&lt;br /&gt;
Install package &amp;quot;acl&amp;quot;:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=411</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=411"/>
		<updated>2018-12-09T18:24:50Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* Change setting: remove (deprecated) settings in config file only on specific os versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
=== Add alias in .bashrc ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Add new user &amp;quot;newuser&amp;quot; to sudo group ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Change setting: remove (deprecated) settings in config file only on specific os versions ===&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 pfad=44&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 # removed deprecated config line &amp;quot;pfad=44&amp;quot;&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== use case install package ==&lt;br /&gt;
Install package &amp;quot;acl&amp;quot;:&lt;br /&gt;
 ansible debsrv1 -m package -a &amp;quot;name=acl state=present&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=410</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=410"/>
		<updated>2018-12-02T16:03:38Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* Change setting: remove (deprecated) settings in config file only on specific os versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
=== Add alias in .bashrc ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Add new user &amp;quot;newuser&amp;quot; to sudo group ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Change setting: remove (deprecated) settings in config file only on specific os versions ===&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 pfad=44&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~$ cat test.conf&lt;br /&gt;
 abc=123&lt;br /&gt;
 # removed deprecated config line &amp;quot;pfad=44&amp;quot;&lt;br /&gt;
 xcd=77&lt;br /&gt;
&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=409</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=409"/>
		<updated>2018-12-02T16:01:47Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* Change setting: remove (deprecated) settings in config file, on specific os version */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
=== Add alias in .bashrc ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Add new user &amp;quot;newuser&amp;quot; to sudo group ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Change setting: remove (deprecated) settings in config file only on specific os versions ===&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=408</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=408"/>
		<updated>2018-12-02T16:01:12Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* use case edit file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
=== Add alias in .bashrc ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Add new user &amp;quot;newuser&amp;quot; to sudo group ===&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Change setting: remove (deprecated) settings in config file, on specific os version ===&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=407</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=407"/>
		<updated>2018-12-02T15:59:54Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* use case edit file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
Add alias in .bashrc&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Add new user &amp;quot;newuser&amp;quot; to sudo group:&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Change setting: remove (deprecated) settings in config file, on specific os version:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=406</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=406"/>
		<updated>2018-12-02T15:59:25Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* use case edit file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
Add alias in .bashrc&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Add new user &amp;quot;newuser&amp;quot; to sudo group:&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Change setting: remove (deprecated) settings in config file:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ cat /home/tim/ansi/comment-out-lines.yml &lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
# expects variable regex to contain the string that matches the start of the config line&lt;br /&gt;
# expects variable path to contain the filename&lt;br /&gt;
# limited to debian version &amp;gt;= 9&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
&lt;br /&gt;
  - name: comment out config line&lt;br /&gt;
    lineinfile:&lt;br /&gt;
         backup=yes&lt;br /&gt;
         state=present&lt;br /&gt;
         path={{ path }}&lt;br /&gt;
         regexp=&#039;^({{ regex }}.*)&#039;&lt;br /&gt;
         backrefs=yes&lt;br /&gt;
         line=&#039;# removed deprecated config line &amp;quot;\1&amp;quot;&#039;&lt;br /&gt;
    when: &amp;gt;&lt;br /&gt;
           ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
           and&lt;br /&gt;
           ansible_lsb.major_release|int &amp;gt;= 9&lt;br /&gt;
tim@spike-vm:~$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=405</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=405"/>
		<updated>2018-12-02T15:55:50Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* use case edit file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
Add alias in .bashrc&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Add new user &amp;quot;newuser&amp;quot; to sudo group:&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Change setting: remove (deprecated) settings in config file:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l debians /home/tim/ansi/comment-out-lines.yml -K -e &amp;quot;path=test.conf regex=&#039;pfad&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=404</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=404"/>
		<updated>2018-12-02T13:16:26Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* use case edit file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
Add alias in .bashrc&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Add new user &amp;quot;newuser&amp;quot; to sudo group:&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Change setting: remove deprecated settings in /etc/ssh/sshd_config file:&lt;br /&gt;
 ansible target-hostname -m lineinfile -a &amp;quot;state=absent backup=yes path=/etc/ssh/sshd_config regexp=&#039;^(ServerKeyBits.*)&#039;&amp;quot; -K -b&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=403</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=403"/>
		<updated>2018-12-02T13:07:58Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* use case edit file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
Add alias in .bashrc&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Add new user &amp;quot;newuser&amp;quot; to sudo group:&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Change setting: remove deprecated settings in /etc/ssh/sshd_config file:&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes backup=yes dest=/etc/ssh/sshd_config regexp=&#039;^(ServerKeyBits.*)&#039; line=&#039;# tmp, 2018-12-02, removed deprecated config line: \1&#039;&amp;quot; -K -b&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=402</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=402"/>
		<updated>2018-12-02T13:05:17Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* use case edit file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
Add alias in .bashrc&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Add new user &amp;quot;newuser&amp;quot; to sudo group:&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;backrefs=yes dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Change setting: remove deprecated settings in /etc/ssh/sshd_config file:&lt;br /&gt;
 ansible &amp;quot;target host&amp;quot; -m lineinfile -a &amp;quot;dest=/etc/ssh/sshd_config regexp=&#039;^(ServerKeyBits.*)&#039; line=&#039;# tmp, 2018-12-02, removed deprecated config line: \1&#039;&amp;quot; -K -b&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=401</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=401"/>
		<updated>2018-11-21T19:44:37Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* restarrt service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restart service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
Add new user &amp;quot;newuser&amp;quot; to sudo group:&lt;br /&gt;
 ansible &amp;lt;target&amp;gt; -m lineinfile -a &amp;quot;dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
Add alias in .bashrc&lt;br /&gt;
 ansible &amp;lt;target&amp;gt; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=400</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=400"/>
		<updated>2018-11-21T19:38:22Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* prepare a client for ansible usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
this can be automated later (with ansible working) using the following adhoc command:&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/sudoers state=present line=&#039;secure_path=\&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\&amp;quot;&#039;&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restarrt service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
Add new user &amp;quot;newuser&amp;quot; to sudo group:&lt;br /&gt;
 ansible &amp;lt;target&amp;gt; -m lineinfile -a &amp;quot;dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
Add alias in .bashrc&lt;br /&gt;
 ansible &amp;lt;target&amp;gt; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=399</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=399"/>
		<updated>2018-11-21T16:42:19Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* ansible ad-hoc commands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== restarrt service ==&lt;br /&gt;
 ansible spiegel -m service -a &amp;quot;name=puppet state=restarted&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
Add new user &amp;quot;newuser&amp;quot; to sudo group:&lt;br /&gt;
 ansible &amp;lt;target&amp;gt; -m lineinfile -a &amp;quot;dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
Add alias in .bashrc&lt;br /&gt;
 ansible &amp;lt;target&amp;gt; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=398</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=398"/>
		<updated>2018-11-21T16:36:36Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* display os version */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
Add new user &amp;quot;newuser&amp;quot; to sudo group:&lt;br /&gt;
 ansible &amp;lt;target&amp;gt; -m lineinfile -a &amp;quot;dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
Add alias in .bashrc&lt;br /&gt;
 ansible &amp;lt;target&amp;gt; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=397</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=397"/>
		<updated>2018-11-21T16:36:25Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* execute commands on remote hosts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 tim@spike-vm:~$ ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
Add new user &amp;quot;newuser&amp;quot; to sudo group:&lt;br /&gt;
 ansible &amp;lt;target&amp;gt; -m lineinfile -a &amp;quot;dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
Add alias in .bashrc&lt;br /&gt;
 ansible &amp;lt;target&amp;gt; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=396</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=396"/>
		<updated>2018-11-21T16:35:55Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* ansible ad-hoc commands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== execute commands on remote hosts ==&lt;br /&gt;
=== execute simple command ===&lt;br /&gt;
 tim@spike-vm:~$ ansible spiegel -m command -a &amp;quot;ls -la&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== execute command as root via sudo ===&lt;br /&gt;
 tim@spike-vm:~$ ansible spiegel -m command -a &amp;quot;checkrestart&amp;quot; -b -K&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 tim@spike-vm:~$ ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
Add new user &amp;quot;newuser&amp;quot; to sudo group:&lt;br /&gt;
 ansible &amp;lt;target&amp;gt; -m lineinfile -a &amp;quot;dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
Add alias in .bashrc&lt;br /&gt;
 ansible &amp;lt;target&amp;gt; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=395</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=395"/>
		<updated>2018-11-21T16:20:39Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* use case edit file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 tim@spike-vm:~$ ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
Add new user &amp;quot;newuser&amp;quot; to sudo group:&lt;br /&gt;
 ansible &amp;lt;target&amp;gt; -m lineinfile -a &amp;quot;dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
Add alias in .bashrc&lt;br /&gt;
 ansible &amp;lt;target&amp;gt; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc create=yes state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=394</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=394"/>
		<updated>2018-11-21T16:16:54Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* use case edit file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 tim@spike-vm:~$ ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
Add new user &amp;quot;newuser&amp;quot; to sudo group:&lt;br /&gt;
 ansible &amp;lt;target&amp;gt; -m lineinfile -a &amp;quot;dest=/etc/group regexp=&#039;^(sudo:x:27:)(.*)&#039; line=&#039;\1newuser,\2&#039;&amp;quot;&lt;br /&gt;
Add alias in .bashrc&lt;br /&gt;
 ansible &amp;lt;traget&amp;gt; -m lineinfile -a &amp;quot;dest=/home/tim/.bashrc state=present line=&#039;alias ll=\&#039;ls -l\&#039;&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=393</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=393"/>
		<updated>2018-11-21T15:27:36Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* use case append to file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 tim@spike-vm:~$ ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case add public key to authorized_keys ==&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/group regexp=&#039;^(users:x:100:)(.*)&#039; line=&#039;\1ldapusername,\2&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=392</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=392"/>
		<updated>2018-11-20T21:16:51Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* use case install apt package */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 tim@spike-vm:~$ ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case append to file ==&lt;br /&gt;
&lt;br /&gt;
e.g. add public key to authorized_keys&lt;br /&gt;
&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/group regexp=&#039;^(users:x:100:)(.*)&#039; line=&#039;\1ldapusername,\2&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=391</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=391"/>
		<updated>2018-11-20T21:15:03Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* reboot / restart services that need it */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 tim@spike-vm:~$ ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case append to file ==&lt;br /&gt;
&lt;br /&gt;
e.g. add public key to authorized_keys&lt;br /&gt;
&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/group regexp=&#039;^(users:x:100:)(.*)&#039; line=&#039;\1ldapusername,\2&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
For use of checkrestart, install package:&lt;br /&gt;
  sudo apt install needrestart&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: apache2&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=390</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=390"/>
		<updated>2018-11-20T21:14:25Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* prepare a client for ansible usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
make sure root path is set correctly when executing command via sudo:&lt;br /&gt;
 grep secure_path /etc/sudoers&lt;br /&gt;
 Defaults  secure_path=&amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 tim@spike-vm:~$ ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case append to file ==&lt;br /&gt;
&lt;br /&gt;
e.g. add public key to authorized_keys&lt;br /&gt;
&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/group regexp=&#039;^(users:x:100:)(.*)&#039; line=&#039;\1ldapusername,\2&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: apache2&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=389</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=389"/>
		<updated>2018-11-20T20:28:47Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* use case gather system information */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== gather system information ==&lt;br /&gt;
&lt;br /&gt;
=== display os version ===&lt;br /&gt;
 tim@spike-vm:~$ ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case append to file ==&lt;br /&gt;
&lt;br /&gt;
e.g. add public key to authorized_keys&lt;br /&gt;
&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/group regexp=&#039;^(users:x:100:)(.*)&#039; line=&#039;\1ldapusername,\2&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: apache2&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=388</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=388"/>
		<updated>2018-11-19T22:20:26Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* update and upgrade packages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== use case gather system information ==&lt;br /&gt;
&lt;br /&gt;
display os version:&lt;br /&gt;
 tim@spike-vm:~$ ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case append to file ==&lt;br /&gt;
&lt;br /&gt;
e.g. add public key to authorized_keys&lt;br /&gt;
&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/group regexp=&#039;^(users:x:100:)(.*)&#039; line=&#039;\1ldapusername,\2&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== reboot / restart services that need it ===&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: apache2&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=387</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=387"/>
		<updated>2018-11-19T21:46:20Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* ansible playbooks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== use case gather system information ==&lt;br /&gt;
&lt;br /&gt;
display os version:&lt;br /&gt;
 tim@spike-vm:~$ ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case append to file ==&lt;br /&gt;
&lt;br /&gt;
e.g. add public key to authorized_keys&lt;br /&gt;
&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/group regexp=&#039;^(users:x:100:)(.*)&#039; line=&#039;\1ldapusername,\2&lt;br /&gt;
&lt;br /&gt;
= simple ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: apache2&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=386</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=386"/>
		<updated>2018-11-19T21:45:08Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* Change password for your own user on all targets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== use case gather system information ==&lt;br /&gt;
&lt;br /&gt;
display os version:&lt;br /&gt;
 tim@spike-vm:~$ ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case append to file ==&lt;br /&gt;
&lt;br /&gt;
e.g. add public key to authorized_keys&lt;br /&gt;
&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/group regexp=&#039;^(users:x:100:)(.*)&#039; line=&#039;\1ldapusername,\2&lt;br /&gt;
&lt;br /&gt;
= ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: apache2&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=385</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=385"/>
		<updated>2018-11-19T21:44:08Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* use cases edit file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== use case gather system information ==&lt;br /&gt;
&lt;br /&gt;
display os version:&lt;br /&gt;
 tim@spike-vm:~$ ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case append to file ==&lt;br /&gt;
&lt;br /&gt;
e.g. add public key to authorized_keys&lt;br /&gt;
&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case edit file ==&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/group regexp=&#039;^(users:x:100:)(.*)&#039; line=&#039;\1ldapusername,\2&lt;br /&gt;
&lt;br /&gt;
= ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: apache2&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== Change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=384</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=384"/>
		<updated>2018-11-19T21:43:55Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* use cases append to file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== use case gather system information ==&lt;br /&gt;
&lt;br /&gt;
display os version:&lt;br /&gt;
 tim@spike-vm:~$ ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use case append to file ==&lt;br /&gt;
&lt;br /&gt;
e.g. add public key to authorized_keys&lt;br /&gt;
&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use cases edit file ==&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/group regexp=&#039;^(users:x:100:)(.*)&#039; line=&#039;\1ldapusername,\2&lt;br /&gt;
&lt;br /&gt;
= ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: apache2&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== Change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=383</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=383"/>
		<updated>2018-11-19T21:43:42Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* use cases add file */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== use case gather system information ==&lt;br /&gt;
&lt;br /&gt;
display os version:&lt;br /&gt;
 tim@spike-vm:~$ ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use case add file ==&lt;br /&gt;
&lt;br /&gt;
== use cases append to file ==&lt;br /&gt;
&lt;br /&gt;
e.g. add public key to authorized_keys&lt;br /&gt;
&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use cases edit file ==&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/group regexp=&#039;^(users:x:100:)(.*)&#039; line=&#039;\1ldapusername,\2&lt;br /&gt;
&lt;br /&gt;
= ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: apache2&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== Change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=382</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=382"/>
		<updated>2018-11-19T21:43:23Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* ansible playbooks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible ad-hoc commands =&lt;br /&gt;
&lt;br /&gt;
== use case gather system information ==&lt;br /&gt;
&lt;br /&gt;
display os version:&lt;br /&gt;
 tim@spike-vm:~$ ansible all -m setup -a &amp;quot;filter=ansible_lsb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use cases add file ==&lt;br /&gt;
== use cases append to file ==&lt;br /&gt;
&lt;br /&gt;
e.g. add public key to authorized_keys&lt;br /&gt;
&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use cases edit file ==&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/group regexp=&#039;^(users:x:100:)(.*)&#039; line=&#039;\1ldapusername,\2&lt;br /&gt;
&lt;br /&gt;
= ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: apache2&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== Change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
	<entry>
		<id>http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=381</id>
		<title>Ansible Howto</title>
		<link rel="alternate" type="text/html" href="http://howto.cactus.de/index.php?title=Ansible_Howto&amp;diff=381"/>
		<updated>2018-11-19T21:42:39Z</updated>

		<summary type="html">&lt;p&gt;Tim: /* use case gather system information */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ansible first steps = &lt;br /&gt;
&lt;br /&gt;
== documentation ==&lt;br /&gt;
* https://docs.ansible.com/ansible/latest/user_guide/intro_getting_started.html&lt;br /&gt;
* changing root passwords: https://www.redpill-linpro.com/sysadvent/2017/12/02/ansible-change-passwords.html&lt;br /&gt;
&lt;br /&gt;
== installation ==&lt;br /&gt;
=== on ubuntu &amp;gt;= 18.04 ===&lt;br /&gt;
 sudo apt install ansible&lt;br /&gt;
&lt;br /&gt;
=== on ubuntu older than 18.04 and debian (up to 9/stretch) ===&lt;br /&gt;
These systems ship with ansible versions older than 2.4. For apt module to work smoothly (e.g. autoremove) we really should have ansible 2.4 or above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo echo &amp;quot;deb http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main&amp;quot; &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 93C4A3FD7BB9C367&lt;br /&gt;
sudo apt update&lt;br /&gt;
sudo apt upgrade&lt;br /&gt;
sudo apt install ansible&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== prepare a client for ansible usage ==&lt;br /&gt;
using user tim for ssh sessions, setting user up for sudo, ssh pub key auth&lt;br /&gt;
&lt;br /&gt;
as root user&lt;br /&gt;
 useradd -m tim -s /bin/bash&lt;br /&gt;
 passwd tim&lt;br /&gt;
add user to sudo group&lt;br /&gt;
 grep sudo /etc/group&lt;br /&gt;
 sudo:x:&amp;lt;id&amp;gt;:tim&lt;br /&gt;
allow sudo group to use all commands via sudo&lt;br /&gt;
 grep sudo  /etc/sudoers&lt;br /&gt;
 %sudo	ALL=(ALL:ALL) ALL&lt;br /&gt;
&lt;br /&gt;
from here in user context&lt;br /&gt;
 su - tim&lt;br /&gt;
 mkdir /home/tim/.ssh&lt;br /&gt;
 chmod 700 /home/tim/.ssh&lt;br /&gt;
 echo &amp;quot;&amp;lt;ssh-public-key&amp;gt;&amp;quot; &amp;gt;&amp;gt; /home/tim/.ssh/authorized_keys&lt;br /&gt;
 chmod 600 /home/tim/.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
== initial ansible serverconfig == &lt;br /&gt;
=== fill /etc/ansible/hosts ===&lt;br /&gt;
add all your hosts/groups to your /etc/ansible/hosts file&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== setup ssh shell ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-agent bash&lt;br /&gt;
 tim@spike-vm:~/ansi$ ssh-add /home/tim/.ssh/id_rsa&lt;br /&gt;
 Enter passphrase for /home/tim/.ssh/id_rsa: &lt;br /&gt;
 Identity added: /home/tim/.ssh/id_rsa (/home/tim/.ssh/id_rsa)&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
or better:&lt;br /&gt;
 sudo apt install keychain&lt;br /&gt;
 echo &amp;quot;eval `keychain --eval id_rsa`&amp;quot; &amp;gt;&amp;gt;/home/tim/.bashrc&lt;br /&gt;
&lt;br /&gt;
=== test client connectivity ===&lt;br /&gt;
 &lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible itchy -m ping&lt;br /&gt;
 itchy | SUCCESS =&amp;gt; {&lt;br /&gt;
     &amp;quot;changed&amp;quot;: false, &lt;br /&gt;
     &amp;quot;ping&amp;quot;: &amp;quot;pong&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 tim@spike-vm:~/ansi$&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
Ansible has built-in support for logging. Add the following lines to your ansible configuration file:&lt;br /&gt;
&lt;br /&gt;
 [defaults] &lt;br /&gt;
 log_path=/var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
and then run&lt;br /&gt;
 tim@spike-vm:~$ sudo touch /var/log/ansible.log&lt;br /&gt;
 tim@spike-vm:~$ sudo chmod 666 /var/log/ansible.log&lt;br /&gt;
&lt;br /&gt;
This simply logs the command line output to the file&lt;br /&gt;
&lt;br /&gt;
=== Debugging ===&lt;br /&gt;
&lt;br /&gt;
Use -v switch to see playbook stdout:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~$ ansible-playbook ansi/update-upgrade.yml -K -v&lt;br /&gt;
Using /etc/ansible/ansible.cfg as config file&lt;br /&gt;
SUDO password: &lt;br /&gt;
/etc/ansible/hosts did not meet host_list requirements, check plugin documentation if this is unexpected&lt;br /&gt;
/etc/ansible/hosts did not meet script requirements, check plugin documentation if this is unexpected&lt;br /&gt;
&lt;br /&gt;
PLAY [all] *******************************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] *******************************************************************************************************************************&lt;br /&gt;
ok: [itchy]&lt;br /&gt;
...&lt;br /&gt;
TASK [.deb do dist-upgrade] **************************************************************************************************************************&lt;br /&gt;
ok: [gware] =&amp;gt; {&amp;quot;changed&amp;quot;: false, &amp;quot;msg&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stderr&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stderr_lines&amp;quot;: [], &amp;quot;stdout&amp;quot;: &amp;quot;Reading package lists...\nBuilding dependency tree...\nReading state information...\n0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.\n&amp;quot;, &amp;quot;stdout_lines&amp;quot;: [&amp;quot;Reading package lists...&amp;quot;, &amp;quot;Building dependency tree...&amp;quot;, &amp;quot;Reading state information...&amp;quot;, &amp;quot;0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.&amp;quot;]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ansible playbooks =&lt;br /&gt;
&lt;br /&gt;
== use cases add file ==&lt;br /&gt;
== use cases append to file ==&lt;br /&gt;
&lt;br /&gt;
e.g. add public key to authorized_keys&lt;br /&gt;
&lt;br /&gt;
 ansible all -m authorized_key -a &amp;quot;user=tim key=&#039;ssh-rsa AAAA...XXX == tim@hostname&#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== use cases edit file ==&lt;br /&gt;
 ansible all -m lineinfile -a &amp;quot;dest=/etc/group regexp=&#039;^(users:x:100:)(.*)&#039; line=&#039;\1ldapusername,\2&lt;br /&gt;
&lt;br /&gt;
== use cases debian/ubuntu sys management using apt ==&lt;br /&gt;
&lt;br /&gt;
=== update and upgrade packages ===&lt;br /&gt;
tim@spike-vm:~/ansi$ cat apt-update-upgrade.yml &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: assert ansible version&lt;br /&gt;
      assert:&lt;br /&gt;
        that:&lt;br /&gt;
          - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
        msg: Ansible 2.4 or above is required&lt;br /&gt;
    - name: .deb do dist-upgrade&lt;br /&gt;
      apt: &amp;gt;&lt;br /&gt;
         update_cache=yes&lt;br /&gt;
         cache_valid_time=1200&lt;br /&gt;
         upgrade=dist&lt;br /&gt;
         autoremove=yes&lt;br /&gt;
         purge=yes&lt;br /&gt;
      when: &amp;gt;&lt;br /&gt;
         ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
         or&lt;br /&gt;
         ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== autoremove unused packages ===&lt;br /&gt;
This only works for ansible &amp;gt;=2.4.&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-autoremove.yml -K&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-autoremove.yml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: assert ansible version&lt;br /&gt;
       assert:&lt;br /&gt;
         that:&lt;br /&gt;
           - &amp;quot;{{ ansible_version.string is version_compare(&#039;2.4&#039;, &#039;&amp;gt;=&#039;) }}&amp;quot;&lt;br /&gt;
         msg: Ansible 2.4 or above is required&lt;br /&gt;
     - name: Autoremove unused packages&lt;br /&gt;
       apt:&lt;br /&gt;
         autoremove: yes&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use case install apt package ===&lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook -l puppet apt-install.yml -K -e &amp;quot;package=apache2&amp;quot;&lt;br /&gt;
 SUDO password: &lt;br /&gt;
 &lt;br /&gt;
 PLAY [all] *********************************************************************&lt;br /&gt;
 &lt;br /&gt;
 TASK [setup] *******************************************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 TASK [install package &amp;quot;apache2&amp;quot;] ***********************************************&lt;br /&gt;
 ok: [puppet]&lt;br /&gt;
 &lt;br /&gt;
 PLAY RECAP *********************************************************************&lt;br /&gt;
 puppet                     : ok=2    changed=0    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
 tim@spike-vm:~/ansi$ cat apt-install.yml &lt;br /&gt;
 ---&lt;br /&gt;
 &lt;br /&gt;
 - hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  tasks:&lt;br /&gt;
     - name: install package &amp;quot;{{ package }}&amp;quot;&lt;br /&gt;
       apt:&lt;br /&gt;
        name: apache2&lt;br /&gt;
       when: &amp;gt;&lt;br /&gt;
        ansible_distribution == &#039;Debian&#039;&lt;br /&gt;
        or&lt;br /&gt;
        ansible_distribution == &#039;Ubuntu&#039;&lt;br /&gt;
&lt;br /&gt;
== use case change passwords for linux systems ==&lt;br /&gt;
&lt;br /&gt;
To make password encryption work:&lt;br /&gt;
 apt install python-passlib  &lt;br /&gt;
&lt;br /&gt;
=== Change password for your own user on all targets ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ ansible-playbook change-user-password.yml -l spike -K&lt;br /&gt;
SUDO password: &lt;br /&gt;
Enter New Password: &lt;br /&gt;
confirm Enter New Password: &lt;br /&gt;
&lt;br /&gt;
PLAY [all] ******************************************************************************************************************************&lt;br /&gt;
&lt;br /&gt;
TASK [Gathering Facts] ******************************************************************************************************************&lt;br /&gt;
ok: [spike]&lt;br /&gt;
&lt;br /&gt;
TASK [Change password of calling user] **************************************************************************************************&lt;br /&gt;
changed: [spike]&lt;br /&gt;
&lt;br /&gt;
PLAY RECAP ******************************************************************************************************************************&lt;br /&gt;
spike                      : ok=2    changed=1    unreachable=0    failed=0   &lt;br /&gt;
&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
playbook:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-user-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of calling user&lt;br /&gt;
      user: name={{ lookup(&#039;env&#039;, &#039;USER&#039;) }} update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== change root password ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tim@spike-vm:~/ansi$ cat change-root-password.yml &lt;br /&gt;
---&lt;br /&gt;
- hosts: all&lt;br /&gt;
  become: yes&lt;br /&gt;
  gather_facts: yes&lt;br /&gt;
&lt;br /&gt;
  vars_prompt:&lt;br /&gt;
    - name: &amp;quot;new_password&amp;quot;&lt;br /&gt;
      prompt: &amp;quot;Enter New Password&amp;quot;&lt;br /&gt;
      private: yes&lt;br /&gt;
      encrypt: &amp;quot;sha512_crypt&amp;quot;&lt;br /&gt;
      confirm: yes&lt;br /&gt;
      salt_size: 7&lt;br /&gt;
&lt;br /&gt;
  tasks:&lt;br /&gt;
    - name: Change password of root user&lt;br /&gt;
      user: name=root update_password=always password={{new_password}}&lt;br /&gt;
tim@spike-vm:~/ansi$ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
call with:&lt;br /&gt;
 tim@spike-vm:~/ansi$ ansible-playbook change-root-password.yml -l puppet -K&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ansible advanced topics =&lt;br /&gt;
&lt;br /&gt;
== use case add firewall rule == &lt;br /&gt;
&lt;br /&gt;
=== iptables ===&lt;br /&gt;
&lt;br /&gt;
=== check point R80 API ===&lt;/div&gt;</summary>
		<author><name>Tim</name></author>
	</entry>
</feed>