Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 29 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.1.0] — 2026-06-12

First beta release.

### Fixed
- `extra_vars` no longer leak across instances. Ansible's `load_extra_vars()`
memoizes its dict and `VariableManager` held it by reference, so
`update_extra_vars` / the `hostvars=` constructor path mutated process-global
state visible to every other instance. Each instance now copies its own
`extra_vars`.
- `build_task` used `== True` for the legacy `module_ignore_errors` kwarg,
which wrongly accepted truthy non-bools like `1` (since `1 == True`). It now
uses `is True` so only the literal bool opts in.

### Changed
- `__version__` is now derived from installed package metadata via
`importlib.metadata` instead of a hardcoded string, so it stays in sync
Expand All @@ -15,6 +29,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
to match the documented support range (Linux, macOS, WSL).
- Added `Changelog` URL to `[project.urls]` (linked from PyPI sidebar).

### Added
- Variable-access API documentation and tests: `get_host_var` /
`get_visible_var`, `host_vars` / `visible_vars`, `extra_vars` /
`update_extra_vars`, covering host/group/extra precedence and template
rendering.
- Edge-case test suite: cardinality/inventory errors, multi-task and
multi-host failure aggregation, unreachable hosts, `NoTasksError`, the
legacy `module_ignore_errors` kwarg, string-args guidance, and
`gather_facts`.
- Tier-2 integration tests over a real SSH transport (`ssh` marker) against a
throwaway containerized sshd in `tests/ssh/`; auto-skips when no target is
configured. New `test-ssh` CI job runs them.

## [0.1.0a0] — 2026-06-11

Initial alpha release.
Expand Down Expand Up @@ -43,5 +70,6 @@ Initial alpha release.
- ansible-core 2.16, 2.17, 2.18, 2.19, 2.20, 2.21
- POSIX systems (Linux, macOS, WSL); not supported on native Windows.

[Unreleased]: https://github.com/wangxin/ansible-host/compare/v0.1.0a0...HEAD
[Unreleased]: https://github.com/wangxin/ansible-host/compare/v0.1.0...HEAD
[0.1.0]: https://github.com/wangxin/ansible-host/compare/v0.1.0a0...v0.1.0
[0.1.0a0]: https://github.com/wangxin/ansible-host/releases/tag/v0.1.0a0
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

A thin Python wrapper over Ansible's executor. Lets you run Ansible modules from Python with structured results, batch execution, and a host-object-first API — without going through `pytest-ansible` or `ansible-runner`.

> **Status: alpha (0.1.0a0).** Built from a working internal implementation; API is stable in shape but may shift in details before 1.0.
> **Status: beta (0.1.0).** Built from a working internal implementation; API is stable in shape but may shift in details before 1.0.

## Why this exists

Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "hatchling.build"

[project]
name = "ansible-host"
version = "0.1.0a0"
version = "0.1.0"
description = "A thin Python wrapper over Ansible's executor: typed AnsibleHost / AnsibleHosts classes that let you run Ansible modules from Python without pytest-ansible or ansible-runner."
readme = "README.md"
requires-python = ">=3.10"
Expand All @@ -20,7 +20,7 @@ keywords = [
"infrastructure",
]
classifiers = [
"Development Status :: 3 - Alpha",
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"Intended Audience :: System Administrators",
"License :: OSI Approved :: Apache Software License",
Expand Down
Loading