{"id":13442934,"url":"https://github.com/softwarefactory-project/dhall-ansible","last_synced_at":"2026-06-01T12:31:33.551Z","repository":{"id":44546754,"uuid":"231997394","full_name":"softwarefactory-project/dhall-ansible","owner":"softwarefactory-project","description":"Ansible definitions with Dhall","archived":false,"fork":false,"pushed_at":"2024-06-30T13:20:08.000Z","size":303,"stargazers_count":68,"open_issues_count":3,"forks_count":13,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-12-03T01:11:01.396Z","etag":null,"topics":["ansible-playbooks","dhall"],"latest_commit_sha":null,"homepage":"","language":"Dhall","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/softwarefactory-project.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-01-06T00:55:53.000Z","updated_at":"2025-03-26T04:31:23.000Z","dependencies_parsed_at":"2024-10-28T04:01:31.658Z","dependency_job_id":"fe52bf41-bf62-4068-87df-22d412b2d4bf","html_url":"https://github.com/softwarefactory-project/dhall-ansible","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/softwarefactory-project/dhall-ansible","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwarefactory-project%2Fdhall-ansible","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwarefactory-project%2Fdhall-ansible/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwarefactory-project%2Fdhall-ansible/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwarefactory-project%2Fdhall-ansible/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/softwarefactory-project","download_url":"https://codeload.github.com/softwarefactory-project/dhall-ansible/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/softwarefactory-project%2Fdhall-ansible/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33775857,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-01T02:00:06.963Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ansible-playbooks","dhall"],"created_at":"2024-07-31T03:01:53.510Z","updated_at":"2026-06-01T12:31:33.533Z","avatar_url":"https://github.com/softwarefactory-project.png","language":"Dhall","funding_links":[],"categories":["Dhall","Libraries","others"],"sub_categories":[],"readme":"# dhall-ansible\n\n`dhall-ansible` contains [Dhall][dhall-lang] bindings to [Ansible][ansible],\nso you can generate Ansible playbooks from Dhall expressions.\nThis will let you easily typecheck, template and modularize your Ansible playbooks.\n\nSee the [dhall-kubernetes][dhall-kubernetes] demonstration for a concrete example of\nwhy you might want to do this.\n\n## Example\n\nA basic playbook using builtin modules:\n\n```dhall\n-- ./examples/demo.dhall\nlet Ansible = ../package.dhall\n\nin  [ Ansible.Play::{\n      , hosts = \"localhost\"\n      , vars = Some (Ansible.Vars.mapText (toMap { var_name = \"var_value\" }))\n      , tasks = Some\n        [ Ansible.Task::{\n          , debug = Some Ansible.Debug::{ msg = Some \"Hello world\" }\n          }\n        , Ansible.Task::{\n          , name = Some \"Installing package\"\n          , become = Some True\n          , package = Some Ansible.Package::{\n            , name = \"emacs-nox\"\n            , state = \"present\"\n            }\n          }\n        , Ansible.Task::{\n          , block = Some\n            [ Ansible.BlockTask::{\n              , name = Some \"Failing Block task\"\n              , fail = Some Ansible.Fail::{ msg = Some \"oops\" }\n              }\n            ]\n          , rescue = Some\n            [ Ansible.BlockTask::{\n              , name = Some \"Rescue task\"\n              , debug = Some Ansible.Debug::{ msg = Some \"rescued\" }\n              }\n            ]\n          }\n        , Ansible.Task::{ import_tasks = Some \"test.yaml\" }\n        ]\n      }\n    ]\n\n```\n\n```yaml\n# dhall-to-yaml --file examples/demo.dhall\n\n- hosts: localhost\n  tasks:\n    - debug:\n        msg: Hello world\n    - become: true\n      name: Installing package\n      package:\n        name: emacs-nox\n        state: present\n    - block:\n        - fail:\n            msg: oops\n          name: Failing Block task\n      rescue:\n        - debug:\n            msg: rescued\n          name: Rescue task\n    - import_tasks: test.yaml\n  vars:\n    var_name: var_value\n\n```\n\nTo use collection, a custom Ansible package can be defined:\n\n```dhall\n-- ./examples/ansible-posix.dhall\nlet Base = ../package.dhall\n\nlet Posix =\n      https://softwarefactory-project.io/cgit/software-factory/dhall-ansible-collection-ansible-posix/plain/package.dhall?h=0.1.0 sha256:c1b127b528be28294629ee1f8b0d8fc951c7282caaffab6ca675f931ea1450c7\n\nlet --| Here the task type is extended with the Posix collection\n    Task =\n      { Type = Base.BaseTask.Type //\\\\ Posix.Task.Type\n      , default = Base.BaseTask.default // Posix.Task.default\n      }\n\nlet --| The new task type can be added to the Play too\n    Play =\n      { Type = Base.BasePlay.Type //\\\\ { tasks : List Task.Type }\n      , default = Base.BasePlay.default\n      }\n\nin  Base // { Task, Play, Posix }\n\n```\n\nAnd a playbook can be defined as follow:\n\n```dhall\n-- ./examples/posix.dhall\nlet Ansible = ./ansible-posix.dhall\n\nin  [ Ansible.Play::{\n      , hosts = \"localhost\"\n      , tasks =\n        [ Ansible.Task::{\n          , name = Some \"Synchronize demo\"\n          , `ansible.posix.synchronize` = Some Ansible.Posix.Synchronize::{\n            , src = \"/tmp/test\"\n            , dest = \"/tmp/dest\"\n            }\n          }\n        ]\n      }\n    ]\n\n```\n\n```yaml\n# dhall-to-yaml --file examples/posix.dhall\n\n- hosts: localhost\n  tasks:\n    - ansible.posix.synchronize:\n        dest: /tmp/dest\n        src: /tmp/test\n      name: Synchronize demo\n\n```\n\nHere is a custom package including the ansible.posix and openstack.cloud collection:\n\n```dhall\n-- ./examples/ansible-extended.dhall\n-- | The ansible schemas using the posix and podman collections\nlet Base =\n      https://softwarefactory-project.io/cgit/software-factory/dhall-ansible/plain/package.dhall?h=0.2.1 sha256:030d7d1b16172afde44843c6e950fcc3382a6653269e36a27ca1d06d75a631ff\n\nlet Posix =\n      https://softwarefactory-project.io/cgit/software-factory/dhall-ansible-collection-ansible-posix/plain/package.dhall?h=0.1.0 sha256:c1b127b528be28294629ee1f8b0d8fc951c7282caaffab6ca675f931ea1450c7\n\nlet Podman =\n      https://softwarefactory-project.io/cgit/software-factory/dhall-ansible-collection-containers-podman/plain/package.dhall?h=0.1.0 sha256:469dcbf0d4466677c87b4734e8c405b50f5a336de688e30a75db7db126c20a81\n\nlet BlockTask =\n      { Type =\n              Base.BaseTask.Type\n          //\\\\  Base.Builtin.Task.Type\n          //\\\\  Posix.Task.Type\n          //\\\\  Podman.Task.Type\n      , default =\n              Base.BaseTask.default\n          //  Base.Builtin.Task.default\n          //  Posix.Task.default\n          //  Podman.Task.default\n      }\n\nlet Export = Base // Posix // Podman\n\nlet Task =\n      { Type = BlockTask.Type //\\\\ (Base.mkBlock BlockTask.Type).Type\n      , default = BlockTask.default // (Base.mkBlock BlockTask.Type).default\n      }\n\nlet --| The new task type can be added to the Play too\n    Play =\n      { Type =\n              Base.BasePlay.Type\n          //\\\\  { tasks : Optional (List Task.Type)\n                , pre_tasks : Optional (List Task.Type)\n                , post_tasks : Optional (List Task.Type)\n                , handlers : Optional (List Task.Type)\n                }\n      , default =\n              Base.BasePlay.default\n          //  { tasks = None (List Task.Type)\n              , pre_tasks = None (List Task.Type)\n              , post_tasks = None (List Task.Type)\n              , handlers = None (List Task.Type)\n              }\n      }\n\nin  Export // { Task, Play }\n\n```\n\n## Changes\n\nFrozen packages are available in the tag commit.\n\n### 0.3.0\n\n- Add missing add_host attributes.\n- Remove free-form attributes from include/import tasks.\n- Update builtins attributes to the latest version.\n\n### 0.2.2\n\n- Fix import issue for case insensitive filesystem.\n\n### 0.2.1\n\n- Import Zuul.Vars locally\n\n### 0.2.0\n\n- Major refactor to support Ansible Collections\n- Change vars type to JSON/Type\n- Add block support\n\n### 0.1.0\n\n- Initial release for ansible-2.9\n\n[dhall-lang]: https://dhall-lang.org\n[ansible]: https://ansible.com\n[dhall-kubernetes]: https://github.com/dhall-lang/dhall-kubernetes\n[type-operator]: https://docs.dhall-lang.org/references/Built-in-types.html#id70\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoftwarefactory-project%2Fdhall-ansible","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsoftwarefactory-project%2Fdhall-ansible","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsoftwarefactory-project%2Fdhall-ansible/lists"}