diff --git a/CHANGELOG.md b/CHANGELOG.md index f3a85aa..18c71e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 @@ -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. @@ -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 diff --git a/README.md b/README.md index 8901daf..6c77913 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/pyproject.toml b/pyproject.toml index d22664b..876cf35 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -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" @@ -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",