ansible/rst/gettingstarted.rst

248 lines
7.5 KiB
ReStructuredText
Raw Normal View History

2012-05-13 17:00:02 +02:00
Getting Started
===============
2012-03-07 17:35:18 +01:00
2012-08-28 21:41:10 +02:00
.. contents::
:depth: 2
:backlinks: top
2012-03-08 19:36:47 +01:00
Requirements
````````````
2012-03-09 04:50:00 +01:00
Requirements for Ansible are extremely minimal.
2012-03-08 19:36:47 +01:00
Ansible is written for Python 2.6. If you are running Python 2.5 on an "Enterprise Linux" variant,
your distribution can easily install 2.6 (see instructions in the next section). Newer versions
of Linux and OS X should already have 2.6.
In additon to Python 2.6, you will want the following packages:
2012-03-08 19:36:47 +01:00
* ``paramiko``
* ``PyYAML``
* ``python-jinja2``
2012-03-08 19:36:47 +01:00
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:
2012-03-08 19:36:47 +01:00
* ``python-simplejson``
2012-03-08 19:36:47 +01:00
2012-08-13 20:51:36 +02:00
.. note::
Ansible's "raw" module (for executing commands in a quick and dirty
way) and the copy module -- some of the most basic features in
ansible -- don't even need that. So technically, you can use
Ansible to install python-simplejson using the raw module, which
then allows you to use everything else. (That's jumping ahead
though.)
2012-03-08 19:36:47 +01:00
Python 2.6 EPEL instructions for RHEL and CentOS 5
``````````````````````````````````````````````````
2012-03-08 19:36:47 +01:00
2012-08-13 20:51:36 +02:00
These distributions don't have Python 2.6 by default, but it is easily
installable. If you have not already done so, `configure EPEL
<http://fedoraproject.org/wiki/EPEL>`_
.. code-block:: bash
2012-04-13 04:23:16 +02:00
2012-08-13 20:51:36 +02:00
$ yum install python26 python26-PyYAML python26-paramiko python26-jinja2
2012-04-13 04:23:16 +02:00
2012-03-08 19:36:47 +01:00
Getting Ansible
```````````````
2012-05-10 06:58:27 +02:00
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.
Instructions for installing from source are below.
2012-03-08 19:36:47 +01:00
2012-05-10 06:58:27 +02:00
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.
2012-03-18 17:55:18 +01:00
You may also wish to follow the `Github project <https://github.com/ansible/ansible>`_ if
you have a github account. This is also where we keep the issue tracker for sharing
2012-03-18 17:55:18 +01:00
bugs and feature ideas.
2012-03-08 19:36:47 +01:00
2012-05-10 06:58:27 +02:00
Running From Checkout
+++++++++++++++++++++
Ansible is trivially easy to run from a checkout, root permissions are not required
2012-08-13 20:51:36 +02:00
to use it:
.. code-block:: bash
$ git clone git://github.com/ansible/ansible.git
$ cd ./ansible
$ source ./hacking/env-setup
2012-03-18 17:45:23 +01:00
2012-08-13 20:51:36 +02:00
You can optionally specify an inventory file (see :doc:`patterns`) other than /etc/ansible/hosts:
.. code-block:: bash
2012-03-18 17:45:23 +01:00
2012-04-13 03:33:54 +02:00
$ echo "127.0.0.1" > ~/ansible_hosts
$ export ANSIBLE_HOSTS=~/ansible_hosts
2012-08-13 20:51:36 +02:00
Now let's test things:
.. code-block:: bash
2012-03-18 17:45:23 +01:00
$ ansible all -m ping --ask-pass
2012-03-08 19:36:47 +01:00
Make Install
++++++++++++
2012-03-18 17:55:18 +01:00
If you are not working from a distribution where Ansible is packaged yet, you can install Ansible
2012-08-13 20:51:36 +02:00
using "make install". This is done through `python-distutils`:
.. code-block:: bash
2012-03-08 19:36:47 +01:00
$ git clone git://github.com/ansible/ansible.git
$ cd ./ansible
$ sudo make install
2012-03-08 19:36:47 +01:00
Via RPM
+++++++
2012-08-13 20:51:36 +02:00
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.
.. code-block:: bash
2012-05-10 06:58:27 +02:00
# install the epel-release RPM if needed on CentOS, RHEL, or Scientific Linux
$ sudo yum install ansible
2012-08-13 20:51:36 +02:00
You can also use the ``make rpm`` command to build an RPM you can
distribute and install:
.. code-block:: bash
2012-03-08 19:36:47 +01:00
$ git clone git://github.com/ansible/ansible.git
$ cd ./ansible
$ make rpm
2012-08-15 04:21:57 +02:00
$ sudo rpm -Uvh ~/rpmbuild/ansible-*.noarch.rpm
Debian, Gentoo, Arch, Others
++++++++++++++++++++++++++++
2012-03-18 17:55:18 +01:00
2012-08-07 02:53:33 +02:00
Ubuntu builds are available `in a PPA here <https://launchpad.net/~rquillo/+archive/ansible>`_
2012-04-18 01:54:23 +02:00
2012-08-13 20:51:36 +02:00
Debian/Ubuntu package recipes can also be built from the source checkout, run:
2012-05-10 06:58:27 +02:00
2012-08-13 20:51:36 +02:00
.. code-block:: bash
$ make debian
2012-04-18 01:54:23 +02:00
2012-08-07 02:53:33 +02:00
Gentoo eBuilds are available `on github here <https://github.com/uu/ubuilds>`_
An Arch PKGBUILD is available on `AUR <https://aur.archlinux.org/packages.php?ID=58621>`_
2012-08-13 20:51:36 +02:00
If you have python3 installed on Arch, you probably want to symlink python to python2:
.. code-block:: bash
2012-08-13 20:51:36 +02:00
$ sudo ln -sf /usr/bin/python2 /usr/bin/python
2012-04-18 01:54:23 +02:00
If you would like to package Ansible for Homebrew, BSD, or others,
2012-05-10 06:58:27 +02:00
please stop by the mailing list and say hi!
2012-03-18 17:55:18 +01:00
Tagged Releases
+++++++++++++++
Tagged releases are available as tar.gz files from the Ansible github
project page:
* `Ansible/downloads <https://github.com/ansible/ansible/downloads>`_
2012-07-04 23:44:39 +02:00
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.
.. 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.
2012-07-04 23:44:39 +02:00
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.
2012-03-08 19:36:47 +01:00
Your first commands
```````````````````
2012-03-18 17:55:18 +01:00
Now that you've installed Ansible, it's time to test it.
Edit (or create) /etc/ansible/hosts and put one or more remote systems in it, for
2012-03-09 20:39:29 +01:00
which you have your SSH key in ``authorized_keys``::
2012-03-08 19:36:47 +01:00
192.168.1.50
aserver.example.org
bserver.example.org
2012-08-13 20:51:36 +02:00
Set up SSH agent to avoid retyping passwords:
2012-03-08 19:36:47 +01:00
2012-08-13 20:51:36 +02:00
.. code-block:: bash
$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa
2012-03-09 05:05:52 +01:00
2012-07-04 23:44:39 +02:00
(Depending on your setup, you may wish to ansible's --private-key-file option to specify a pem file instead)
2012-08-13 20:51:36 +02:00
Now ping all your nodes:
2012-03-09 05:05:52 +01:00
2012-08-13 20:51:36 +02:00
.. code-block:: bash
2012-03-08 19:36:47 +01:00
2012-08-13 20:51:36 +02:00
$ ansible all -m ping
2012-07-04 23:44:39 +02:00
2012-08-31 05:55:31 +02:00
In Ansible 0.7 and later, ansible will attempt to remote connect to the machines using your current
user name, just like SSH would. In 0.6 and before, this actually defaults to 'root' (we liked the current
user behavior better). To override the remote user name, just use the '-u' parameter.
If you would like to access sudo mode, there are also flags to do that:
2012-07-04 23:44:39 +02:00
2012-08-13 20:51:36 +02:00
.. code-block:: bash
# as bruce
$ ansible all -m ping -u bruce
2012-07-04 23:44:39 +02:00
# as bruce, sudoing to root
2012-08-13 20:51:36 +02:00
$ ansible all -m ping -u bruce --sudo
2012-07-04 23:44:39 +02:00
# as bruce, sudoing to batman
2012-08-13 20:51:36 +02:00
$ ansible all -m ping -u bruce --sudo --sudo-user batman
2012-07-04 23:44:39 +02:00
2012-08-13 20:51:36 +02:00
Now run a live command on all of your nodes:
2012-03-09 05:05:52 +01:00
2012-08-13 20:51:36 +02:00
.. code-block:: bash
$ ansible all -a "/bin/echo hello"
2012-03-09 05:05:52 +01:00
2012-03-09 20:39:29 +01:00
Congratulations. You've just contacted your nodes with Ansible. It's
now time to read some of the more real-world :doc:`examples`, and explore
2012-03-09 20:39:29 +01:00
what you can do with different modules, as well as the Ansible
2012-03-18 17:55:18 +01:00
: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!
2012-03-08 19:36:47 +01:00
2012-03-09 20:39:29 +01:00
.. seealso::
:doc:`examples`
Examples of basic commands
:doc:`playbooks`
Learning ansible's configuration management language
`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