Bootstrap resource added
- added example-bootstrap.py - moved ansible tasks to separate dir
This commit is contained in:
parent
0c3f3208b6
commit
beb6b8536f
18
Vagrantfile
vendored
18
Vagrantfile
vendored
@ -23,12 +23,12 @@ SCRIPT
|
|||||||
|
|
||||||
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
||||||
|
|
||||||
#config.vm.box = "deb/jessie-amd64"
|
|
||||||
#config.vm.box = "rustyrobot/deb-jessie-amd64"
|
|
||||||
#config.vm.box = "ubuntu/trusty64"
|
|
||||||
config.vm.box = "solar-master.box"
|
|
||||||
|
|
||||||
config.vm.define "solar-dev", primary: true do |config|
|
config.vm.define "solar-dev", primary: true do |config|
|
||||||
|
#config.vm.box = "deb/jessie-amd64"
|
||||||
|
#config.vm.box = "rustyrobot/deb-jessie-amd64"
|
||||||
|
#config.vm.box = "ubuntu/trusty64"
|
||||||
|
config.vm.box = "solar-master.box"
|
||||||
|
|
||||||
config.vm.provision "shell", inline: solar_script, privileged: true
|
config.vm.provision "shell", inline: solar_script, privileged: true
|
||||||
config.vm.provision "shell", inline: master_celery, privileged: true
|
config.vm.provision "shell", inline: master_celery, privileged: true
|
||||||
config.vm.provision "file", source: "~/.vagrant.d/insecure_private_key", destination: "/vagrant/tmp/keys/ssh_private"
|
config.vm.provision "file", source: "~/.vagrant.d/insecure_private_key", destination: "/vagrant/tmp/keys/ssh_private"
|
||||||
@ -46,9 +46,11 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
|||||||
index = i + 1
|
index = i + 1
|
||||||
ip_index = i + 3
|
ip_index = i + 3
|
||||||
config.vm.define "solar-dev#{index}" do |config|
|
config.vm.define "solar-dev#{index}" do |config|
|
||||||
config.vm.provision "shell", inline: slave_script, privileged: true
|
config.vm.box = "ubuntu/trusty64"
|
||||||
config.vm.provision "shell", inline: solar_script, privileged: true
|
|
||||||
config.vm.provision "shell", inline: slave_celery, privileged: true
|
#config.vm.provision "shell", inline: slave_script, privileged: true
|
||||||
|
#config.vm.provision "shell", inline: solar_script, privileged: true
|
||||||
|
#config.vm.provision "shell", inline: slave_celery, privileged: true
|
||||||
config.vm.network "private_network", ip: "10.0.0.#{ip_index}"
|
config.vm.network "private_network", ip: "10.0.0.#{ip_index}"
|
||||||
config.vm.host_name = "solar-dev#{index}"
|
config.vm.host_name = "solar-dev#{index}"
|
||||||
|
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
- hosts: all
|
- name: Main build script
|
||||||
|
hosts: all
|
||||||
sudo: yes
|
sudo: yes
|
||||||
tasks:
|
tasks:
|
||||||
- include: base.yml
|
- include: tasks/base.yml
|
||||||
- include: puppet.yml
|
- include: tasks/puppet.yml
|
||||||
- include: docker.yml
|
- include: tasks/docker.yml
|
||||||
#- include: celery.yml tags=['master'] celery_dir=/var/run/celery
|
#- include: celery.yml tags=['master'] celery_dir=/var/run/celery
|
||||||
- include: cinder.yml
|
- include: tasks/cinder.yml
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
- hosts: all
|
- name: Solar Celery config
|
||||||
|
hosts: all
|
||||||
sudo: yes
|
sudo: yes
|
||||||
vars:
|
vars:
|
||||||
celery_dir: /var/run/celery
|
celery_dir: /var/run/celery
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
---
|
---
|
||||||
|
|
||||||
- hosts: all
|
- name: Custom Solar configs
|
||||||
|
hosts: all
|
||||||
sudo: yes
|
sudo: yes
|
||||||
tasks:
|
tasks:
|
||||||
- lineinfile: line='slaveof {{ master_ip }} 6379' dest=/etc/redis/redis.conf
|
- lineinfile: line='slaveof {{ master_ip }} 6379' dest=/etc/redis/redis.conf
|
||||||
|
@ -1,7 +0,0 @@
|
|||||||
---
|
|
||||||
|
|
||||||
- shell: docker --version
|
|
||||||
ignore_errors: true
|
|
||||||
register: docker_version
|
|
||||||
- shell: curl -sSL https://get.docker.com/ | sudo sh
|
|
||||||
when: docker_version | failed
|
|
@ -1,5 +1,8 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
# TODO: maybe this is better:
|
||||||
|
# http://docs.ansible.com/ansible/intro_installation.html#latest-releases-via-apt-ubuntu
|
||||||
|
|
||||||
apt-get remove -f python-pip
|
apt-get remove -f python-pip
|
||||||
sudo apt-get install -y python-setuptools
|
sudo apt-get install -y python-setuptools
|
||||||
sudo easy_install pip
|
sudo easy_install pip
|
||||||
|
@ -7,5 +7,9 @@
|
|||||||
ignore_errors: True
|
ignore_errors: True
|
||||||
- command: sudo losetup /dev/loop0 /root/cinder.img
|
- command: sudo losetup /dev/loop0 /root/cinder.img
|
||||||
when: loop_created|failed
|
when: loop_created|failed
|
||||||
|
# retries: 5
|
||||||
|
# delay: 1
|
||||||
- lvg: vg=cinder-volumes pvs=/dev/loop0
|
- lvg: vg=cinder-volumes pvs=/dev/loop0
|
||||||
when: loop_created|failed
|
when: loop_created|failed
|
||||||
|
# retries: 5
|
||||||
|
# delay: 1
|
17
bootstrap/playbooks/tasks/docker.yml
Normal file
17
bootstrap/playbooks/tasks/docker.yml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
- shell: docker --version
|
||||||
|
ignore_errors: true
|
||||||
|
register: docker_version
|
||||||
|
# This script is completely broken, it has so many sleeps...
|
||||||
|
- shell: curl -sSL https://get.docker.com/ | sudo sh
|
||||||
|
when: docker_version | failed
|
||||||
|
|
||||||
|
# Here's a raw paste of what the above script really does for Ubuntu
|
||||||
|
#- shell: apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
|
||||||
|
#- shell: mkdir -p /etc/apt/sources.list.d
|
||||||
|
#- shell: echo deb https://apt.dockerproject.org/repo ubuntu-trusty main > /etc/apt/sources.list.d/docker.list
|
||||||
|
# args:
|
||||||
|
# creates: /etc/apt/sources.list.d/docker.list
|
||||||
|
#- shell: apt-get update
|
||||||
|
#- shell: apt-get install -y -q docker-engine
|
108
example-bootstrap.py
Normal file
108
example-bootstrap.py
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
import click
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
|
||||||
|
from solar.core import actions
|
||||||
|
from solar.core import resource
|
||||||
|
from solar.core import signals
|
||||||
|
from solar.core import validation
|
||||||
|
from solar.core.resource import virtual_resource as vr
|
||||||
|
from solar import errors
|
||||||
|
|
||||||
|
from solar.interfaces.db import get_db
|
||||||
|
|
||||||
|
|
||||||
|
GIT_PUPPET_LIBS_URL = 'https://github.com/CGenie/puppet-libs-resource'
|
||||||
|
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
# Resource for repository OR puppet apt-module in run.pp
|
||||||
|
# add-apt-repository cloud-archive:juno
|
||||||
|
# To discuss: install stuff in Docker container
|
||||||
|
|
||||||
|
# NOTE
|
||||||
|
# No copy of manifests, pull from upstream (implemented in the puppet handler)
|
||||||
|
# Official puppet manifests, not fuel-library
|
||||||
|
|
||||||
|
|
||||||
|
db = get_db()
|
||||||
|
|
||||||
|
|
||||||
|
@click.group()
|
||||||
|
def main():
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def setup_resources():
|
||||||
|
db.clear()
|
||||||
|
|
||||||
|
signals.Connections.clear()
|
||||||
|
|
||||||
|
node1, node2 = vr.create('nodes', 'templates/nodes.yml', {})
|
||||||
|
|
||||||
|
solar_bootstrap1 = vr.create('solar_bootstrap1', 'resources/solar_bootstrap', {'master_ip': '10.0.0.2'})[0]
|
||||||
|
solar_bootstrap2 = vr.create('solar_bootstrap2', 'resources/solar_bootstrap', {'master_ip': '10.0.0.2'})[0]
|
||||||
|
|
||||||
|
signals.connect(node1, solar_bootstrap1)
|
||||||
|
signals.connect(node2, solar_bootstrap2)
|
||||||
|
|
||||||
|
has_errors = False
|
||||||
|
for r in locals().values():
|
||||||
|
if not isinstance(r, resource.Resource):
|
||||||
|
continue
|
||||||
|
|
||||||
|
print 'Validating {}'.format(r.name)
|
||||||
|
errors = validation.validate_resource(r)
|
||||||
|
if errors:
|
||||||
|
has_errors = True
|
||||||
|
print 'ERROR: %s: %s' % (r.name, errors)
|
||||||
|
|
||||||
|
if has_errors:
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
resources_to_run = [
|
||||||
|
'solar_bootstrap1',
|
||||||
|
'solar_bootstrap2',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@click.command()
|
||||||
|
def deploy():
|
||||||
|
setup_resources()
|
||||||
|
|
||||||
|
# run
|
||||||
|
resources = map(resource.wrap_resource, db.get_list(collection=db.COLLECTIONS.resource))
|
||||||
|
resources = {r.name: r for r in resources}
|
||||||
|
|
||||||
|
for name in resources_to_run:
|
||||||
|
try:
|
||||||
|
actions.resource_action(resources[name], 'run')
|
||||||
|
except errors.SolarError as e:
|
||||||
|
print 'WARNING: %s' % str(e)
|
||||||
|
raise
|
||||||
|
|
||||||
|
time.sleep(10)
|
||||||
|
|
||||||
|
|
||||||
|
@click.command()
|
||||||
|
def undeploy():
|
||||||
|
resources = map(resource.wrap_resource, db.get_list(collection=db.COLLECTIONS.resource))
|
||||||
|
resources = {r.name: r for r in resources}
|
||||||
|
|
||||||
|
for name in reversed(resources_to_run):
|
||||||
|
try:
|
||||||
|
actions.resource_action(resources[name], 'remove')
|
||||||
|
except errors.SolarError as e:
|
||||||
|
print 'WARNING: %s' % str(e)
|
||||||
|
|
||||||
|
db.clear()
|
||||||
|
|
||||||
|
signals.Connections.clear()
|
||||||
|
|
||||||
|
|
||||||
|
main.add_command(deploy)
|
||||||
|
main.add_command(undeploy)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
@ -548,7 +548,6 @@ resources_to_run = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@click.command()
|
@click.command()
|
||||||
def deploy():
|
def deploy():
|
||||||
setup_resources()
|
setup_resources()
|
||||||
|
12
resources/solar_bootstrap/actions/run.yaml
Normal file
12
resources/solar_bootstrap/actions/run.yaml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
|
||||||
|
# TODO: this shouldn't be outside of the resource directory
|
||||||
|
- hosts: all
|
||||||
|
sudo: yes
|
||||||
|
tasks:
|
||||||
|
- script: /vagrant/bootstrap/playbooks/files/ubuntu-ansible.sh
|
||||||
|
- include: /vagrant/bootstrap/playbooks/tasks/cinder.yml
|
||||||
|
#- include: celery.yml tags=['master'] celery_dir=/var/run/celery
|
||||||
|
- include: /vagrant/bootstrap/playbooks/build-main.yml
|
||||||
|
- include: /vagrant/bootstrap/playbooks/custom-configs.yml master_ip={{ master_ip }}
|
||||||
|
- include: /vagrant/bootstrap/playbooks/celery.yml tags=slave
|
18
resources/solar_bootstrap/meta.yaml
Normal file
18
resources/solar_bootstrap/meta.yaml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
handler: ansible
|
||||||
|
id: 'solar_bootstrap'
|
||||||
|
input:
|
||||||
|
ip:
|
||||||
|
schema: str!
|
||||||
|
value:
|
||||||
|
ssh_key:
|
||||||
|
schema: str!
|
||||||
|
value:
|
||||||
|
ssh_user:
|
||||||
|
schema: str!
|
||||||
|
value:
|
||||||
|
|
||||||
|
master_ip:
|
||||||
|
schema: str!
|
||||||
|
value:
|
||||||
|
tags: []
|
||||||
|
version: 1.0.0
|
Loading…
Reference in New Issue
Block a user