Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Leverage inventory plugins for actions #344

Open
quietjoy opened this issue Feb 3, 2023 · 1 comment
Open

Leverage inventory plugins for actions #344

quietjoy opened this issue Feb 3, 2023 · 1 comment

Comments

@quietjoy
Copy link

quietjoy commented Feb 3, 2023

  • ansible-rulebook version: 0.10.1
  • Python version: 3.11.0
  • Operating System: fedora:37

Description

I am trying to leverage the aws inventory plugin for an action. I would like my action to run against ec2 instances deployed in aws. The aws inventory plugin allows me to dynamically look up the instances I want to run against using the aws API.

I would also like to leverage the aws ssm connection plugin.

What I Did

I am running ansible-rulebook pointed to my aws inventory. This is the same inventory I want my action to use.

ansible-rulebook --rulebook rulebook.yml -i inventory/aws_ec2.yml --verbose

My rulebook...

---
- name: Listen for events on a webhook
  hosts: all
  sources:
    - ansible.eda.webhook:
        host: 0.0.0.0
        port: 5000
  rules:
    - name: Prepare build server
      condition: event.payload.message == "Prep Build Server"
      action:
        run_playbook:
          name: tasks/build_server.yml

The file tasks/build_server.yml

- hosts: build_server
  vars:
    ansible_connection: aws_ssm
    ansible_aws_ssm_bucket_name: ansible-eda-demo
    ansible_aws_ssm_region: us-east-1
  tasks:
  - name: Install all packages for bender
    dnf:
      name:
      - python3-pip
      - buildah
      - podman
      - ansible
      - docker
  - name: Start dockerd
    systemd:
      name: docker
      state: started
  - name: install bender
    pip:
      name:
      - ansible-bender

My inventory leveraging the aws inventory plugin

plugin: aws_ec2
regions:
  - us-east-1
filters:
  instance-state-name: running
compose:
  ansible_host: instance_id
keyed_groups:
  - key: tags.Name
    separator: ''

Here is the output when ansible-rulebook attempts to run the action build_server.

2/3/2023, 2:16:41 PM | PLAY RECAP *************** | eda-demo
2/3/2023, 2:16:41 PM | skipping: no hosts matched | eda-demo
2/3/2023, 2:16:41 PM | [WARNING]: * Failed to parse /tmp/run_playbookmfk3b58g/inventory/hosts with | eda-demo
2/3/2023, 2:16:41 PM | yaml plugin: Plugin configuration YAML file, not YAML inventory | eda-demo
2/3/2023, 2:16:41 PM | [WARNING]: * Failed to parse /tmp/run_playbookmfk3b58g/inventory/hosts with | eda-demo
2/3/2023, 2:16:41 PM | ini plugin: Invalid host pattern 'compose:' supplied, ending in ':' is not | eda-demo
2/3/2023, 2:16:41 PM | allowed, this character is reserved to provide a port. | eda-demo
2/3/2023, 2:16:41 PM | [WARNING]: Unable to parse /tmp/run_playbookmfk3b58g/inventory/hosts as an | eda-demo
2/3/2023, 2:16:41 PM | inventory source | eda-demo
2/3/2023, 2:16:41 PM | [WARNING]: Unable to parse /tmp/run_playbookmfk3b58g/inventory as an inventory | eda-demo
2/3/2023, 2:16:41 PM | source | eda-demo
2/3/2023, 2:16:41 PM | [WARNING]: No inventory was parsed, only implicit localhost is available | eda-demo
2/3/2023, 2:16:41 PM | [WARNING]: provided hosts list is empty, only localhost is available. Note that | eda-demo
2/3/2023, 2:16:41 PM | the implicit localhost does not match 'all' | eda-demo
2/3/2023, 2:16:41 PM | [WARNING]: Could not match supplied host pattern, ignoring: build_server | eda-demo

From the output, it appears the action run is looking for a default host file and not the inventory that ansible-rulebook was passed. What inventory do the actions use? Is it possible to get an action to use a custom inventory?

@Alex-Izquierdo
Copy link
Contributor

Hello @quietjoy
Ansible-rulebook doesn't process inventories through ansible plugins. Currently only static inventories in yaml format are supported. We have plan to extend the support in the future.

mkanoor added a commit that referenced this issue Aug 21, 2023
We don't load the inventory data in ansible-rulebook its passed into the
ansible-runner as is.

Based on work done in PR #523 

#344
https://issues.redhat.com/browse/AAP-7661

Co-authored-by: Alex <aizquier@redhat.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants