Page MenuHomeDevCentral

No OneTemporary

diff --git a/_modules/node.py b/_modules/node.py
index 18ad56e..720e9fb 100644
--- a/_modules/node.py
+++ b/_modules/node.py
@@ -1,117 +1,146 @@
# -*- coding: utf-8 -*-
# -------------------------------------------------------------
# Salt — Node execution module
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Project: Nasqueron
# Created: 2017-10-21
# Description: Functions related to the nodes pillar entry
# License: BSD-2-Clause
# -------------------------------------------------------------
from salt.exceptions import CommandExecutionError, SaltCloudConfigError
def _get_all_nodes():
return __pillar__.get('nodes', {})
def get_all_properties(nodename=None):
'''
A function to get a node pillar configuration.
CLI Example:
salt * node.get_all_properties
'''
if nodename is None:
nodename = __grains__['id']
all_nodes = _get_all_nodes()
if nodename not in all_nodes:
raise CommandExecutionError(
SaltCloudConfigError(
"Node {0} not declared in pillar.".format(nodename)
)
)
return all_nodes[nodename]
def get(key, nodename=None):
'''
A function to get a node pillar configuration key.
CLI Example:
salt * node.get hostname
'''
return _get_property(key, nodename, None)
def _explode_key(k): return k.split(':')
def _get_first_key(k): return _explode_key(k)[0]
def _strip_first_key(k): return ':'.join(_explode_key(k)[1:])
def _get_property(key, nodename, default_value, parent=None):
if parent is None:
parent = get_all_properties(nodename)
if ':' in key:
first_key = _get_first_key(key)
if first_key in parent:
return _get_property(
_strip_first_key(key), nodename,
default_value, parent[first_key]
)
elif key in parent:
return parent[key]
return default_value
def list(key, nodename=None):
'''
A function to get a node pillar configuration.
Returns a list if found, or an empty list if not found.
CLI Example:
salt * node.list network:ipv4_aliases
'''
return _get_property(key, nodename, [])
def has(key, nodename=None):
'''
A function to get a node pillar configuration.
Returns a boolean, False if not found.
CLI Example:
salt * node.has network:ipv6_tunnel
'''
value = _get_property(key, nodename, False)
return bool(value)
def has_role(role, nodename=None):
'''
A function to determine if a node has the specified role.
Returns a boolean, False if not found.
CLI Example:
salt * node.has_role devserver
'''
return role in list('roles', nodename)
+
+
+def get_wwwroot(nodename=None):
+ '''
+ A function to determine the wwwroot folder to use.
+
+ Returns a string depending of the FQDN.
+
+ CLI Example:
+
+ salt * node.get_wwwroot
+ '''
+ hostname = _get_property("hostname", nodename, None)
+
+ if hostname is None:
+ raise CommandExecutionError(
+ SaltCloudConfigError(
+ "Node {0} doesn't have a hostname property".format(nodename)
+ )
+ )
+
+ if hostname.count('.') < 2:
+ return "wwwroot/{0}/www".format(hostname)
+
+ fqdn = hostname.split(".")
+ return "wwwroot/{1}/{0}".format(
+ ".".join(fqdn[0:-2]),
+ ".".join(fqdn[-2:])
+ )
diff --git a/_tests/data/forests.yaml b/_tests/data/forests.yaml
index 2fb6208..34de661 100644
--- a/_tests/data/forests.yaml
+++ b/_tests/data/forests.yaml
@@ -1,29 +1,31 @@
forests:
- brethil
- fangorn
- lothlorien
nodes:
egladil:
forest: lothlorien
+ hostname: egladil.lothlorien.forest
entwash:
forest: fangorn
+ hostname: entwash.node
shellgroups_ubiquity:
- ubiquity
shellgroups_by_forest:
lothlorien:
- caras_galadhon
shellgroups:
ubiquity: {}
caras_galadhon:
members:
- amdir
- amroth
shellusers:
amdir: {}
amroth: {}
galadriel: {}
diff --git a/_tests/modules/test_node.py b/_tests/modules/test_node.py
new file mode 100644
index 0000000..995b310
--- /dev/null
+++ b/_tests/modules/test_node.py
@@ -0,0 +1,24 @@
+import imp
+import unittest
+
+
+salt_test_case = imp.load_source('salt_test_case', "salt_test_case.py")
+node = imp.load_source('node', "../_modules/node.py")
+
+
+class Testinstance(unittest.TestCase, salt_test_case.SaltTestCase):
+
+ def setUp(self):
+ self.initialize_mocks()
+ self.instance = node
+
+ self.mock_pillar('data/forests.yaml')
+
+ self.mock_grains()
+ self.grains['id'] = 'egladil'
+
+ def test_get_wwwroot(self):
+ self.assertEqual("wwwroot/lothlorien.forest/egladil",
+ node.get_wwwroot())
+ self.assertEqual("wwwroot/entwash.node/www",
+ node.get_wwwroot('entwash'))
diff --git a/roles/shellserver/eglide-website/init.sls b/roles/shellserver/eglide-website/init.sls
index f89f50e..655a178 100644
--- a/roles/shellserver/eglide-website/init.sls
+++ b/roles/shellserver/eglide-website/init.sls
@@ -1,45 +1,49 @@
# -------------------------------------------------------------
# Salt — Provision www.eglide.org website
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Project: Eglide
# Created: 2016-09-12
# License: Trivial work, not eligible to copyright
# -------------------------------------------------------------
# -------------------------------------------------------------
# Deploy /opt/staging/wwwroot/eglide.org/www to www.eglide.org
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+{% set wwwroot = salt['node.get_wwwroot']() %}
+{% set wwwuser = "www-data" %}
+{% set wwwgroup = "www-data" %}
+
/var/www/html:
file.recurse:
- - source: salt://wwwroot/eglide.org/www
+ - source: salt://{{ wwwroot }}
- exclude_pat: E@.git
- include_empty: True
- clean: True
- - user: www-data
- - group: www-data
+ - user: {{ wwwuser }}
+ - group: {{ wwwgroup }}
- dir_mode: 711
- file_mode: 644
/var/wwwroot/paysannerebelle.com/robot/:
file.directory:
- user: hlp
- - group: www-data
+ - group: {{ wwwgroup }}
- dir_mode: 711
- makedirs: True
# -------------------------------------------------------------
# Nginx logs
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
/var/log/www/eglide.org:
file.directory:
- user: root
- - group: www-data
+ - group: {{ wwwgroup }}
- dir_mode: 750
/var/log/www/paysannerebelle.com:
file.directory:
- user: hlp
- - group: www-data
+ - group: {{ wwwgroup }}
- dir_mode: 750

File Metadata

Mime Type
text/x-diff
Expires
Mon, Nov 25, 10:31 (1 d, 20 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2260008
Default Alt Text
(6 KB)

Event Timeline