Merge branch 'master' into dry-run

This commit is contained in:
Przemyslaw Kaminski 2015-07-17 15:16:25 +02:00
commit f6d04062a5
24 changed files with 130 additions and 33 deletions

View File

@ -44,7 +44,7 @@ def deploy():
signals.connect(node1, mariadb_service1) signals.connect(node1, mariadb_service1)
# RABBIT # RABBIT
rabbitmq_service1 = vr.create('rabbitmq1', 'resources/rabbitmq_service', {'management_port': 15672, 'port': 5672, 'node_name': 'rabbitmq_service1'})[0] rabbitmq_service1 = vr.create('rabbitmq1', 'resources/rabbitmq_service', {'management_port': 15672, 'port': 5672})[0]
openstack_vhost = vr.create('openstack_vhost', 'resources/rabbitmq_vhost/', {'vhost_name': 'openstack'})[0] openstack_vhost = vr.create('openstack_vhost', 'resources/rabbitmq_vhost/', {'vhost_name': 'openstack'})[0]
openstack_rabbitmq_user = vr.create('openstack_rabbitmq_user', 'resources/rabbitmq_user/', {'user_name': 'openstack', 'password': 'openstack_password'})[0] openstack_rabbitmq_user = vr.create('openstack_rabbitmq_user', 'resources/rabbitmq_user/', {'user_name': 'openstack', 'password': 'openstack_password'})[0]

View File

@ -15,7 +15,7 @@
- apt: name=python-pudb state=present - apt: name=python-pudb state=present
#- apt: name=python-pip state=present #- apt: name=python-pip state=present
- shell: pip install docker-py==1.1.0 - shell: pip install docker-py==1.1.0
- shell: pip install python-keystoneclient==1.5.0 - apt: name=python-keystoneclient state=present
- apt: name=redis-server state=present - apt: name=redis-server state=present
#- apt: name=python-redis state=present #- apt: name=python-redis state=present

View File

@ -0,0 +1,9 @@
- hosts: localhost
sudo: yes
vars:
var1: 'playbook'
roles:
- { role: "test_role" }
tasks:
- debug: msg="VAR1 value is {{var1}}"
- fail: msg='just test failure'

View File

@ -0,0 +1,4 @@
var1: initial
uuid: stuff
def1: the_same

View File

@ -0,0 +1 @@
- debug: msg="Variable1 {{ var1 }} with uuid {{ uuid }} and default var {{ def1 }}"

View File

@ -0,0 +1,11 @@
id: ansible_sample
handler: ansible_playbook
version: 0.0.1
input:
var1:
type: str!
value: meta
uuid:
type: str!
value: 'aa1das1231'

View File

@ -0,0 +1,6 @@
- hosts: '*'
sudo: yes
vars:
default1: playbook
tasks:
- debug: msg="my message {{default1}}"

View File

@ -0,0 +1,16 @@
id: ansible_sample
handler: ansible_playbook
version: 0.0.1
input:
ip:
type: str!
value:
ssh_user:
type: str!
value:
ssh_key:
type: str!
value:
default1:
type: str!
value: meta

View File

@ -2,6 +2,6 @@
sudo: yes sudo: yes
tasks: tasks:
- name: install python-keystoneclient - name: install python-keystoneclient
shell: pip install python-keystoneclient shell: apt-get install python-keystoneclient
- name: keystone role - name: keystone role
keystone_user: endpoint=http://{{keystone_host}}:{{keystone_port}}/v2.0/ token={{admin_token}} user={{user_name}} tenant={{tenant_name}} role={{role_name}} state=present keystone_user: endpoint=http://{{keystone_host}}:{{keystone_port}}/v2.0/ token={{admin_token}} user={{user_name}} tenant={{tenant_name}} role={{role_name}} state=present

View File

@ -2,6 +2,6 @@
sudo: yes sudo: yes
tasks: tasks:
- name: install python-keystoneclient - name: install python-keystoneclient
shell: pip install python-keystoneclient shell: apt-get install python-keystoneclient
- name: keystone tenant - name: keystone tenant
keystone_user: endpoint=http://{{keystone_host}}:{{keystone_port}}/v2.0/ token={{admin_token}} tenant={{tenant_name}} state=present keystone_user: endpoint=http://{{keystone_host}}:{{keystone_port}}/v2.0/ token={{admin_token}} tenant={{tenant_name}} state=present

View File

@ -2,6 +2,6 @@
sudo: yes sudo: yes
tasks: tasks:
- name: install python-keystoneclient - name: install python-keystoneclient
shell: pip install python-keystoneclient shell: apt-get install python-keystoneclient
- name: keystone user - name: keystone user
keystone_user: endpoint=http://{{ keystone_host }}:{{ keystone_port }}/v2.0/ token={{ admin_token }} user={{ user_name }} password={{ user_password }} tenant={{ tenant_name }} state=present keystone_user: endpoint=http://{{ keystone_host }}:{{ keystone_port }}/v2.0/ token={{ admin_token }} user={{ user_name }} password={{ user_password }} tenant={{ tenant_name }} state=present

View File

@ -5,12 +5,8 @@ $management_port = "${resource['input']['management_port']['value']}"
$node_name = $resource['input']['node_name']['value'] $node_name = $resource['input']['node_name']['value']
class { '::rabbitmq': class { '::rabbitmq':
service_manage => false, service_manage => true,
port => $port, port => $port,
management_port => $management_port, management_port => $management_port,
delete_guest_user => true, delete_guest_user => true,
environment_variables => {
'RABBITMQ_NODENAME' => $node_name,
'RABBITMQ_SERVICENAME' => 'RabbitMQ'
}
} }

View File

@ -4,4 +4,3 @@
- new_rabbitmq_user: user={{user_name}} - new_rabbitmq_user: user={{user_name}}
vhost={{vhost_name}} vhost={{vhost_name}}
state=absent state=absent
node={{node_name}}

View File

@ -8,4 +8,3 @@
read_priv=.* read_priv=.*
write_priv=.* write_priv=.*
state=present state=present
node={{node_name}}

View File

@ -2,9 +2,6 @@ id: rabbitmq_user
handler: ansible handler: ansible
version: 1.0.0 version: 1.0.0
input: input:
node_name:
schema: str!
value:
user_name: user_name:
schema: str! schema: str!
value: openstack value: openstack

View File

@ -3,4 +3,3 @@
tasks: tasks:
- new_rabbitmq_vhost: name={{vhost_name}} - new_rabbitmq_vhost: name={{vhost_name}}
state=absent state=absent
node={{node_name}}

View File

@ -2,5 +2,4 @@
sudo: yes sudo: yes
tasks: tasks:
- new_rabbitmq_vhost: name={{vhost_name}} - new_rabbitmq_vhost: name={{vhost_name}}
node={{node_name}}
state=present state=present

View File

@ -2,9 +2,6 @@ id: rabbitmq_vhost
handler: ansible handler: ansible
version: 1.0.0 version: 1.0.0
input: input:
node_name:
schema: str!
value:
vhost_name: vhost_name:
schema: str! schema: str!
value: openstack value: openstack

View File

@ -351,19 +351,19 @@ def init_cli_resource():
pass pass
@resource.command() @resource.command()
@click.argument('resource_name') @click.argument('action')
@click.argument('action_name') @click.argument('resource')
@click.option('-d', '--dry-run', default=False, is_flag=True) @click.option('-d', '--dry-run', default=False, is_flag=True)
@click.option('-m', '--dry-run-mapping', default='{}') @click.option('-m', '--dry-run-mapping', default='{}')
def action(dry_run_mapping, dry_run, action_name, resource_name): def action(dry_run_mapping, dry_run, action, resource):
if dry_run: if dry_run:
dry_run_executor = DryRunExecutor(mapping=json.loads(dry_run_mapping)) dry_run_executor = DryRunExecutor(mapping=json.loads(dry_run_mapping))
click.echo( click.echo(
'action {} for resource {}'.format(action_name, resource_name) 'action {} for resource {}'.format(action, resource)
) )
r = sresource.load(resource_name) actions.resource_action(sresource.load(resource), action)
actions.resource_action(r, action_name)
if dry_run: if dry_run:
click.echo('EXECUTED:') click.echo('EXECUTED:')

View File

@ -1,12 +1,13 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from solar.core.handlers.ansible import Ansible from solar.core.handlers.ansible_template import AnsibleTemplate
from solar.core.handlers.ansible_playbook import AnsiblePlaybook
from solar.core.handlers.base import Empty from solar.core.handlers.base import Empty
from solar.core.handlers.puppet import Puppet from solar.core.handlers.puppet import Puppet
from solar.core.handlers.shell import Shell from solar.core.handlers.shell import Shell
HANDLERS = {'ansible': Ansible, HANDLERS = {'ansible': AnsibleTemplate,
'puppet': Puppet, 'ansible_playbook': AnsiblePlaybook,
'shell': Shell, 'shell': Shell,
'none': Empty} 'none': Empty}

View File

@ -0,0 +1,51 @@
# -*- coding: utf-8 -*-
import os
from ansible.playbook import PlayBook
from ansible import utils
from ansible import callbacks
import ansible.constants as C
from solar.core.handlers import base
from solar import errors
class AnsiblePlaybook(base.BaseHandler):
def action(self, resource, action):
action_file = os.path.join(
resource.metadata['actions_path'],
resource.metadata['actions'][action])
stats = callbacks.AggregateStats()
playbook_cb = callbacks.PlaybookCallbacks(verbose=utils.VERBOSITY)
runner_cb = callbacks.PlaybookRunnerCallbacks(stats, verbose=utils.VERBOSITY)
variables = resource.args_dict()
remote_user = variables.get('ssh_user') or C.DEFAULT_REMOTE_USER
private_key_file = variables.get('ssh_key') or C.DEFAULT_PRIVATE_KEY_FILE
if variables.get('ip'):
host = variables['ip']
transport = C.DEFAULT_TRANSPORT
else:
host = 'localhost'
transport = 'local'
play = PlayBook(
playbook=action_file,
remote_user=remote_user,
host_list = [host],
private_key_file=private_key_file,
extra_vars=variables,
callbacks=playbook_cb,
runner_callbacks=runner_cb,
stats=stats,
transport=transport)
play.run()
summary = stats.summarize(host)
if summary.get('unreachable') or summary.get('failures'):
raise errors.SolarError(
'Ansible playbook %s failed with next summary %s',
action_file, summary)

View File

@ -3,10 +3,10 @@ from fabric import api as fabric_api
import os import os
from solar.core.log import log from solar.core.log import log
from solar.core.handlers.base import BaseHandler from solar.core.handlers.base import TempFileHandler
class Ansible(BaseHandler): class AnsibleTemplate(TempFileHandler):
def action(self, resource, action_name): def action(self, resource, action_name):
inventory_file = self._create_inventory(resource) inventory_file = self._create_inventory(resource)
playbook_file = self._create_playbook(resource, action_name) playbook_file = self._create_playbook(resource, action_name)

View File

@ -9,6 +9,18 @@ from solar.core.log import log
class BaseHandler(object): class BaseHandler(object):
def __init__(self, resources):
self.resources = resources
def __enter__(self):
return self
def __exit__(self, exc, value, traceback):
return
class TempFileHandler(BaseHandler):
def __init__(self, resources): def __init__(self, resources):
self.dst = tempfile.mkdtemp() self.dst = tempfile.mkdtemp()
self.resources = resources self.resources = resources

View File

@ -1,10 +1,10 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from fabric import api as fabric_api from fabric import api as fabric_api
from solar.core.handlers.base import BaseHandler from solar.core.handlers.base import TempFileHandler
class Shell(BaseHandler): class Shell(TempFileHandler):
def action(self, resource, action_name): def action(self, resource, action_name):
action_file = self._compile_action_file(resource, action_name) action_file = self._compile_action_file(resource, action_name)
fabric_api.local('bash {}'.format(action_file)) fabric_api.local('bash {}'.format(action_file))