Page Menu
Home
DevCentral
Search
Configure Global Search
Log In
Files
F3768790
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
6 KB
Referenced Files
None
Subscribers
None
View Options
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
Details
Attached
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)
Attached To
Mode
rOPS Nasqueron Operations
Attached
Detach File
Event Timeline
Log In to Comment