aboutsummaryrefslogtreecommitdiff
path: root/content/posts/2019-03-07Automating_desktop_setup_with_ansible-pull_part-1.html
blob: d06a648c3793c6d13fbaae4ac818d84787731e6f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<section>
  <p>
    Every time that I do a clean install on my machine it takes a few hours till I
    get to point where I was before formatting it, install all packages, select
    themes, icons, fonts, install IDEs, extensions and so on. After doing it a few
    times I came to the conclusion that I would save time by spending time
    automating this chore, and as a result, I could tinker a little more with my
    system and not worry about spending a weekend re-installing everything (which
    have happened more time that I'd like to remember).
  </p>
  <p>
    So after a few attempts using python and bash I ended with many files and
    keep everything organized and concise turned out to be more tedious than the
    setup itself. So there comes <a href="https://www.ansible.com/">Ansible</a>.
    It is an enterprise-graded software used to automate tasks. It has A LOT OF
    features and it can be really helpful if you're a sysadmin but for now we're
    going to focuson
    <a href="https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html#ansible-pull">
      Ansible Pull
    </a>
    and
    <a href="https://docs.ansible.com/ansible/latest/user_guide/playbooks.html">
      Playbooks
    </a>. As better described:
    <blockquote>
      [Ansible-Pull] is used to up a remote copy of ansible on each managed
      node, each set to run via cron and update playbook source via a source
      repository. This inverts the default push architecture of Ansible into a
      pull architecture, which has near-limitless scaling potential.

      Playbooks are Ansible’s configuration, deployment, and orchestration
      language. They can describe a policy you want your remote systems to
      enforce, or a set of steps in a general IT process.
      (<a href="https://docs.ansible.com/ansible/latest/cli/ansible-pull.html">source</a>)
    </blockquote>
  </p>
  <p>
    The goal is to pull and run a playbook remotely using a git repository. The
    playbook will describe the tasks needed to setup our machine from scratch.
    <br/>
    But first lets tinker a bit a with playbooks locally with ansible-playbook,
    to do so we need to add localhost to ansible's hosts list. Add it to
    /etc/ansible/hosts:
<pre><code>[all]
localhost</code></pre>
  </p>
  <p>
    As an experiment we're going to write a asks to install vim. Currently, I'm
    using Fedora thus we going to use dnf modeule to install packages, but if
    you're using another distribution look for a equivalent module like apt
    module for Ubuntu.

    The playbook to install is quite simple:

<pre><code># main.yaml
- hosts: all
  tasks:
     - name: install vim
       dnf:
         name: vim
         state: latest</code></pre>
    <dl>
        <dt>host</dt>
        <dd>it is required and it has to match our hosts otherwise the playbook won't run.</dd>
        <dt>taks</dt>
        <dd>
          it is the list of tasks that the playbook will perform, in this case
          will be dnf install vim.
        </dd>
    </dl>
  </p>
  <p>
    To run a playbook use the command ansible-playbook commando to run main.yml
    direct from disk, do to so just run the following command:
<pre><code>sudo ansible-playbook --connection=local main.yml</code></pre>
  </p>
  <p>
    After a few seconds, vim will be installed on your machine.
<pre><code>PLAY [all] *************************************************************

TASK [Gathering Facts] *************************************************
ok: [localhost]

TASK [install vim] *****************************************************
ok: [localhost]

PLAY RECAP *************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0</code></pre>
  </p>
  <p>
    This is the first step, next part we shall create a more complex playbook and
    setup repository to run it remotely using ansible-pull.
  </p>
</section>