Releases: pyinfra-dev/pyinfra
pyinfra v0.5.1
Changes in 0.5.1:
- Make environment variables stick between multiple commands
- Fix npm packages fact missing a return(!)
pyinfra v0.5
Changes in 0.5:
Vagrant connector:
# Run a deploy on all Vagrant machines (vagrant status list)
pyinfra @vagrant deploy.py
pyinfra @vagrant/vm_name deploy.py
# Can be used in tandem with other inventory:
pyinfra @vagrant,my-host.net deploy.py
pyinfra @vagrant,@local,my-host.net fact os
Consistent conditional branching:
- Add global
when
kwarg to all operations, similar tohosts
can be used to prevent operations executing on hosts based on a condition - Add
state.limit(hosts)
andstate.when(condition)
context managers to use in place ofif
statements within deploys @deploy
s and the context managers (state.limit
,state.when
) can all be nested as much as needed (although if you need to nest a lot, you're probably doing it wrong!)- Add
data_defaults
kwarg to@deploy
functions, meaning third party pyinfra packages can provide sensible defaults that the user can override individually - Display a large warning when imbalanced branches are detected, linking the user to the documentation for the above
Examples:
from pyinfra import host, state
from pyinfra.modules import server
# Replace if blocks with the state.when context
with state.when(host.name == 'my-host.net'):
server.shell('echo "my-host.net op!"')
...
# Use the when kwarg to achieve the same, for single operations
server.shell(
'echo "my-host.net op!"',
when=host.name == 'my-host.net',
)
with state.limit(inventory.get_host('my-host.net')):
server.shell('echo "my-host.net op!"')
...
server.shell(
'echo "my-host.net op!"',
limit=inventory.get_host('my-host.net'),
)
Note that if statements/etc still work as before but pyinfra will print out a warning explaining the implications and linking to the docs (http://pyinfra.readthedocs.io/page/using_python.html#conditional-branches).
- Hooks change: no longer loaded from deploy files, only from
config.py
, due to changes from0.4
(removal ofFakeState
nonsense) - Add
gpgkey
argument to theyum.repo
operation - Add
lsb_release
fact apt_sources
fact now supports apt repos with options ([arch=amd64]
)- Improved error output when connecting
- Update testing box from Ubuntu 15 to Ubuntu 16
- Ensure
~/.ssh
exists keyscanning inssh.keyscan
- Don't include tests during setup!
- Fix caching of local SHA1s on files
pyinfra v0.4.1
Changes in 0.4.1:
- Add
vzctl.unmount
operation - Add script to generate empty test files
- Increase module test coverage significantly
- Fix incorrect args in
vzctl.restart
operation - Fix
save=False
kwarg onvzctl.set
not affecting command output (always saved) - Fix
gem.packages
install command
pyinfra v0.4
Changes in 0.4:
- Major change: entirely new, streamlined CLI. Legacy support will remain for the next few releases. Usage is now:
# Run one or more deploys against the inventory
pyinfra INVENTORY deploy_web.py [deploy_db.py]...
# Run a single operation against the inventory
pyinfra INVENTORY server.user pyinfra,home=/home/pyinfra
# Execute an arbitrary command on the inventory
pyinfra INVENTORY exec -- echo "hello world"
# Run one or more facts on the inventory
pyinfra INVENTORY fact linux_distribution [users]...
- Major addition: new
connectors
module that means hosts are no longer limited to SSH targets. Hostnames prefixed in@
define which non-SSH connector to use. There is a newlocal
connector for executing directly on the local machine, use hostname@local
, eg:
pyinfra @local fact arch
- Major addition: add
@deploy
wrapper for pyinfra related modules (eg pyinfra-openstack) to wrap a deploy (collection of operations) under one function, eg:
from pyinfra.api import deploy
@deploy('Install Openstack controller')
def install_openstack_controller(state, host):
apt.packages(
state, host,
{'Install openstack-client'},
['openstack-client'],
)
...
- Add SSH module to execute SSH from others hosts:
ssh.keyscan
,ssh.command
,ssh.upload
,ssh.download
- Add vzctl module to manage OpenVZ containers:
vzctl.create
,vzctl.stop
,vzctl.start
,vzctl.restart
,vzctl.delete
,vzctl.set
- Add
on_success
andon_error
callbacks to all operations (args =(state, host, op_hash)
) - Add
server.script_template
operation - Add global
hosts
kwarg to all operations, working likelocal.include
's - Add
cache_time
kwarg toapt.update
operation - Add
Inventory.get_group
andInventory.get_host
- Inventory
__len__
now (correctly) looks at active hosts, rather than all - Add
Inventory.len_all_hosts
to replace above bug/qwirk - Add progress spinner and % indicator to CLI
- Replace
docopt
/termcolor
withclick
- Moved
pyinfra.cli
topyinfra_cli
(internal breaking) - Switch to setuptools
entry_points
instead of distutils scripts - Expand Travis.ci testing to Python 3.6 and 3.7 nightly
- Remove unused kwargs (
sudo
,sudo_user
,su_user
) frompyinfra.api.facts.get_facts
pyinfra v0.3
pyinfra manages the state of one or more servers. It can be used for app/service deployment, config management and ad-hoc command execution. Deploys are asynchronous, highly performant and can target thousands of hosts in parallel. The inventory of servers and deploy state are written in Python, allowing for near-infinite extendability.
Changes in v0.3:
- Add
init.service
operation - Add
config.MIN_PYINFRA_VERSION
- Add
daemon_reload
toinit.systemd
- Add
pip
path topip.packages
(@hoh) - Add
virtualenv_kwargs
topip.packages
- Add
socket
fact - Display meta and results in groups
- Fact arguments now parsed with jinja2 like operation args
- Use full dates in
file
,directory
andlink
facts - Improve
--run
check between operation and/or shell - Improve tests with facts that have multiple arguments
- Fix how
pip.packages
handles pip path - Fix
yum.rpm
when downloading already installed rpm's - Fix
users
fact with users that have no home directory - Fix command overrides with dict objects (
git.repo
) - Removed compatability for deprecated changes in v0.2
pyinfra v0.2.2
v0.2.2
pyinfra v0.2.1
v0.2.1
pyinfra v0.2
pyinfra automates service deployment. It does this by diff-ing the state of the server with the state defined in the deploy script. Deploys are asyncronous and highly performant. The inventory & deploy are managed with pure Python, allowing for near-infinite extendability.
New stuff:
- Add LXD facts/module
- Add iptables facts/module
- Support usernames with non-standard characters (_, capitals, etc)
- Add global
get_pty
kwarg for all operations to work with certain dodgy programs - Add
--fail-percent
CLI arg - Add
exclude
kwarg tofiles.sync
- Enable
--limit
CLI arg to be multiple, comma separated, hostnames - Add
no_recommends
kwarg toapt.packages
operation - Make local imports work like calling
python
by adding.
tosys.path
in CLI - Add key/value release meta to
linux_distribution
fact - Improve how the init module handles "unknown" services
- Add
force
kwarg toapt.packages
andapt.deb
and don't--force-yes
by default
To-be-breaking changes (deprecated & will be removed in 0.3):
- Switch to lowercase inventory names (accessing
inventory.bsd
where the group is defined asBSD = []
is deprecated) - Rename
yum.upgrade
->yum.update
(yum.upgrade
deprecated) - Deprecate
pip_virtualenv_packages
fact aspip_packages
will now accept an argument for the virtualenv - Deprecate
npm_local_packages
fact asnpm_packages
will accept an argument for the directory
Internal changes:
- Operations now
yield
, rather than returning lists of commands
pyinfra v0.1.5
v0.1.5
pyinfra v0.1.4
v0.1.4