aboutsummaryrefslogtreecommitdiff
path: root/content/posts/2019-03-07Automating_desktop_setup_with_ansible-pull_part-1.md
blob: 58ecb0d968cd83861137909b183a96677e5a5eae (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
95
96
97
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).

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
[Ansible](https://www.ansible.com/). 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 focus on
[Ansible
Pull](https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html#ansible-pull)
and
[Playbooks](https://docs.ansible.com/ansible/latest/user_guide/playbooks.html).
As better described:

> \[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.
>
> [source](https://docs.ansible.com/ansible/latest/cli/ansible-pull.html)

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.

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`:

``` service
[all]
localhost
```

As an experiment we\'re going to write a asks to install vim. Currently,
   I\'m using [Fedora](https://getfedora.org/) thus we going to use [dnf
   modeule](https://docs.ansible.com/ansible/latest/modules/dnf_module.html)
   to install packages, but if you\'re using another distribution look for
   a equivalent module like [apt
   module](https://docs.ansible.com/ansible/latest/modules/apt_module.html)
   for [Ubuntu](https://ubuntu.com/).

   The playbook to install is quite simple:

   ``` yaml
# main.yaml
   - hosts: all
   tasks:
   - name: install vim
   dnf:
name: vim
state: latest
```

`hosts:` is required and it has to match our hosts otherwise the
playbook won\'t run.

`tasks:` is the list of tasks that the playbook will perform, in this
case will be `dnf install vim`.

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:


``` bash
sudo ansible-playbook --connection=local main.yml
```

After a few seconds, vim will be installed on your machine.

``` bash
PLAY [all] *************************************************************

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

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

PLAY RECAP *************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0
```

This is the first step, next part we shall create a more complex
playbook and setup repository to run it remotely using `ansible-pull`.