gettingstarted.rst 8.92 KB
Newer Older
1 2
Getting Started
===============
Tim Bielawa committed
3

4 5 6 7
.. contents::
   :depth: 2
   :backlinks: top

Michael DeHaan committed
8 9 10
Requirements
````````````

Michael DeHaan committed
11
Requirements for Ansible are extremely minimal.
Michael DeHaan committed
12

13 14
Ansible is written for Python 2.6+.  If you are running Python 2.5 on an "Enterprise Linux" variant, we'll show you how to add
2.6.  Newer versions of Linux and OS X should already have 2.6 or higher.
15

16
In additon to Python 2.6+, you will want the following Python modules (installed via pip or perhaps via your OS package manager via slightly different names):
Michael DeHaan committed
17 18 19

* ``paramiko``
* ``PyYAML``
20
* ``jinja2``
Michael DeHaan committed
21

22 23 24 25 26 27 28
If you are using RHEL or CentOS 5 , python is version 2.4 by default, but you can get python 2.6 installed easily. `Use EPEL <http://fedoraproject.org/wiki/EPEL>`_ and install these dependencies as follows:

.. code-block:: bash

   $ yum install python26 python26-PyYAML python26-paramiko python26-jinja2


29 30
On the managed nodes, you only need Python 2.4 or later, but if you are are running less than Python 2.6 on them, you will
also need:
Michael DeHaan committed
31

32
* ``python-simplejson`` 
Michael DeHaan committed
33

34 35 36
.. note::

   Ansible's "raw" module (for executing commands in a quick and dirty
37
   way) and the script module don't even need that.  So technically, you can use
38 39 40
   Ansible to install python-simplejson using the raw module, which
   then allows you to use everything else.  (That's jumping ahead
   though.)
Michael DeHaan committed
41 42 43 44

Getting Ansible
```````````````

45 46 47
If you are interested in using all the latest features, you may wish to keep up to date
with the development branch of the git checkout.  This also makes it easiest to contribute
back to the project.  
48

49
Instructions for installing from source are below.
Michael DeHaan committed
50

51 52 53 54
Ansible's release cycles are about one month long.  Due to this
short release cycle, any bugs will generally be fixed in the next release versus maintaining 
backports on the stable branch.

55
You may also wish to follow the `Github project <https://github.com/ansible/ansible>`_ if
56
you have a github account.  This is also where we keep the issue tracker for sharing
57
bugs and feature ideas.
Michael DeHaan committed
58

59

60 61 62 63
Running From Checkout
+++++++++++++++++++++

Ansible is trivially easy to run from a checkout, root permissions are not required
64 65 66
to use it:

.. code-block:: bash
67 68 69 70

    $ git clone git://github.com/ansible/ansible.git
    $ cd ./ansible
    $ source ./hacking/env-setup
71

72 73 74
You can optionally specify an inventory file (see :doc:`patterns`) other than /etc/ansible/hosts:

.. code-block:: bash
75

Michael DeHaan committed
76
    $ echo "127.0.0.1" > ~/ansible_hosts
77 78
    $ export ANSIBLE_HOSTS=~/ansible_hosts

79 80
You can read more about the inventory file in later parts of the manual.

81 82 83
Now let's test things:

.. code-block:: bash
84 85

    $ ansible all -m ping --ask-pass
86

Michael DeHaan committed
87

88 89 90
Make Install
++++++++++++

91
If you are not working from a distribution where Ansible is packaged yet, you can install Ansible 
92 93 94
using "make install".  This is done through `python-distutils`:

.. code-block:: bash
Michael DeHaan committed
95 96 97 98 99

    $ git clone git://github.com/ansible/ansible.git
    $ cd ./ansible
    $ sudo make install

100 101 102 103 104 105 106 107 108 109 110 111 112
Via Pip
+++++++

Are you a python developer?

Ansible can be installed via Pip, but when you do so, it will ask to install other dependencies used for
optional modes::

   $ sudo easy_install pip
   $ sudo pip install ansible

Readers that use virtualenv can also install Ansible under virtualenv.  Do not use easy_install to install
ansible directly.
113

Michael DeHaan committed
114 115 116
Via RPM
+++++++

117 118 119 120 121
RPMs for the last Ansible release are available for `EPEL
<http://fedoraproject.org/wiki/EPEL>`_ 6 and currently supported
Fedora distributions.  Ansible itself can manage earlier operating
systems that contain python 2.4 or higher.

122 123
If you are using RHEL or CentOS and have not already done so, `configure EPEL <http://fedoraproject.org/wiki/EPEL>`_
   
124
.. code-block:: bash
125 126 127 128

    # install the epel-release RPM if needed on CentOS, RHEL, or Scientific Linux
    $ sudo yum install ansible

129
You can also use the ``make rpm`` command to build an RPM you can distribute and install. 
130
Make sure you have ``rpm-build``, ``make``, and ``python2-devel`` installed.
131 132

.. code-block:: bash
Michael DeHaan committed
133 134 135 136

    $ git clone git://github.com/ansible/ansible.git
    $ cd ./ansible
    $ make rpm
Michael DeHaan committed
137
    $ sudo rpm -Uvh ~/rpmbuild/ansible-*.noarch.rpm
138

139 140 141 142 143 144 145 146 147 148 149
Python 2.6 EPEL instructions for RHEL and CentOS 5
``````````````````````````````````````````````````

These distributions don't have Python 2.6 by default, but it is easily
installable. 


.. code-block:: bash



150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
Via MacPorts
++++++++++++

An OSX port is available via MacPorts, to install the stable version of
Ansible from MacPorts (this is the recommended way), run:

.. code-block:: bash

    $ sudo port install ansible

If you wish to install the latest build via the MacPorts system from a
git checkout, run:

.. code-block:: bash

    $ git clone git://github.com/ansible/ansible.git
    $ cd ./ansible/packaging/macports
    $ sudo port install

Please refer to the documentation at <http://www.macports.org> for
further information on using Portfiles with MacPorts.

172

173 174
Debian, Gentoo, Arch, Others
++++++++++++++++++++++++++++
175

Michael DeHaan committed
176
Ubuntu builds are available `in a PPA here <https://launchpad.net/~rquillo/+archive/ansible>`_
177

178
Debian/Ubuntu package recipes can also be built from the source checkout, run:
179

180 181 182
.. code-block:: bash

    $ make debian
183

Michael DeHaan committed
184 185
Gentoo eBuilds are available `on github here <https://github.com/uu/ubuilds>`_

186
An Arch PKGBUILD is available on `AUR <https://aur.archlinux.org/packages.php?ID=58621>`_
187 188 189
If you have python3 installed on Arch, you probably want to symlink python to python2:

.. code-block:: bash
190

191
    $ sudo ln -sf /usr/bin/python2 /usr/bin/python
192

193
If you would like to package Ansible for Homebrew, BSD, or others,
194
please stop by the mailing list and say hi!
195

196 197 198 199

Tagged Releases
+++++++++++++++

200
Tarballs of releases are available on the ansible.cc page.
201

202 203 204
* `Ansible/downloads <https://ansible.cc/releases>`_

These releases are also tagged in the git repository with the release version.
205

206 207 208 209 210 211 212
Choosing Between Paramiko and Native SSH
````````````````````````````````````````

By default, ansible uses paramiko to talk to managed nodes over SSH.  Paramiko is fast, works
very transparently, requires no configuration, and is a good choice for most users.
However, it does not support some advanced SSH features that folks will want to use.

213 214 215 216 217 218
.. versionadded:: 0.5

If you want to leverage more advanced SSH features (such as Kerberized
SSH or jump hosts), pass the flag "--connection=ssh" to any ansible
command, or set the ANSIBLE_TRANSPORT environment variable to
'ssh'. This will cause Ansible to use openssh tools instead.
219 220 221 222 223 224 225

If ANSIBLE_SSH_ARGS are not set, ansible will try to use some sensible ControlMaster options
by default.  You are free to override this environment variable, but should still pass ControlMaster
options to ensure performance of this transport.  With ControlMaster in use, both transports
are roughly the same speed.  Without CM, the binary ssh transport is signficantly slower.

If none of this makes sense to you, the default paramiko option is probably fine.
Michael DeHaan committed
226

227

Michael DeHaan committed
228 229 230
Your first commands
```````````````````

231 232
Now that you've installed Ansible, it's time to test it.

233
Edit (or create) /etc/ansible/hosts and put one or more remote systems in it, for
234
which you have your SSH key in ``authorized_keys``::
Michael DeHaan committed
235 236 237 238 239

    192.168.1.50
    aserver.example.org
    bserver.example.org

240
Set up SSH agent to avoid retyping passwords:
Michael DeHaan committed
241

242 243 244 245
.. code-block:: bash

    $ ssh-agent bash
    $ ssh-add ~/.ssh/id_rsa
246

247
(Depending on your setup, you may wish to ansible's --private-key option to specify a pem file instead)
248

249
Now ping all your nodes:
250

251
.. code-block:: bash
Michael DeHaan committed
252

253
   $ ansible all -m ping
254

255 256
Ansible will attempt to remote connect to the machines using your current
user name, just like SSH would.  To override the remote user name, just use the '-u' parameter.
257 258

If you would like to access sudo mode, there are also flags to do that:
259

260 261 262 263
.. code-block:: bash

    # as bruce
    $ ansible all -m ping -u bruce
264
    # as bruce, sudoing to root
265
    $ ansible all -m ping -u bruce --sudo 
266
    # as bruce, sudoing to batman
267
    $ ansible all -m ping -u bruce --sudo --sudo-user batman
268

269 270 271
(The sudo implementation is changeable in ansbile's configuration file if you happen to want to use a sudo
replacement.  Flags passed dot sudo can also be set.)

272
Now run a live command on all of your nodes:
273
  
274 275 276
.. code-block:: bash

   $ ansible all -a "/bin/echo hello"
277

278
Congratulations.  You've just contacted your nodes with Ansible.  It's
279
now time to read some of the more real-world :doc:`examples`, and explore
280
what you can do with different modules, as well as the Ansible
281 282 283
:doc:`playbooks` language.  Ansible is not just about running commands, it
also has powerful configuration management and deployment features.  There's more to
explore, but you already have a fully working infrastructure!
Michael DeHaan committed
284

285 286 287

.. seealso::

288 289 290 291
   :doc:`examples`
       Examples of basic commands
   :doc:`playbooks`
       Learning ansible's configuration management language
292 293 294 295
   `Mailing List <http://groups.google.com/group/ansible-project>`_
       Questions? Help? Ideas?  Stop by the list on Google Groups
   `irc.freenode.net <http://irc.freenode.net>`_
       #ansible IRC chat channel
296