Skip to content

BOSH and ansible integration to run ansible playbooks and roles with bosh

License

Notifications You must be signed in to change notification settings

SpringerPE/ansible-boshrelease

Repository files navigation

Ansible release for BOSH

Merging the power of Ansible orchestration with the awesome software lifecycle management of BOSH

Apart of providing ansible binaries this release offers a way to trigger actions which will run add-on ansible releases on nodes. The idea is be able to run ansible playbooks every time that a new instance is deployed by making use of BOSH hooks to extend its functionality to Ansible to talk with external components of a deployment like LB, DNSs, etc.

Have a look at the ansible-bigiplb-boshrelease to see an example of an add-on which will register the instances of a deployment on the F5 load balancer pool when they are deployed.

Implementation

This Ansible-release defines four jobs:

  • ansible: to provide a way to run Ansible in a deployment via the entrypoint /var/vcap/jobs/ansible/bin/run
  • ansible-hooks: to automatically trigger playbooks from other add-on releases.
  • ansible-distclean: do define errands from add-on releases which will perform clean-up actions for the deployment.
  • ansible-deploy: do define errands from add-on releases which will perform additional deploy actions for the deployment.

In order to trigger playbooks, the ansible-hooks jobs implement the BOSH lifecycle entrypoints: pre-start, post-start, post-deploy and drain to call ansible playbooks available from other releases/jobs. ansible-disclean and ansible-deploy are errands jobs to trigger playbooks which run actions outside the vms of a deployment to manage (delete/deploy) external resources.

ansible job can also run as a errand by defining the parameters of the spec. But the important functionality is done by the ansible- * jobs which will look for playbooks from other jobs folder's (/var/vcap/<job>/ansible/) by predefined filename patterns.

All these jobs accepts a parameter (ansible.env) in the manifest to setup enviroment variables for ansible (or inventory script). Also, bosh-inventory program is already included in the release, so you Ansible can use the inventory feature to query Bosh Director about the VMs of a deployment.

Currently the Director does not run post-deploy by default. Use director.enable_post_deploy: true property in Bosh manifest to enable running those scripts.

ansible-hooks

It provides a way to define and run a set of playbooks of an add-on release job, allowing you to define specific playbooks to run on bootstrap nodes (for master/slave setup) or non-bootstrap nodes. The interface which an add-on has to implement in order to be called is defined by the names of the playbooks on the ansible folder:

  • *pre-bootstrap.yml: Will run only on the bootstrap node.
  • *pre-nobootstrap.yml: Will run only on the non-bootstrap nodes.
  • *pre-start.yml: Will run only on all nodes after the *pre-bootstrap.yml or *pre-nobootstrap.yml playbooks.

Then BOSH Director starts the jobs assigned to each the instance using monit.

  • *post-bootstrap.yml: Will run only on the bootstrap node after its jobs are running.
  • *post-nobootstrap.yml: Will run only on the non-bootstrap nodes after its jobs are running.
  • *post-start.yml: Will run only on all nodes after the *post-bootstrap.yml or *post-nobootstrap.yml playbooks.

Bosh Director waits until all post-start scripts are finished and then these playbooks will be launched

  • *postdeploy-bootstrap.yml: Will run only on the bootstrap node after all nodes have run all post-start playbooks.
  • *postdeploy-nobootstrap.yml: Will run only on the non-bootstrap nodes after all nodes have run all post-start-playbooks.
  • *postdeploy.yml: Will run only on all nodes after the *postdeploy-bootstrap.yml or *postdeploy-nobootstrap.yml playbooks.

When a node leaves the deployment, bosh director will trigger *dran.yml playbooks.

Playbooks from jobs of add-on releases are executed lexically ordered, for example, this could be a list for *drain.yml: jobs/zz/ansible/00-drain.yml, jobs/bb/ansible/10-drain.yml, jobs/aa/ansible/99-drain.yml

ansible-distclean

Playbooks will be executed as errand jobs within the deployment. The idea is implement a way to clean up all the external resources used in a deployment. They have to provide an *distclean.yml playbook which will be launched by the errand.

ansible-deploy

The playbooks will be executed also as errand jobs within the deployment. The idea is implement a way to deploy the external resources (not managed by bosh) used in a deployment. They have to provide an *deploy.yml playbook which will be launched by the errand.

Development

After cloning this repository, run:

./bosh_prepare

It will download all sources specified in the spec file (commented out) of each job, then you can create the release with:

./bosh_final_release

and upload to BOSH director:

bosh upload release

Author

Springer Nature Platform Engineering, Jose Riguera Lopez ([email protected])

Copyright 2017 Springer Nature

License

Apache 2.0 License

About

BOSH and ansible integration to run ansible playbooks and roles with bosh

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published