ansible-training-test/playbooks/roles/defunctzombie.coreos-bootstrap/README.md
2018-07-27 10:01:50 +02:00

66 lines
2.3 KiB
Markdown
Executable file

# coreos-bootstrap
In order to effectively run ansible, the target machine needs to have a python interpreter. Coreos machines are minimal and do not ship with any version of python. To get around this limitation we can install [pypy](http://pypy.org/), a lightweight python interpreter. The coreos-bootstrap role will install pypy for us and we will update our inventory file to use the installed python interpreter.
# install
```
ansible-galaxy install defunctzombie.coreos-bootstrap
```
# Configure your project
Unlike a typical role, you need to configure Ansible to use an alternative python interpreter for coreos hosts. This can be done by adding a `coreos` group to your inventory file and setting the group's vars to use the new python interpreter. This way, you can use ansible to manage CoreOS and non-CoreOS hosts. Simply put every host that has CoreOS into the `coreos` inventory group and it will automatically use the specified python interpreter.
```
[coreos]
host-01
host-02
[coreos:vars]
ansible_ssh_user=core
ansible_python_interpreter=/home/core/bin/python
```
This will configure ansible to use the python interpreter at `/home/core/bin/python` which will be created by the coreos-bootstrap role.
## Bootstrap Playbook
Now you can simply add the following to your playbook file and include it in your `site.yml` so that it runs on all hosts in the coreos group.
```yaml
- hosts: coreos
gather_facts: False
roles:
- defunctzombie.coreos-bootstrap
```
Make sure that `gather_facts` is set to false, otherwise ansible will try to first gather system facts using python which is not yet installed!
## Example Playbook
After bootstrap, you can use ansible as usual to manage system services, install python modules (via pip), and run containers. Below is a basic example that starts the `etcd` service, installs the `docker-py` module and then uses the ansible `docker` module to pull and start a basic nginx container.
```yaml
- name: Nginx Example
hosts: web
sudo: true
tasks:
- name: Start etcd
service: name=etcd.service state=started
- name: Install docker-py
pip: name=docker-py
- name: pull container
raw: docker pull nginx:1.7.1
- name: launch nginx container
docker:
image="nginx:1.7.1"
name="example-nginx"
ports="8080:80"
state=running
```
# License
MIT