66 lines
2.3 KiB
Markdown
Executable file
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
|