Hi Juju, I'm curious how you run playbook from charms?
Here are two approaches I have done so far. It gets me going. But I'm wondering whether there is a better way to do this. Comments? ------------------------------------------------------------------ Previously I have been using charms.ansible <https://github.com/chuckbutler/charms.ansible>. But I always felt calling CLI isn't as flexible as using a programming API. Inspired by this blog <https://serversforhackers.com/running-ansible-2-programmatically>, I created a new layer-ansible that takes advantage of the Ansible Python API <http://docs.ansible.com/ansible/dev_guide/developing_api.html>. I have posted the code here <https://github.com/lenovo/charms.ansible>, which is forked from original one and two methods are completely compatible (two code bases don't really overlap). By pointing LAYER_PATH to this clone, I can use either method to run playbook. I kept both in one repo for convenience. To use it in charm is pretty simple (see details <https://github.com/lenovo/charms.ansible#charm-integration>): 1. Include layer. In|layer.yaml|: includes: -'layer:basic' -'layer:ansible' 2. Create a|playbooks|folder and place /playbooks here: |. ├── config.yaml ├── icon.svg ├── layer.yaml ├── metadata.yaml ├── playbooks │ └── test.yaml └── reactive └── solution.py | 3. Using|config.yaml|to pass in playbook for each action that is defined in the charm states. For example, define|test.yaml|for an action in|state-0|: options: state-0-playbook: type:string default:"test.yaml" description:"Playbook for..." 4. Define the playbook. For example, a/hello world/that will create a file `/tmp/testfile.txt'. -name:This is a hello-world example hosts:127.0.0.1 tasks: -name:Create a file called '/tmp/testfile.txt' with the content 'hello world'. copy:content="hello world\n" dest=/tmp/testfile.txt tags: -sth Note that|tags|value|sth|must match playbook run call (see below). 5. In charm|.py|file,|from charms.layer.task import Runner|, then in|state-0|to call given playbook: playbook= config['state-0-playbook'] runner= Runner( tags = 'sth',# <-- must match the tag in the playbook connection = 'local',# <-- must be "local" hostnames = '127.0.0.1',# <-- assuming execution in localhost playbooks = [playbook], private_key_file = '', run_data = {}, become_pass = '', verbosity = 0 ) stats= runner.run() -- Feng xia Engineer Lenovo USA Phone: 5088011794 fx...@lenovo.com Lenovo.com Twitter | Facebook | Instagram | Blogs | Forums
-- Juju mailing list Juju@lists.ubuntu.com Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/juju