<metaproperty="og:description"content="ansible - Ansible is a radically simple IT orchestration engine that makes your applications and systems easier to deploy. Avoid writing scripts or custom code to deploy and update your applications— automate in a language that approaches plain English, using SSH, with no agents to install on remote systems."/>
<metaname="description"content="ansible - Ansible is a radically simple IT orchestration engine that makes your applications and systems easier to deploy. Avoid writing scripts or custom code to deploy and update your applications— automate in a language that approaches plain English, using SSH, with no agents to install on remote systems."/>
<linkhref="https://github.com/ansible/ansible/commits/release1.4.4.atom"rel="alternate"title="Recent Commits to ansible:release1.4.4"type="application/atom+xml"/>
<ahref="/ansible/ansible/commit/45dde5b3e221e785d64c7b750ea1ec985d17caf9"class="message"data-pjax="true"title="Update files for 1.4.4 release.">Update files for 1.4.4 release.</a>
<aname="ansible-changes-by-release"class="anchor"href="#ansible-changes-by-release"><spanclass="octicon octicon-link"></span></a>Ansible Changes By Release</h1>
<p>1.4.4 "Could This Be Magic" - January 06, 2014</p>
<ul>
<li>Fixed issue with newer versions of pip not having --use-mirrors</li>
</ul><p>1.4.3 "Could This Be Magic?" - December 20, 2013</p>
<ul>
<li>Fixed role_path parsing from ansible.cfg</li>
<li>Fixed default role templates</li>
</ul><p>1.4.2 "Could This Be Magic" - December 18, 2013</p>
<ul>
<li>Fixed a few bugs related to unicode</li>
<li>Fixed errors in the ssh connection method with large data returns</li>
<li>Miscellaneous fixes for a few modules</li>
<li>Add the ansible-galaxy command</li>
</ul><p>1.4.1 "Could This Be Magic" - November 27, 2013</p>
<ul>
<li>Misc fix updates</li>
</ul><p>1.4 "Could This Be Magic" - November 21, 2013</p>
<p>Highlighted new features:</p>
<ul>
<li>Added do-until feature, which can be used to retry a failed task a specified number of times with a delay in-between the retries.</li>
<li>Added failed_when option for tasks, which can be used to specify logical statements that make it easier to determine when a task has failed, or to make it easier to ignore certain non-zero return codes for some commands.</li>
<li>Added the "subelement" lookup plugin, which allows iteration of the keys of a dictionary or items in a list.</li>
<li>Added the capability to use either paramiko or ssh for the inital setup connection of an accelerated playbook.</li>
<li>Automatically provide advice on common parser errors users encounter.</li>
<li>Deprecation warnings are now shown for legacy features: when_integer/etc, only_if, include+with_items, etc. Can be disabled in ansible.cfg</li>
<li>The system will now provide helpful tips around possible YAML syntax errors increasing ease of use for new users.</li>
<li>warnings are now shown for using {{ foo }} in loops and conditionals, and suggest leaving the variable expressions bare as per docs.</li>
<li>The roles search path is now configurable in ansible.cfg. 'roles_path' in the config setting.</li>
<li>Includes with parameters can now be done like roles for consistency: - { include: song.yml, year:1984, song:'jump' }</li>
<li>The name of each role is now shown before each task if roles are being used</li>
<li>Adds a "var=" option to the debug module for debugging variable data. "debug: var=hostvars['hostname']" and "debug: var=foo" are all valid syntax.</li>
<li>Variables in {{ format }} can be used as references even if they are structured data</li>
<li>Can force binding of accelerate to ipv6 ports.</li>
<li>the apt module will auto-install python-apt if not present rather than requiring a manual installation</li>
<li>the copy module is now recursive if the local 'src' parameter is a directory.</li>
<li>syntax checks now scan included task and variable files as well as main files</li>
<li>added inventory script for listing FreeBSD jails </li>
<li>added md5 as a Jinja2 filter: {{ path | md5 }}</li>
<li>added a fileglob filter that will return files matching a glob pattern. with_items: "/foo/pattern/*.txt | fileglob"</li>
<li>'changed' filter returns whether a previous step was changed easier. when: registered_result | changed</li>
<li>DOCS NEEDED: 'unique' and 'intersect' filters are added for dealing with lists.</li>
<li>DOCS NEEDED: new lookup plugin added for etcd</li>
<li>a 'func' connection type to help people migrating from func/certmaster.</li>
</ul><p>Misc changes (all module additions/fixes may not listed):</p>
<ul>
<li>(docs pending) New features for accelerate mode: configurable timeouts and a keepalives for long running tasks.</li>
<li>Added a <code>delimiter</code> field to the assemble module.</li>
<li>Added <code>ansible_env</code> to the list of facts returned by the setup module.</li>
<li>Added <code>state=touch</code> to the file module, which functions similarly to the command-line version of <code>touch</code>.</li>
<li>Added a -vvvv level, which will show SSH client debugging information in the event of a failure.</li>
<li>Includes now support the more standard syntax, similar to that of role includes and dependencies. </li>
<li>Changed the <code>user:</code> parameter on plays to <code>remote_user:</code> to prevent confusion with the module of the same name. Still backwards compatible on play parameters.</li>
<li>Added parameter to allow the fetch module to skip the md5 validation step ('validate_md5=false'). This is usefull when fetching files that are actively being written to, such as live log files.</li>
<li>Inventory hosts are used in the order they appear in the inventory.</li>
<li>in hosts: foo[2-5] type syntax, the iterators now are zero indexed and the last index is non-inclusive, to match Python standards.</li>
<li>There is now a way for a callback plugin to disable itself. See osx_say example code for an example.</li>
<li>Many bugfixes to modules of all types.</li>
<li>Complex arguments now can be used with async tasks</li>
<li>SSH ControlPath is now configurable in ansible.cfg. There is a limit to the lengths of these paths, see how to shorten them in ansible.cfg.</li>
<li>md5sum support on AIX with csum.</li>
<li>Extremely large documentation refactor into subchapters</li>
<li>Added 'append_privs' option to the mysql_user module</li>
<li>Can now update (temporarily change) host variables using the "add_host" module for existing hosts.</li>
<li>Fixes for IPv6 addresses in inventory text files</li>
<li>name of executable can be passed to pip/gem etc, for installing under <em>different</em> interpreters</li>
<li>copy of ./hacking/env-setup added for fish users, ./hacking/env-setup.fish</li>
<li>file module more tolerant of non-absolute paths in softlinks.</li>
<li>miscellaneous fixes/upgrades to async polling logic.</li>
<li>conditions on roles now pass to dependent roles</li>
<li>ansible_sudo_pass can be set in a host variable if desired</li>
<li>misc fixes for the pip an easy_install modules</li>
<li>support for running handlers that have parameterized names based on role parameters</li>
<li>added support for compressing MySQL dumps and extracting during import</li>
<li>Boto version compatibility fixes for the EC2 inventory script</li>
<li>in the EC2 inventory script, a group 'EC2' and 'RDS' contains EC2 and RDS hosts.</li>
<li>umask is enforced by the cron module</li>
<li>apt packages that are not-removed and not-upgraded do not count as changes</li>
<li>the assemble module can now use src files from the local server and copy them over dynamically</li>
<li>authorization code has been standardized between Amazon cloud modules</li>
<li>the wait_for module can now also wait for files to exist or a regex string to exist in a file</li>
<li>leading ranges are now allowed in ranged hostname patterns, ex: [000-250].example.com</li>
<li>pager support added to ansible-doc (so it will auto-invoke less, etc)</li>
<li>misc fixes to the cron module</li>
<li>get_url module now understands content-disposition headers for deciding filenames</li>
<li>it is possible to have subdirectories in between group_vars/ and host_vars/ and the final filename, like host_vars/rack42/asdf for the variables for host 'asdf'. The intermediate directories are ignored, and do not put a file in there twice.</li>
</ul><p>1.3.4 "Top of the World" (reprise) - October 29, 2013</p>
<ul>
<li>Fixed a bug in the copy module, where a filename containing the string "raw" was handled incorrectly</li>
<li>Fixed a bug in accelerate mode, where copying a zero-length file out would fail</li>
</ul><p>1.3.3 "Top of the World" (reprise) - October 9, 2013</p>
<p>Additional fixes for accelerate mode.</p>
<p>1.3.2 "Top of the World" (reprise) - September 19th, 2013</p>
<p>Multiple accelerate mode fixes:</p>
<ul>
<li>Make packet reception less greedy, so multiple frames of data are not consumed by one call.</li>
<li>Adding two timeout values (one for connection and one for data reception timeout).</li>
<li>Added keepalive packets, so async mode is no longer required for long-running tasks.</li>
<li>Modified accelerate daemon to use the verbose logging level of the ansible command that started it.</li>
<li>Fixed bug where accelerate would not work in check-mode.</li>
<li>Added a -vvvv level, which will show SSH client debugging information in the event of a failure.</li>
<li>Fixed bug in apt_repository module where the repository cache was not being updated.</li>
<li>Fixed bug where "too many open files" errors would be encountered due to pseudo TTY's not being closed properly.</li>
</ul><p>1.3.1 "Top of the World" (reprise) - September 16th, 2013</p>
<p>Fixing a bug in accelerate mode whereby the gather_facts step would always be run via sudo regardless of the play settings.</p>
<p>1.3 "Top of the World" - September 13th, 2013</p>
<p>Highlighted new features:</p>
<ul>
<li>accelerated mode: An enhanced fireball mode that requires zero bootstrapping and fewer requirements plus adds capabilities like sudo commands.</li>
<li>role defaults: Allows roles to define a set of variables at the lowest priority. These variables can be overridden by any other variable.</li>
<li>new /etc/ansible/facts.d allows JSON or INI-style facts to be provided from the remote node, and supports executable fact programs in this dir. Files must end in *.fact.</li>
<li>added the ability to make undefined template variables raise errors (see ansible.cfg)</li>
<li>(DOCS PENDING) sudo: True/False and sudo_user: True/False can be set at include and role level</li>
<li>added changed_when: (expression) which allows overriding whether a result is changed or not and can work with registered expressions</li>
<li>--extra-vars can now take a file as input, e.g., "-e @filename" and can also be formatted as YAML</li>
<li>external inventory scripts may now return host variables in one pass, which allows them to be much more efficient for large numbers of hosts</li>
<li>if --forks exceeds the numbers of hosts, it will be automatically reduced. Set forks to 0 and you get "as many forks as I have hosts" out of the box.</li>
<li>enabled error_on_undefined_vars by default, which will make errors in playbooks more obvious</li>
<li>role dependencies -- one role can now pull in another, with parameters of its own.</li>
<li>added the ability to have tasks execute even during a check run (always_run).</li>
<li>added the ability to set the maximum failure percentage for a group of hosts.</li>
</ul><p>New modules:</p>
<ul>
<li>notifications: datadog_event -- send data to datadog</li>
<li>cloud: digital_ocean -- module for DigitalOcean provisioning that also includes inventory support</li>
<li>packaging: rpm_key -- adds or removes RPM signing keys</li>
<li>packaging: apt_repository -- rewritten to remove dependencies </li>
<li>monitoring: boundary_meter -- adds or removes boundary.com meters</li>
<li>net_infrastructure: dnsmadeeasy - manipulate DNS Made Easy records</li>
<li>files: xattr -- manages extended attributes on files</li>
</ul><p>Misc changes:</p>
<ul>
<li>return 3 when there are hosts that were unreachable during a run</li>
<li>the yum module now supports wildcard values for the enablerepo argument</li>
<li>added an inventory script to pull host information from Zabbix</li>
<li>async mode no longer allows with_* lookup plugins due to incompatibilities</li>
<li>Added OpenRC support (Gentoo) to the service module</li>
<li>ansible_ssh_user value is available to templates</li>
<li>added placement_group parameter to ec2 module</li>
<li>new sha256sum parameter added to get_url module for checksum validation</li>
<li>search for mount binaries in system path and sbin vs assuming path</li>
<li>allowed inventory file to be read from a pipe</li>
<li>added Solaris distribution facts</li>
<li>fixed bug along error path in quantum_network module</li>
<li>user password update mode is controllable in user module now (at creation vs. every time)</li>
<li>added check mode support to the OpenBSD package module</li>
<li>Fix for MySQL 5.6 compatibility</li>
<li>HP UX virtualization facts</li>
<li>fixed some executable bits in git</li>
<li>made rhn_register module compatible with EL5</li>
<li>fix for setup module epoch time on Solaris</li>
<li>sudo_user is now expanded later, allowing it to be set at inventory scope</li>
<li>mongodb_user module changed to also support MongoDB 2.2</li>
<li>new state=hard option added to the file module for hardlinks vs softlinks</li>
<li>fixes to apt module purging option behavior</li>
<li>fixes for device facts with multiple PCI domains</li>
<li>added "with_inventory_hostnames" lookup plugin, which can take a pattern and loop over hostnames matching the pattern and is great for use with delegate_to and so on</li>
<li>ec2 module supports adding to multiple security groups</li>
<li>cloudformation module includes fixes for the error path, and the 'wait_for' parameter was removed</li>
<li>added --only-if-changed to ansible-pull, which runs only if the repo has changes (not default)</li>
<li>added 'mandatory', a Jinja2 filter that checks if a variable is defined: {{ foo|mandatory }}</li>
<li>added support for multiple size formats to the lvol module</li>
<li>timing reporting on wait_for module now includes the delay time</li>
<li>IRC module can now send a server password</li>
<li>"~" now expanded on each component of configured plugin paths</li>
<li>fix for easy_install module when dealing with virtualenv</li>
<li>rackspace module now explicitly indicates rackspace vs vanilla openstack</li>
<li>add_host module does not report changed=True any longer</li>
<li>explanatory error message when using fireball with sudo has been improved</li>
<li>git module now automatically pulls down git submodules</li>
<li>negated patterns do not require "all:!foo", you can just say "!foo" now to select all not foos</li>
<li>fix for Debian services always reporting changed when toggling enablement bit</li>
<li>roles files now tolerate files named 'main.yaml' and 'main' in addition to main.yml</li>
<li>some help cleanup to command line flags on scripts</li>
<li>force option reinstated for file module so it can create symlinks to non-existent files, etc.</li>
<li>added termination support to ec2 module</li>
<li>--ask-sudo-pass or --sudo-user does not enable all options to use sudo in ansible-playbook</li>
<li>include/role conditionals are added ahead of task conditionals so they can short circuit properly</li>
<li>added pipes.quote in various places so paths with spaces are better tolerated</li>
<li>error handling while executing Jinja2 filters has been improved</li>
<li>upgrades to atomic replacement logic when copying files across partitions/etc</li>
<li>mysql user module can try to login before requiring explicit password</li>
<li>various additional options added to supervisorctl module</li>
<li>only add non unique parameter on group creation when required</li>
<li>allow rabbitmq_plugin to specify a non-standard RabbitMQ path</li>
<li>authentication fixes to keystone_user module</li>
<li>added IAM role support to EC2 module</li>
<li>fixes for OpenBSD package module to avoid shell expansion</li>
<li>git module upgrades to allow --depth and --version to be used together</li>
<li>new lookup plugin, "with_flattened"</li>
<li>extra vars (-e) variables can be used in playbook include paths</li>
<li>improved reporting for invalid sudo passwords</li>
<li>improved reporting for inability to find a suitable tmp location</li>
<li>require libselinux-python to perform file operations if SELinux is operational</li>
<li>ZFS module fixes for byte display constants and handling paths with spaces</li>
<li>setup module more tolerant of gathering facts against things it does not have permission to read</li>
<li>can specify name=* state=latest to update all yum modules</li>
<li>major speedups to the yum module for default cases</li>
<li>ec2_facts module will now run in check mode</li>
<li>sleep option on service module for sleeping between stop/restart</li>
<li>fix for IPv6 facts on BSD</li>
<li>added Jinja2 filters: skipped, whether a result was skipped</li>
<li>added Jinja2 filters: quote, quotes a string if it needs to be quoted</li>
<li>allow force=yes to affect apt upgrades</li>
<li>fix for saving conditionals in variable names</li>
<li>support for multiple host ranges in INI inventory, e.g., db[01:10:3]node-[01:10]</li>
<li>fixes/improvements to cron module</li>
<li>add user_install=no option to gem module to install gems system wide</li>
<li>added raw=yes to allow copying without python on remote machines</li>
<li>added with_indexed_items lookup plugin</li>
<li>Linode inventory plugin now significantly faster</li>
<li>added recurse=yes parameter to pacman module for package removal</li>
<li>apt_key module can now target specific keyrings (keyring=filename)</li>
<li>ec2 module change reporting improved</li>
<li>hg module now expands user paths (~)</li>
<li>SSH connection type known host checking now can process hashed known_host files</li>
<li>lvg module now checks for executables in more correct locations</li>
<li>copy module now works correctly with sudo_user</li>
<li>region parameter added to ec2_elb module</li>
<li>better default XMPP module message types</li>
<li>fixed conditional tests against raw booleans</li>
<li>mysql module grant removal is now smarter</li>
<li>apt-remove is now forced to be non-interactive</li>
<li>support ; comments in INI file module</li>
<li>fixes to callbacks WRT async output (fire and forget tasks now trigger callbacks!)</li>
<li>folder support for s3 module</li>
<li>added new example inventory plugin for Red Hat OpenShift</li>
<li>and other misc. bugfixes</li>
</ul><p>1.2.3 "Hear About It Later" (reprise) -- Aug 21, 2013</p>
<ul>
<li>Local security fixes for predictable file locations for ControlPersist and retry file paths on shared machines
on operating systems without kernel symlink/hardlink protections.</li>
</ul><p>1.2.2 "Hear About It Later" (reprise) -- July 4, 2013</p>
<ul>
<li>Added a configuration file option [paramiko_connection] record_host_keys which allows the code that paramiko uses
<li>setup module now tolerant of OpenVZ interfaces</li>
<li>check mode reporting improved for files and directories</li>
<li>doc system now reports on module requirements</li>
<li>group_by module can now also make use of globally scoped variables</li>
<li>localhost and 127.0.0.1 are now fuzzy matched in inventory (are now more or less interchangeable)</li>
<li>AIX improvements/fixes for users, groups, facts</li>
<li>lineinfile now does atomic file replacements</li>
<li>fix to not pass PasswordAuthentication=no in the config file unneccessarily for SSH connection type</li>
<li>for for authorized_key on Debian Squeeze</li>
<li>fixes for apt_repository module reporting changed incorrectly on certain repository types</li>
<li>allow the virtualenv argument to the pip module to be a pathname</li>
<li>service pattern argument now correctly read for BSD services</li>
<li>fetch location can now be controlled more directly via the 'flat' parameter.</li>
<li>added basename and dirname as Jinja2 filters available to all templates</li>
<li>pip works better when sudoing from unpriveledged users</li>
<li>fix for user creation with groups specification reporting 'changed' incorrectly in some cases</li>
<li>fix for some unicode encoding errors in outputing some data in verbose mode</li>
<li>improved FreeBSD, NetBSD and Solaris facts</li>
<li>debug module always outputs data without having to specify -v</li>
<li>fix for sysctl module creating new keys (must specify checks=none)</li>
<li>NetBSD and OpenBSD support for the user and groups modules</li>
<li>Add encrypted password support to password lookup</li>
</ul><p>1.1 "Mean Street" -- 4/2/2013</p>
<p>Core Features</p>
<ul>
<li>added --check option for "dry run" mode</li>
<li>added --diff option to show how templates or copied files change, or might change</li>
<li>--list-tasks for the playbook will list the tasks without running them</li>
<li>able to set the environment by setting "environment:" as a dictionary on any task (go proxy support!)</li>
<li>added ansible_ssh_user and ansible_ssh_pass for per-host/group username and password</li>
<li>jinja2 extensions can now be loaded from the config file</li>
<li>support for complex arguments to modules (within reason)</li>
<li>can specify ansible_connection=X to define the connection type in inventory variables</li>
<li>a new chroot connection type</li>
<li>module common code now has basic type checking (and casting) capability</li>
<li>module common now supports a 'no_log' attribute to mark a field as not to be syslogged</li>
<li>inventory can now point to a directory containing multiple scripts/hosts files, if using this, put group_vars/host_vars directories inside this directory</li>
<li>added configurable crypt scheme for 'vars_prompt'</li>
<li>(internals) template engine specifications to use template_ds everywhere</li>
<li>better error message when your host file can not be found</li>
<li>end of line comments now work in the inventory file</li>
<li>directory destinations now work better with remote md5 code</li>
<li>lookup plugin macros like $FILE and $ENV now work without returning arrays in variable definitions/playbooks</li>
<li>uses yaml.safe_load everywhere</li>
<li>able to add EXAMPLES to documentation via EXAMPLES docstring, rather than just in main documentation YAML</li>
<li>can set ANSIBLE_COW_SELECTION to pick other cowsay types (including random)</li>
<li>to_nice_yaml and to_nice_json available as Jinja2 filters that indent and sort</li>
<li>cowsay able to run out of macports (very important!)</li>
<li>improved logging for fireball mode</li>
<li>nicer error message when talking to an older system that needs a JSON module installed</li>
<li>'magic' variable 'inventory_dir' now gives path to inventory file</li>
<li>'magic' variable 'vars' works like 'hostvars' but gives global scope variables, useful for debugging in templates mostly</li>
<li>conditionals can be used on plugins like add_host</li>
<li>developers: all callbacks now have access to a ".runner" and ".playbook", ".play", and ".task" object (use getattr, they may not always be set!)</li>
</ul><p>Facts:</p>
<ul>
<li>block device facts for the setup module</li>
<li>facts for AIX</li>
<li>fact detection for OS type on Amazon Linux</li>
<li>fix for Xen dom0/domU detection in default facts</li>
<li>'ansible_domain' fact now available (ex value: example.com)</li>
<li>configured remote temp file location is now always used even for root</li>
<li>'register'-ed variables are not recorded for skipped hosts (for example, using only_if/when)</li>
<li>duplicate host records for the same host can no longer result when a host is listed in multiple groups</li>
<li>ansible-pull now passes --limit to prevent running on multiple hosts when used with generic playbooks</li>
<li>remote md5sum check fixes for Solaris 10</li>
<li>ability to configure syslog facility used by remote module calls</li>
<li>in templating, stray '$' characters are now handled more correctly</li>
</ul><p>Playbook changes:</p>
<ul>
<li>relative paths now work for 'first_available_file'</li>
<li>various templating engine fixes</li>
<li>'when' is an easier form of only if</li>
<li>--list-hosts on the playbook command now supports multiple playbooks on the same command line</li>
<li>playbook includes can now be parameterized</li>
</ul><p>Module additions:</p>
<ul>
<li>(addhost) new module for adding a temporary host record (used for creating new guests)</li>
<li>(group_by) module allows partitioning hosts based on group data</li>
<li>(ec2) new module for creating ec2 hosts</li>
<li>(script) added 'script' module for pushing and running self-deleting remote scripts</li>
<li>(svr4pkg) solaris svr4pkg module</li>
</ul><p>Module changes:</p>
<ul>
<li>(authorized key) module uses temp file now to prevent failure on full disk</li>
<li>(fetch) now uses the 'slurp' internal code to work as you would expect under sudo'ed accounts</li>
<li>(fetch) internal usage of md5 sums fixed for BSD</li>
<li>(get_url) thirsty is no longer required for directory destinations</li>
<li>(git) various git module improvements/tweaks</li>
<li>(group) now subclassed for various platforms, includes SunOS support</li>
<li>(lineinfile) create= option on lineinfile can create the file when it does not exist</li>
<li>(mysql_db) module takes new grant options</li>
<li>(postgresql_db) module now takes role_attr_flags</li>
<li>(service) further upgrades to service module service status reporting</li>
<li>(service) tweaks to get service module to play nice with BSD style service systems (rc.conf)</li>
<li>(service) possible to pass additional arguments to services</li>
<li>(shell) and command module now take an 'executable=' flag for specifying an alternate shell than /bin/sh</li>
<li>(user) ability to create SSH keys for users when using user module to create users</li>
<li>(user) atomic replacement of files preserves permissions of original file</li>
<li>(user) module can create SSH keys</li>
<li>(user) module now does Solaris and BSD</li>
<li>(yum) module takes enablerepo= and disablerepo=</li>
<li>(yum) misc yum module fixing for various corner cases</li>
</ul><p>Plugin changes:</p>
<ul>
<li>EC2 inventory script now produces nicer failure message if AWS is down (or similar)</li>
<li>plugin loading code now more streamlined</li>
<li>lookup plugins for DNS text records, environment variables, and redis</li>
<li>added a template lookup plugin $TEMPLATE('filename.j2')</li>
<li>various tweaks to the EC2 inventory plugin</li>
<li>jinja2 filters are now pluggable so it's easy to write your own (to_json/etc, are now impl. as such)</li>
</ul><p>0.8 "Cathedral" -- Oct 19, 2012</p>
<p>Highlighted Core Changes:</p>
<ul>
<li>fireball mode -- ansible can bootstrap a ephemeral 0mq (zeromq) daemon that runs as a given user and expires after X period of time. It is very fast.</li>
<li>playbooks with errors now return 2 on failure. 1 indicates a more fatal syntax error. Similar for /usr/bin/ansible</li>
<li>server side action code (template, etc) are now fully pluggable</li>
<li>ability to write lookup plugins, like the code powering "with_fileglob" (see below)</li>
</ul><p>Other Core Changes:</p>
<ul>
<li>ansible config file can also go in 'ansible.cfg' in cwd in addition to ~/.ansible.cfg and /etc/ansible/ansible.cfg</li>
<li>fix for inventory hosts at API level when hosts spec is a list and not a colon delimited string</li>
<li>ansible-pull example now sets up logrotate for the ansible-pull cron job log</li>
<li>negative host matching (!hosts) fixed for external inventory script usage</li>
<li>internals: os.executable check replaced with utils function so it plays nice on AIX</li>
<li>Debian packaging now includes ansible-pull manpage</li>
<li>magic variable 'ansible_ssh_host' can override the hostname (great for usage with tunnels)</li>
<li>date command usage in build scripts fixed for OS X</li>
<li>don't use SSH agent with paramiko if a password is specified</li>
<li>make output be cleaner on multi-line command/shell errors</li>
<li>/usr/bin/ansible now prints things when tasks are skipped, like when creates= is used with -m command and /usr/bin/ansible</li>
<li>when trying to async a module that is not a 'normal' asyncable module, ansible will now let you know</li>
<li>ability to access inventory variables via 'hostvars' for hosts not yet included in any play, using on demand lookups</li>
<li>merged ansible-plugins, ansible-resources, and ansible-docs into the main project</li>
<li>you can set ANSIBLE_NOCOWS=1 if you want to disable cowsay if it is installed. Though no one should ever want to do this! Cows are great!</li>
<li>you can set ANSIBLE_FORCECOLOR=1 to force color mode even when running without a TTY</li>
<li>fatal errors are now properly colored red.</li>
<li>skipped messages are now cyan, to differentiate them from unchanged messages.</li>
<li>extensive documentation upgrades</li>
<li>delegate_action to localhost (aka local_action) will always use the local connection type</li>
</ul><p>Highlighted playbook changes:</p>
<ul>
<li>is_set is available for use inside of an only_if expression: is_set('ansible_eth0'). We intend to further upgrade this with a 'when'
keyword providing better options to 'only_if' in the next release. Also is_unset('ansible_eth0')</li>
<li>playbooks can import playbooks in other directories and then be able to import tasks relative to them</li>
<li>FILE($path) now allows access of contents of file in a path, very good for use with SSH keys</li>
<li>similarly PIPE($command) will run a local command and return the results of executing this command</li>
<li>if all hosts in a play fail, stop the playbook, rather than letting the console log spool on by</li>
<li>only_if using register variables that are booleans now works in a boolean way like you'd expect</li>
<li>task includes now work with with_items (such as: include: path/to/wordpress.yml user=$item)</li>
<li>when using a $list variable with $var or ${var} syntax it will automatically join with commas</li>
<li>setup is not run more than once when we know it is has already been run in a play that included another play, etc</li>
<li>can set/override sudo and sudo_user on individual tasks in a play, defaults to what is set in the play if not present</li>
<li>ability to use with_fileglob to iterate over local file patterns</li>
<li>templates now use Jinja2's 'trim_blocks=True' to avoid stray newlines, small changes to templates may
be required in rare cases.</li>
</ul><p>Other playbook changes:</p>
<ul>
<li>to_yaml and from_yaml are available as Jinja2 filters</li>
<li>$group and $group_names are now accessible in with_items</li>
<li>where 'stdout' is provided a new 'stdout_lines' variable (type == list) is now generated and usable with with_items</li>
<li>when local_action is used the transport is automatically overridden to the local type</li>
<li>output on failed playbook commands is now nicely split for stderr/stdout and syntax errors</li>
<li>if local_action is not used and delegate_to was 127.0.0.1 or localhost, use local connection regardless</li>
<li>when running a playbook, and the statement has changed, prints 'changed:' now versus 'ok:' so it is obvious without colored mode</li>
<li>variables now usable within vars_prompt (just not host/group vars)</li>
<li>setup facts are now retained across plays (dictionary just gets updated as needed)</li>
<li>--sudo-user now works with --extra-vars</li>
<li>fix for multi_line strings with only_if</li>
</ul><p>New Modules:</p>
<ul>
<li>ini_file module for manipulating INI files</li>
<li>a module for adding entries to the main crontab (though you may still wish to just drop template files into cron.d)</li>
<li>debug module can be used for outputing messages without using 'shell echo'</li>
<li>a fail module is now available for causing errors, you might want to use it with only_if to fail in certain conditions</li>
</ul><p>Other module Changes, Upgrades, and Fixes:</p>
<ul>
<li>removes= exists on command just like creates=</li>
<li>postgresql modules now take an optional port= parameter</li>
<li>/proc/cmdline info is now available in Linux facts</li>
<li>public host key detection for OS X</li>
<li>lineinfile module now uses 'search' not exact 'match' in regexes, making it much more intuitive and not needing regex syntax most of the time</li>
<li>added force=yes|no (default no) option for file module, which allows transition between files to directories and so on</li>
<li>additional facts for SunOS virtualization</li>
<li>copy module is now atomic when used across volumes</li>
<li>url_get module now returns 'dest' with the location of the file saved</li>
<li>fix for yum module when using local RPMs vs downloading</li>
<li>cleaner error messages with copy if destination directory does not exist</li>
<li>setup module now still works if PATH is not set</li>
<li>service module status now correct for services with 'subsys locked' status</li>
<li>misc fixes/upgrades to the wait_for module</li>
<li>git module now expands any "~" in provided destination paths</li>
<li>ignore stop error code failure for service module with state=restarted, always try to start</li>
<li>inline documentation for modules allows documentation source to built without pull requests to the ansible-docs project, among other things</li>
<li>variable '$ansible_managed' is now great to include at the top of your templates and includes useful information and a warning that it will be replaced</li>
<li>"~" now expanded in command module when using creates/removes</li>
<li>mysql module can do dumps and imports</li>
<li>selinux policy is only required if setting to not disabled</li>
<li>various fixes for yum module when working with packages not in any present repo</li>
</ul><p>0.7 "Panama" -- Sept 6 2012</p>
<p>Module changes:</p>
<ul>
<li>login_unix_socket option for mysql user and database modules (see PR #781 for doc notes)</li>