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

If we can't find the inventory path, assume we should pass it through… #523

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
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
11 changes: 6 additions & 5 deletions ansible_rulebook/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,11 +81,12 @@ def substitute_variables(
return value


def load_inventory(inventory_file: str) -> Any:

with open(inventory_file) as f:
inventory_data = f.read()
return inventory_data
def load_inventory(inventory_spec: str) -> Any:
if os.path.exists(inventory_spec):
with open(inventory_spec) as f:
inventory_data = f.read()
return inventory_data
return inventory_spec
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are you returning the string if the path does not exist? I believe that could generate errors because later the code expects to receive the content of the inventory file, like for example in

def collect_ansible_facts(inventory: str) -> List[Dict]:

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah this PR is mostly just a discussion point... I'm not sure why we need to parse inventory like this rather than just passing things along in a more idiomatic way to Runner underneath.

This particular PR at least allow ad-hoc inventory to be passed in. There's a ton of logic in Runner and Ansible itself to manage inventory that I don't think ansible-rulebook needs to do much if anything to it.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@matburt Based on the inventory notes for the runner should we also allow for an env_var ANSIBLE_INVENTORY to satisfy the --inventory requirement in ansible-rulebook if the rulebook has run_playbook action? That could be the default value for --inventory. It might also help if we can check the value of --inventory to see if its a file/directory/string and then do the needful based on if its

  • file that exists get copied to the Ansible-runner inventory project directory
  • directory that exists gets copied along with sub directories to the Ansible-runner inventory
  • string data gets copied to inventory/hosts file like it does today

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll be honest... I still don't know why we need to introspect the inventory at all here. Just assume that it's being given in a format that makes sense to Ansible and if not then let ansible generate the right error for it.



def collect_ansible_facts(inventory: str) -> List[Dict]:
Expand Down