CHANGELOG.md 19.2 KB
Newer Older
Michael DeHaan committed
1 2 3
Ansible Changes By Release
==========================

Michael DeHaan committed
4
0.8 "Cathedral" -- release pending
Michael DeHaan committed
5

Michael DeHaan committed
6
Highlighted Core Changes:
Michael DeHaan committed
7

Michael DeHaan committed
8 9
* 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.
* playbooks with errors now return 2 on failure.  1 indicates a more fatal syntax error.  Similar for /usr/bin/ansible
Michael DeHaan committed
10
* server side action code (template, etc) are now fully pluggable
11
* ability to write lookup plugins, like the code powering "with_fileglob" (see below)
Michael DeHaan committed
12 13 14

Other Core Changes:

Michael DeHaan committed
15 16 17 18 19 20 21 22 23 24 25 26
* ansible config file can also go in '.ansible.cfg' in cwd in addition to ~/.ansible.cfg and /etc/ansible/ansible.cfg
* fix for inventory hosts at API level when hosts spec is a list and not a colon delimited string
* ansible-pull example now sets up logrotate for the ansible-pull cron job log
* negative host matching (!hosts) fixed for external inventory script usage
* internals: os.executable check replaced with utils function so it plays nice on AIX
* Debian packaging now includes ansible-pull manpage
* magic variable 'ansible_ssh_host' can override the hostname (great for usage with tunnels)
* date command usage in build scripts fixed for OS X
* don't use SSH agent with paramiko if a password is specified
* make output be cleaner on multi-line command/shell errors
* /usr/bin/ansible now prints things when tasks are skipped, like when creates= is used with -m command and /usr/bin/ansible
* when trying to async a module that is not a 'normal' asyncable module, ansible will now let you know
Michael DeHaan committed
27 28 29 30 31 32 33
* ability to access inventory variables via 'hostvars' for hosts not yet included in any play, using on demand lookups
* merged ansible-plugins, ansible-resources, and ansible-docs into the main project
* 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!
* you can set ANSIBLE_FORCECOLOR=1 to force color mode even when running without a TTY
* fatal errors are now properly colored red.
* skipped messages are now cyan, to differentiate them from unchanged messages.
* extensive documentation upgrades
Michael DeHaan committed
34

Michael DeHaan committed
35
Highlighted playbook changes:
Michael DeHaan committed
36

Michael DeHaan committed
37 38
* 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')
Michael DeHaan committed
39
* playbooks can import playbooks in other directories and then be able to import tasks relative to them
Michael DeHaan committed
40 41
* FILE($path) now allows access of contents of file in a path, very good for use with SSH keys
* similarly PIPE($command) will run a local command and return the results of executing this command
Michael DeHaan committed
42 43 44 45 46
* if all hosts in a play fail, stop the playbook, rather than letting the console log spool on by
* only_if using register variables that are booleans now works in a boolean way like you'd expect
* task includes now work with with_items (such as: include: path/to/wordpress.yml user=$item)
* when using a $list variable with $var or ${var} syntax it will automatically join with commas
* setup is not run more than once when we know it is has already been run in a play that included another play, etc
Michael DeHaan committed
47
* can set/override sudo and sudo_user on individual tasks in a play, defaults to what is set in the play if not present
48
* ability to use with_fileglob to iterate over local file patterns
Michael DeHaan committed
49 50 51 52 53 54

Other playbook changes:

* to_yaml and from_yaml are available as Jinja2 filters
* $group and $group_names are now accessible in with_items
* where 'stdout' is provided a new 'stdout_lines' variable (type == list) is now generated and usable with with_items
Michael DeHaan committed
55
* when local_action is used the transport is automatically overridden to the local type
Michael DeHaan committed
56 57 58 59
* output on failed playbook commands is now nicely split for stderr/stdout and syntax errors
* if local_action is not used and delegate_to was 127.0.0.1 or localhost, use local connection regardless
* when running a playbook, and the statement has changed, prints 'changed:' now versus 'ok:' so it is obvious without colored mode
* variables now usable within vars_prompt (just not host/group vars)
Michael DeHaan committed
60 61 62 63
* setup facts are now retained across plays (dictionary just gets updated as needed)
* --sudo-user now works with --extra-vars
* fix for multi_line strings with only_if

Michael DeHaan committed
64 65 66 67 68 69 70 71 72 73
New Modules:

* ini_file module for manipulating INI files
* new LSB facts (release, distro, etc)
* pause module -- (pause seconds=10) (pause minutes=1) (pause prompt=foo) -- it's an action plugin
* a module for adding entries to the main crontab (though you may still wish to just drop template files into cron.d)
* debug module can be used for outputing messages without using 'shell echo'
* a fail module is now available for causing errors, you might want to use it with only_if to fail in certain conditions

Other module Changes, Upgrades, and Fixes:
Michael DeHaan committed
74 75 76 77 78 79 80 81 82 83 84 85

* removes= exists on command just like creates=
* postgresql modules now take an optional port= parameter
* /proc/cmdline info is now available in Linux facts
* public host key detection for OS X
* lineinfile module now uses 'search' not exact 'match' in regexes, making it much more intuitive and not needing regex syntax most of the time
* added force=yes|no (default no) option for file module, which allows transition between files to directories and so on
* additional facts for SunOS virtualization
* copy module is now atomic when used across volumes
* url_get module now returns 'dest' with the location of the file saved
* fix for yum module when using local RPMs vs downloading
* cleaner error messages with copy if destination directory does not exist
Michael DeHaan committed
86 87 88 89
* setup module now still works if PATH is not set
* service module status now correct for services with 'subsys locked' status
* misc fixes/upgrades to the wait_for module
* git module now expands any "~" in provided destination paths
Michael DeHaan committed
90
* ignore stop error code failure for service module with state=restarted, always try to start
Michael DeHaan committed
91
* inline documentation for modules allows documentation source to built without pull requests to the ansible-docs project, among other things
Michael DeHaan committed
92 93
* 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
* "~" now expanded in command module when using creates/removes
Michael DeHaan committed
94
* mysql module can do dumps and imports
95

Michael DeHaan committed
96
0.7 "Panama" -- Sept 6 2012
97 98

Module changes:
Michael DeHaan committed
99

Michael DeHaan committed
100
* login_unix_socket option for mysql user and database modules (see PR #781 for doc notes)
101 102 103 104
* new modules -- pip, easy_install, apt_repository, supervisorctl
* error handling for setup module when SELinux is in a weird state
* misc yum module fixes
* better changed=True/False detection in user module on older Linux distros
105
* nicer errors from modules when arguments are not key=value
Michael DeHaan committed
106
* backup option on copy (backup=yes), as well as template, assemble, and lineinfile
Michael DeHaan committed
107 108
* file module will not recurse on directory properties
* yum module now workable without having repoquery installed, but doesn't support comparisons or list= if so
109 110 111 112 113
* setup module now detects interfaces with aliases
* better handling of VM guest type detection in setup module
* new module boilerplate code to check for mutually required arguments, arguments required together, exclusive args
* add pattern= as a paramter to the service module (for init scripts that don't do status, or do poor status)
* various fixes to mysql & postresql modules
114
* added a thirsty= option (boolean, default no) to the get_url module to decide to download the file every time or not
Michael DeHaan committed
115 116 117 118 119 120 121 122 123 124
* added a wait_for module to poll for ports being open
* added a nagios module for controlling outage windows and alert statuses
* added a seboolean module for getsebool/setsebool type operations
* added a selinux module for controlling overall SELinux policy
* added a subversion module
* added lineinfile for adding and removing lines from basic files
* added facts for ARM-based CPUs
* support for systemd in the service module
* git moduleforce reset behavior is now controllable
* file module can now operate on special files (block devices, etc)
125 126 127 128 129 130 131 132

Core changes:

* ansible --version will now give branch/SHA information if running from git
* better sudo permissions when encountering different umasks
* when using paramiko and SFTP is not accessible, do not traceback, but return a nice human readable msg
* use -vvv for extreme debug levels. -v gives more playbook output as before
* -vv shows module arguments to all module calls (and maybe some other things later)
Michael DeHaan committed
133
* don not pass "--" to sudo to work on older EL5
Michael DeHaan committed
134 135
* make remote_md5 internal function work with non-bash shells
* allow user to be passed in via --extra-vars (regression)
136
* add --limit option, which can be used to further confine the pattern given in ansible-playbooks
137
* adds ranged patterns like dbservers[0-49] for usage with patterns or --limit
Michael DeHaan committed
138
* -u and user: defaults to current user, rather than root, override as before
Michael DeHaan committed
139
* /etc/ansible/ansible.cfg and ~/ansible.cfg now available to set default values and other things
140 141
* (developers) ANSIBLE_KEEP_REMOTE_FILES=1 can be used in debugging (envrionment variable)
* (developers) connection types are now plugins
Michael DeHaan committed
142 143 144 145
* (developers) callbacks can now be extended via plugins
* added FreeBSD ports packaging scripts
* check for terminal properties prior to engaging color modes
* explicitly disable password auth with -c ssh, as it is not used anyway
146 147 148 149

Playbooks:

* YAML syntax errors detected and show where the problem is
Michael DeHaan committed
150
* if you ctrl+c a playbook it will not traceback (usually)
151 152 153
* vars_prompt now has encryption options (see examples/playbooks/prompts.yml)
* allow variables in parameterized task include parameters (regression)
* add ability to store the result of any command in a register (see examples/playbooks/register_logic.yml)
154
* --list-hosts to show what hosts are included in each play of a playbook
155
* fix a variable ordering issue that could affect vars_files with selective file source lists
156
* adds 'delegate_to' for a task, which can be used to signal outage windows and load balancers on behalf of hosts
157
* adds 'serial' to playbook, allowing you to specify how many hosts can be processing a playbook at one time (default 0=all)
Michael DeHaan committed
158
* adds 'local_action: <action parameters>' as an alias to 'delegate_to: 127.0.0.1'
Michael DeHaan committed
159

Michael DeHaan committed
160
0.6 "Cabo" -- August 6, 2012
161

162 163
playbooks:

Michael DeHaan committed
164
* support to tag tasks and includes and use --tags in playbook CLI
165 166 167 168 169 170 171 172 173 174 175
* playbooks can now include other playbooks (example/playbooks/nested_playbooks.yml)
* vars_files now usable with with_items, provided file paths don't contain host specific facts
* error reporting if with_items value is unbound
* with_items no longer creates lots of tasks, creates one task that makes multiple calls
* can use host_specific facts inside with_items (see above)
* at the top level of a playbook, set 'gather_facts: False' to skip fact gathering
* first_available_file and with_items used together will now raise an error
* to catch typos, like 'var' for 'vars', playbooks and tasks now yell on invalid parameters
* automatically load (directory_of_inventory_file)/group_vars/groupname and /host_vars/hostname in vars_files
* playbook is now colorized, set ANSIBLE_NOCOLOR=1 if you do not like this, does not colorize if not a TTY
* hostvars now preserved between plays (regression in 0.5 from 0.4), useful for sharing vars in multinode configs
Michael DeHaan committed
176
* ignore_errors: True on a task can be used to allow a task to fail and not stop the play
177
* with_items with the apt/yum module will install/remove/update everything in a single command
178 179 180

inventory:

Michael DeHaan committed
181
* groups variable available as a hash to return the hosts in each group name
182 183 184
* in YAML inventory, hosts can list their groups in inverted order now also (see tests/yaml_hosts)
* YAML inventory is deprecated and will be removed in 0.7
* ec2 inventory script
185
* support ranges of hosts in the host file, like www[001-100].example.com (supports leading zeros and also not)
186 187 188

modules:

Michael DeHaan committed
189
* fetch module now does not fail a system when requesting file paths (ex: logs) that don't exist
Michael DeHaan committed
190 191
* apt module now takes an optional install-recommends=yes|no (default yes)
* fixes to the return codes of the copy module
Michael DeHaan committed
192
* copy module takes a remote md5sum to avoid large file transfer
Michael DeHaan committed
193 194 195
* various user and group module fixes (error handling, etc)
* apt module now takes an optional force parameter
* slightly better psychic service status handling for the service module
Michael DeHaan committed
196
* fetch module fixes for SSH connection type
197
* modules now consistently all take yes/no for boolean parameters (and DWIM on true/false/1/0/y/n/etc)
198
* setup module no longer saves to disk, template module now only used in playbooks
199
* setup module no longer needs to run twice per playbook
Michael DeHaan committed
200
* apt module now passes DEBIAN_FRONTEND=noninteractive
201
* mount module (manages active mounts + fstab)
Michael DeHaan committed
202
* setup module fixes if no ipv6 support
Michael DeHaan committed
203
* internals: template in common module boilerplate, also causes less SSH operations when used
Michael DeHaan committed
204
* git module fixes
Michael DeHaan committed
205
* setup module overhaul, more modular
Michael DeHaan committed
206
* minor caching logic added to inventory to reduce hammering of inventory scripts.
Michael DeHaan committed
207 208
* MySQL and PostgreSQL modules for user and db management
* vars_prompt now supports private password entry (see examples/playbooks/prompts.yml)
209
* yum module modified to be more tolerant of plugins spewing random console messages (ex: RHN)
210 211 212 213 214 215 216 217

internals:

* when sudoing to root, still use /etc/ansible/setup as the metadata path, as if root
* paramiko is now only imported if needed when running from source checkout
* cowsay support on Ubuntu
* various ssh connection fixes for old Ubuntu clients
* ./hacking/test-module now supports options like ansible takes and has a debugger mode
Michael DeHaan committed
218
* sudoing to a user other than root now works more seamlessly (uses /tmp, avoids umask issues)
Michael DeHaan committed
219

220
0.5 "Amsterdam" ------- July 04, 2012
221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241

* Service module gets more accurate service states when running with upstart
* Jinja2 usage in playbooks (not templates), reinstated, supports %include directive
* support for --connection ssh (supports Kerberos, bastion hosts, etc), requires ControlMaster
* misc tracebacks replaced with error messages
* various API/internals refactoring
* vars can be built from other variables
* support for exclusion of hosts/groups with "!groupname"
* various changes to support md5 tool differences for FreeBSD nodes & OS X clients
* "unparseable" command output shows in command output for easier debugging
* mktemp is no longer required on remotes (not available on BSD)
* support for older versions of python-apt in the apt module
* a new "assemble" module, for constructing files from pieces of files (inspired by Puppet "fragments" idiom)
* ability to override most default values with ANSIBLE_FOO environment variables
* --module-path parameter can support multiple directories seperated with the OS path seperator
* with_items can take a variable of type list
* ansible_python_interpreter variable available for systems with more than one Python
* BIOS and VMware "fact" upgrades
* cowsay is used by ansible-playbook if installed to improve output legibility (try installing it)
* authorized_key module
* SELinux facts now sourced from the python selinux library
Michael DeHaan committed
242 243
* removed module debug option -D
* added --verbose, which shows output from successful playbook operations
244
* print the output of the raw command inside /usr/bin/ansible as with command/shell
245 246
* basic setup module support for Solaris
* ./library relative to the playbook is always in path so modules can be included in tarballs with playbooks
247

248
0.4 "Unchained" ------- May 23, 2012
Michael DeHaan committed
249

250 251 252 253
Internals/Core
* internal inventory API now more object oriented, parsers decoupled
* async handling improvements
* misc fixes for running ansible on OS X (overlord only)
254
* sudo improvements, now works much more smoothly
255 256 257 258 259 260 261
* sudo to a particular user with -U/--sudo-user, or using 'sudo_user: foo' in a playbook
* --private-key CLI option to work with pem files

Inventory
* can use -i host1,host2,host3:port to specify hosts not in inventory (replaces --override-hosts)
* ansible INI style format can do groups of groups [groupname:children] and group vars [groupname:vars]
* groups and users module takes an optional system=yes|no on creation (default no)
262
* list of hosts in playbooks can be expressed as a YAML list in addition to ; delimited
263 264 265 266 267 268 269 270 271

Playbooks
* variables can be replaced like ${foo.nested_hash_key.nested_subkey[array_index]}
* unicode now ok in templates (assumes utf8)
* able to pass host specifier or group name in to "hosts:" with --extra-vars
* ansible-pull script and example playbook (extreme scaling, remediation)
* inventory_hostname variable available that contains the value of the host as ansible knows it
* variables in the 'all' section can be used to define other variables based on those values
* 'group_names' is now a variable made available to templates
272
* first_available_file feature, see selective_file_sources.yml in examples/playbooks for info
Michael DeHaan committed
273
* --extra-vars="a=2 b=3" etc, now available to inject parameters into playbooks from CLI
274 275 276 277

Incompatible Changes
* jinja2 is only usable in templates, not playbooks, use $foo instead
* --override-hosts removed, can use -i with comma notation (-i "ahost,bhost")
Michael DeHaan committed
278
* modules can no longer include stderr output (paramiko limitation from sudo)
279 280 281 282 283

Module Changes
* tweaks to SELinux implementation for file module
* fixes for yum module corner cases on EL5
* file module now correctly returns the mode in octal
284 285
* fix for symlink handling in the file module
* service takes an enable=yes|no which works with chkconfig or updates-rc.d as appropriate
Michael DeHaan committed
286 287
* service module works better on Ubuntu
* git module now does resets and such to work more smoothly on updates
Michael DeHaan committed
288
* modules all now log to syslog
289
* enabled=yes|no on a service can be used to toggle chkconfig & updates-rc.d states
290 291 292 293 294 295 296 297 298
* git module supports branch=
* service fixes to better detect status using return codes of the service script
* custom facts provided by the setup module mean no dependency on Ruby, facter, or ohai
* service now has a state=reloaded
* raw module for bootstrapping and talking to routers w/o Python, etc

Misc Bugfixes
* fixes for variable parsing in only_if lines
* misc fixes to key=value parsing
299
* variables with mixed case now legal
300 301
* fix to internals of hacking/test-module development script

Michael DeHaan committed
302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330

0.3 "Baluchitherium" -- April 23, 2012

* Packaging for Debian, Gentoo, and Arch
* Improvements to the apt and yum modules
* A virt module
* SELinux support for the file module
* Ability to use facts from other systems in templates (aka exported
resources like support)
* Built in Ansible facts so you don't need ohai, facter, or Ruby
* tempdir selections that work with noexec mounted /tmp
* templates happen locally, not remotely, so no dependency on
python-jinja2 for remote computers
* advanced inventory format in YAML allows more control over variables
per host and per group
* variables in playbooks can be structured/nested versus just a flat namespace
* manpage upgrades (docs)
* various bugfixes
* can specify a default --user for playbooks rather than specifying it
in the playbook file
* able to specify ansible port in ansible host file (see docs)
* refactored Inventory API to make it easier to write scripts using Ansible
* looping capability for playbooks (with_items)
* support for using sudo with a password
* module arguments can be unicode
* A local connection type, --connection=local,  for use with cron or
in kickstarts
* better module debugging with -D
* fetch module for pulling in files from remote hosts
Michael DeHaan committed
331
* command task supports creates=foo for idempotent semantics, won't run if file foo already exists
Michael DeHaan committed
332 333 334 335 336

0.0.2 and 0.0.1

* Initial stages of project