Skip to content

Releases: pyinfra-dev/pyinfra

pyinfra v0.5.1

28 Nov 20:20
Compare
Choose a tag to compare

Changes in 0.5.1:

  • Make environment variables stick between multiple commands
  • Fix npm packages fact missing a return(!)

pyinfra v0.5

10 Nov 10:34
Compare
Choose a tag to compare

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 to hosts can be used to prevent operations executing on hosts based on a condition
  • Add state.limit(hosts) and state.when(condition) context managers to use in place of if statements within deploys
  • @deploys 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 from 0.4 (removal of FakeState nonsense)
  • Add gpgkey argument to the yum.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 in ssh.keyscan
  • Don't include tests during setup!
  • Fix caching of local SHA1s on files

pyinfra v0.4.1

21 Aug 16:28
Compare
Choose a tag to compare

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 on vzctl.set not affecting command output (always saved)
  • Fix gem.packages install command

pyinfra v0.4

10 Aug 15:56
Compare
Choose a tag to compare

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 new local 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 and on_error callbacks to all operations (args = (state, host, op_hash))
  • Add server.script_template operation
  • Add global hosts kwarg to all operations, working like local.include's
  • Add cache_time kwarg to apt.update operation
  • Add Inventory.get_group and Inventory.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 with click
  • Moved pyinfra.cli to pyinfra_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) from pyinfra.api.facts.get_facts

pyinfra v0.3

12 Mar 16:04
Compare
Choose a tag to compare

PyPI version Travis.CI status

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 to init.systemd
  • Add pip path to pip.packages (@hoh)
  • Add virtualenv_kwargs to pip.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 and link 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

06 Dec 18:34
Compare
Choose a tag to compare

pyinfra v0.2.1

06 Dec 18:34
Compare
Choose a tag to compare

pyinfra v0.2

14 Nov 21:24
Compare
Choose a tag to compare

PyPI version Travis.CI status

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 to files.sync
  • Enable --limit CLI arg to be multiple, comma separated, hostnames
  • Add no_recommends kwarg to apt.packages operation
  • Make local imports work like calling python by adding . to sys.path in CLI
  • Add key/value release meta to linux_distribution fact
  • Improve how the init module handles "unknown" services
  • Add force kwarg to apt.packages and apt.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 as BSD = [] is deprecated)
  • Rename yum.upgrade -> yum.update (yum.upgrade deprecated)
  • Deprecate pip_virtualenv_packages fact as pip_packages will now accept an argument for the virtualenv
  • Deprecate npm_local_packages fact as npm_packages will accept an argument for the directory

Internal changes:

  • Operations now yield, rather than returning lists of commands

pyinfra v0.1.5

24 Oct 19:32
Compare
Choose a tag to compare

pyinfra v0.1.4

14 Sep 12:56
Compare
Choose a tag to compare