Using Ansible to configure your Desktops and Laptops

You guys asked for it, now I finally deliver – in this video I show you how to use Ansible to configure your laptops and desktops! This works for servers too. This is a long video, but should get you on your way. You’ll see a few working examples, and by the end of the video, you will have your very own Ansible desktop/laptop config!

YouTube player

Setting up the Repository

Create a Git repository

The method used in this video relies on a Git repository, so you will need to create a repository on your Git server to continue. In the video, Github is used as an example.

Create an OpenSSH key (used for cloning the Git Repo)

 ssh-keygen -t ed25519 -C "yourname@yourdomain.net"

Install git on your local machine

 sudo apt install git

Pull down the repository to work locally

git clone https://url/to/your/repository

Add a file to version control

git add <filename>

Create a git commit

git commit -m "message about the commit"

Push the changes up to Github

git push origin main

Code Examples

Example 1

 ---
 - hosts: localhost
   connection: local
   become: true
 
   tasks:
   - name: install htop
     package:
       name: htop

Example 2

 ---
 - hosts: localhost
   connection: local
   become: true
 
   tasks:
   - name: install packages
     package:
       name:
         - htop
         - tmux
         - vim-nox

Example 3

 ---
 - hosts: localhost
   connection: local
   become: true
 
   tasks:
   - name: install packages
     package:
       name:
         - htop
         - tmux
         - vim-nox
 
   - name: copy wallpaper file
     copy:
       src: files/wallpaper.png
       dest: /usr/share/backgrounds/ansible-wallpaper.png
       owner: root
       group: root
 
   - name: set wallpaper
     become_user: jay
     dconf:
       key: "/org/gnome/desktop/background/picture-uri"
       value: "'file:///usr/share/backgrounds/ansible-wallpaper.png'"
 
   - name: set wallpaper position
     become_user: jay
     dconf:
       key: "/org/gnome/desktop/background/picture-options"
       value: "'zoom'"

Example 4

 ---
 - hosts: localhost
   connection: local
   become: true
 
 tasks:
 
   - name: install packages
     package:
       name:
         - htop
         - tmux
         - vim-nox
 
   - name: copy wallpaper file
     copy:
       src: files/wallpaper.png
       dest: /usr/share/backgrounds/ansible-wallpaper.png
       owner: root
       group: root
 
   - name: set wallpaper
     become_user: jay
     dconf:
       key: "/org/gnome/desktop/background/picture-uri"
       value: "'file:///usr/share/backgrounds/ansible-wallpaper.png'"
 
   - name: set wallpaper position
     become_user: jay
     dconf:
       key: "/org/gnome/desktop/background/picture-options"
       value: "'zoom'"
 
   - name: copy custom .bashrc file
     copy:
       src: files/bashrc
       dest: /home/jay/.bashrc
       owner: jay
       group: jay

Example 5

 ---
 - hosts: localhost
   connection: local
   become: true
 
   tasks:
 
   - name: install packages
     package:
       name:
         - htop
         - tmux
         - vim-nox
 
   - name: copy wallpaper file
     copy:
       src: files/wallpaper.png
       dest: /usr/share/backgrounds/ansible-wallpaper.png
       owner: root
       group: root
 
   - name: set wallpaper
     become_user: jay
     dconf:
       key: "/org/gnome/desktop/background/picture-uri"
       value: "'file:///usr/share/backgrounds/ansible-wallpaper.png'"
 
   - name: set wallpaper position
     become_user: jay
     dconf:
       key: "/org/gnome/desktop/background/picture-options"
       value: "'zoom'"
 
   - name: copy custom .bashrc file
     copy:
       src: files/bashrc
       dest: /home/jay/.bashrc
       owner: jay
       group: jay
 
   - name: add ansible user
     user:
       name: velociraptor
       system: yes
 
   - name: set up sudo for ansible user
     copy:
       src: files/sudoer_velociraptor
       dest: /etc/sudoers.d/velociraptor
       owner: root
       group: root
       mode: 0440
 
   - name: add ansible-pull cron job
     cron:
       name: ansible auto-provision
       user: velociraptor
       minute: "*/10"
       job: ansible-pull -o -U https://github.com/jlacroix82/ansible_pull_tutorial.git

Example 6

 ---
 - hosts: localhost
   connection: local
   become: true
 
   tasks:
 
   - name: install packages
     package:
       name:
         - htop
         - tmux
         - vim-nox
 
   - name: copy wallpaper file
     copy:
       src: files/wallpaper.png
       dest: /usr/share/backgrounds/ansible-wallpaper.png
       owner: root
       group: root
 
   - name: set wallpaper
     become_user: jay
     dconf:
       key: "/org/gnome/desktop/background/picture-uri"
       value: "'file:///usr/share/backgrounds/ansible-wallpaper.png'"
 
   - name: set wallpaper position
     become_user: jay
     dconf:
       key: "/org/gnome/desktop/background/picture-options"
       value: "'zoom'"
 
   - name: disable lock screen notifications
     become_user: jay
     dconf:
       key: "/org/gnome/desktop/notifications/show-in-lock-screen"
       value: "false"
 
   - name: copy custom .bashrc file
     copy:
       src: files/bashrc
       dest: /home/jay/.bashrc
       owner: jay
       group: jay
 
   - name: add ansible user
     user:
       name: velociraptor
       system: yes
 
   - name: set up sudo for ansible user
     copy:
       src: files/sudoer_velociraptor
       dest: /etc/sudoers.d/velociraptor
       owner: root
       group: root
       mode: 0440
 
   - name: add ansible-pull cron job
     cron:
       name: ansible auto-provision
       user: velociraptor
       minute: "*/10"
       job: ansible-pull -o -U https://github.com/jlacroix82/ansible_pull_tutorial.git