Add SVN provider for downloading dependencies
Git wont allow you to download only one directory from github, (actually there is a way - with sparse download, but it is complicated), but svn provides quite simple and user friendly way of downloading directory from github
This commit is contained in:
parent
9dcf2bc4a3
commit
f6b7cf7843
@ -20,4 +20,9 @@ input:
|
|||||||
value:
|
value:
|
||||||
container_name:
|
container_name:
|
||||||
schema: str!
|
schema: str!
|
||||||
value:
|
value:
|
||||||
|
roles:
|
||||||
|
schema: [{value: str}]
|
||||||
|
value:
|
||||||
|
- https://github.com/stackforge/os-ansible-deployment/trunk/playbooks/roles/lxc_container_create
|
||||||
|
- https://github.com/stackforge/os-ansible-deployment/trunk/playbooks/roles/lxc_container_destroy
|
||||||
|
@ -11,4 +11,10 @@ input:
|
|||||||
value:
|
value:
|
||||||
ssh_user:
|
ssh_user:
|
||||||
schema: str!
|
schema: str!
|
||||||
value:
|
value:
|
||||||
|
roles:
|
||||||
|
schema: [{value: str}]
|
||||||
|
value:
|
||||||
|
- https://github.com/stackforge/os-ansible-deployment/trunk/playbooks/roles/lxc_hosts
|
||||||
|
- https://github.com/stackforge/os-ansible-deployment/trunk/playbooks/roles/pip_install
|
||||||
|
- https://github.com/stackforge/os-ansible-deployment/trunk/playbooks/roles/apt_package_pinning
|
||||||
|
@ -9,10 +9,15 @@ import ansible.constants as C
|
|||||||
|
|
||||||
from solar.core.handlers import base
|
from solar.core.handlers import base
|
||||||
from solar import errors
|
from solar import errors
|
||||||
|
from solar.core.provider import SVNProvider
|
||||||
|
|
||||||
|
|
||||||
class AnsiblePlaybook(base.BaseHandler):
|
class AnsiblePlaybook(base.BaseHandler):
|
||||||
|
|
||||||
|
def download_roles(self, urls):
|
||||||
|
for url in urls:
|
||||||
|
SVNProvider(url, '/etc/ansible/roles').run()
|
||||||
|
|
||||||
def action(self, resource, action):
|
def action(self, resource, action):
|
||||||
action_file = os.path.join(
|
action_file = os.path.join(
|
||||||
resource.metadata['actions_path'],
|
resource.metadata['actions_path'],
|
||||||
@ -22,6 +27,9 @@ class AnsiblePlaybook(base.BaseHandler):
|
|||||||
runner_cb = callbacks.PlaybookRunnerCallbacks(stats, verbose=utils.VERBOSITY)
|
runner_cb = callbacks.PlaybookRunnerCallbacks(stats, verbose=utils.VERBOSITY)
|
||||||
|
|
||||||
variables = resource.args_dict()
|
variables = resource.args_dict()
|
||||||
|
if 'roles' in variables:
|
||||||
|
self.download_roles(variables['roles'])
|
||||||
|
|
||||||
remote_user = variables.get('ssh_user') or C.DEFAULT_REMOTE_USER
|
remote_user = variables.get('ssh_user') or C.DEFAULT_REMOTE_USER
|
||||||
private_key_file = variables.get('ssh_key') or C.DEFAULT_PRIVATE_KEY_FILE
|
private_key_file = variables.get('ssh_key') or C.DEFAULT_PRIVATE_KEY_FILE
|
||||||
if variables.get('ip'):
|
if variables.get('ip'):
|
||||||
|
@ -103,3 +103,23 @@ class RemoteZipProvider(BaseProvider):
|
|||||||
self.directory = os.path.join(directory, path)
|
self.directory = os.path.join(directory, path)
|
||||||
else:
|
else:
|
||||||
self.directory = directory
|
self.directory = directory
|
||||||
|
|
||||||
|
|
||||||
|
class SVNProvider(BaseProvider):
|
||||||
|
"""With git you cant checkout only directory from repo,
|
||||||
|
but with svn you can
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, url, path='.'):
|
||||||
|
self.url = url
|
||||||
|
self.path = path
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
if not os.path.exists(self.path):
|
||||||
|
os.makedirs(self.path)
|
||||||
|
|
||||||
|
if not os.path.exists(self.url.rsplit('/', 1)[-1]):
|
||||||
|
fabric.local(
|
||||||
|
'cd {path} && svn checkout {url}'.format(
|
||||||
|
path=self.path,
|
||||||
|
url=self.url))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user