aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimoney, Dan (dt5972) <dt5972@att.com>2018-09-12 11:18:01 -0400
committerTimoney, Dan (dt5972) <dt5972@att.com>2018-09-12 11:18:01 -0400
commit6e24c8bfaa2fee62775f690644c97113195cc831 (patch)
treed5ff110d45fb4810202d223bc6b656798eb8e42c
parent4e2db0d6e56bc19425e6afa3efc7011820942e9e (diff)
Update SDNC to use CCSDK ansible server as base
Update SDNC to use CCSDK ansible server as base for its instance of ansible server Change-Id: Idaf1c83cf50ee526f17b97a3b2e376f6ad3a696b Issue-ID: CCSDK-442 Signed-off-by: Timoney, Dan (dt5972) <dt5972@att.com> Former-commit-id: 01809240263c1d5ddad9e1e990a9610bdceaa83a
-rw-r--r--installation/ansible-server/pom.xml68
-rw-r--r--installation/ansible-server/src/main/docker/Dockerfile2
-rwxr-xr-xinstallation/ansible-server/src/main/scripts/AnsibleModule.py170
-rwxr-xr-xinstallation/ansible-server/src/main/scripts/AnsibleSql.py322
-rwxr-xr-xinstallation/ansible-server/src/main/scripts/LoadAnsibleMySql.py207
-rw-r--r--installation/ansible-server/src/main/scripts/README103
-rwxr-xr-xinstallation/ansible-server/src/main/scripts/RestServer.py948
-rw-r--r--installation/ansible-server/src/main/scripts/RestServer_config55
-rw-r--r--installation/ansible-server/src/main/scripts/startAnsibleServer.sh20
9 files changed, 1 insertions, 1894 deletions
diff --git a/installation/ansible-server/pom.xml b/installation/ansible-server/pom.xml
index f244477c..e5e78019 100644
--- a/installation/ansible-server/pom.xml
+++ b/installation/ansible-server/pom.xml
@@ -82,26 +82,6 @@
</execution>
<execution>
- <id>copy-scripts</id>
- <goals>
- <goal>copy-resources</goal>
- </goals><!-- here the phase you need -->
- <phase>validate</phase>
- <configuration>
- <outputDirectory>${basedir}/target/docker-stage/opt/onap/sdnc</outputDirectory>
- <resources>
- <resource>
- <directory>src/main/scripts</directory>
- <includes>
- <include>*</include>
- </includes>
- <filtering>false</filtering>
- </resource>
- </resources>
- </configuration>
- </execution>
-
- <execution>
<id>copy-yml</id>
<goals>
<goal>copy-resources</goal>
@@ -122,54 +102,6 @@
</execution>
</executions>
</plugin>
-
- <plugin>
- <artifactId>exec-maven-plugin</artifactId>
- <groupId>org.codehaus.mojo</groupId>
- <version>1.5.0</version>
- <executions>
- <execution>
- <id>change python permissions</id>
- <phase>process-sources</phase>
- <goals>
- <goal>exec</goal>
- </goals>
- <configuration>
- <executable>/usr/bin/find</executable>
- <arguments>
- <argument>${basedir}/target/docker-stage/opt/onap/sdnc</argument>
- <argument>-name</argument>
- <argument>*.py</argument>
- <argument>-exec</argument>
- <argument>chmod</argument>
- <argument>+x</argument>
- <argument>{}</argument>
- <argument>;</argument>
- </arguments>
- </configuration>
- </execution>
- <execution>
- <id>change shell permissions</id>
- <phase>process-sources</phase>
- <goals>
- <goal>exec</goal>
- </goals>
- <configuration>
- <executable>/usr/bin/find</executable>
- <arguments>
- <argument>${basedir}/target/docker-stage/opt/onap/sdnc</argument>
- <argument>-name</argument>
- <argument>*.sh</argument>
- <argument>-exec</argument>
- <argument>chmod</argument>
- <argument>+x</argument>
- <argument>{}</argument>
- <argument>;</argument>
- </arguments>
- </configuration>
- </execution>
- </executions>
- </plugin>
</plugins>
</build>
diff --git a/installation/ansible-server/src/main/docker/Dockerfile b/installation/ansible-server/src/main/docker/Dockerfile
index 86b368c9..cc93f12a 100644
--- a/installation/ansible-server/src/main/docker/Dockerfile
+++ b/installation/ansible-server/src/main/docker/Dockerfile
@@ -1,5 +1,5 @@
# Base ubuntu with added packages needed for open ecomp
-FROM onap/ccsdk-ubuntu-image:${ccsdk.distribution.version}
+FROM onap/ccsdk-ansible-server-image:${ccsdk.distribution.version}
LABEL maintainer="SDN-C Team (sdnc@lists.openecomp.org)"
diff --git a/installation/ansible-server/src/main/scripts/AnsibleModule.py b/installation/ansible-server/src/main/scripts/AnsibleModule.py
deleted file mode 100755
index 3458c28b..00000000
--- a/installation/ansible-server/src/main/scripts/AnsibleModule.py
+++ /dev/null
@@ -1,170 +0,0 @@
-'''
-/*-
-* ============LICENSE_START=======================================================
-* ONAP : APPC
-* ================================================================================
-* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
-* ================================================================================
-* Copyright (C) 2017 Amdocs
-* =============================================================================
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* ECOMP is a trademark and service mark of AT&T Intellectual Property.
-* ============LICENSE_END=========================================================
-*/
-'''
-
-import os, subprocess
-import sys
-from collections import namedtuple
-import json
-
-import uuid
-
-def ansibleSysCall (inventory_path, playbook_path, nodelist, mandatory,
- envparameters, localparameters, lcm, timeout):
-
- print "***> in AnsibleModule.ansibleSysCall"
- print " EnvParameters: ", envparameters
- print " LocalParameters:", localparameters
- print " Inventory: ", inventory_path
- print " Playbook: ", playbook_path
- print " NodeList: ", nodelist
- print " Mandatory: ", mandatory
- print " Timeout: ", timeout
- log = []
-
- str_parameters = ''
-
- if not envparameters == {}:
- for key in envparameters:
- if str_parameters == '':
- str_parameters = '"' + str(key) + '=\'' + str(envparameters[key]) + '\''
- else:
- str_parameters += ' ' + str(key) + '=\'' + str(envparameters[key]) + '\''
- str_parameters += '"'
-
- if len(str_parameters) > 0:
- cmd = 'timeout --signal=KILL ' + str(timeout) + \
- ' ansible-playbook -v --extra-vars ' + str_parameters + ' -i ' + \
- inventory_path + ' ' + playbook_path
- else:
- cmd = 'timeout --signal=KILL ' + str(timeout) + \
- ' ansible-playbook -v -i ' + inventory_path + ' ' + playbook_path
-
- print " CMD: ", cmd
-
- print "\n =================ANSIBLE STDOUT BEGIN============================================\n"
- p = subprocess.Popen(cmd, shell=True,
- stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT)
- # p.wait()
- (stdout_value, err) = p.communicate()
-
- stdout_value_cleanup = ''
- for line in stdout_value:
- stdout_value_cleanup += line.replace(' ', ' ')
- stdout_value = stdout_value_cleanup.splitlines()
-
- ParseFlag = False
- retval = {}
- returncode = p.returncode
-
- if returncode == 137:
-
- print " ansible-playbook system call timed out"
- # ansible-playbook system call timed out
- for line in stdout_value: # p.stdout.readlines():
- log.append (line)
-
-
- elif 'ping' in lcm:
-
- targetnode = envparameters['TargetNode'].split(' ')
- str_json = None
- for line in stdout_value: # p.stdout.readlines():
- print line # line,
- if "PLAY RECAP" in line:
- ParseFlag = False
- if ParseFlag and len(line.strip())>0:
- str_json += line.strip()
- if "TASK [debug]" in line:
- ParseFlag = True
- str_json = ''
- log.append (line)
-
- if str_json:
- if '=>' in str_json:
- out_json =eval(str_json.split('=>')[1].replace('true','True').replace('false','False'))
-
- if 'ping.stdout_lines' in out_json:
- for node in targetnode:
- ip_address = node
- ok_flag = '0'
- changed_flag = '0'
- unreachable_flag = '0'
- failed_flag = '1'
- for rec in out_json['ping.stdout_lines']:
- if node in rec and "is alive" in rec:
- ok_flag = '1'
- changed_flag = '1'
- unreachable_flag = '0'
- failed_flag = '0'
- for rec in out_json['ping.stdout_lines']:
- if node in rec and "address not found" in rec:
- ok_flag = '0'
- changed_flag = '0'
- unreachable_flag = '1'
- failed_flag = '0'
- retval[ip_address]=[ok_flag, changed_flag, unreachable_flag,
- failed_flag]
- else:
-
- for line in stdout_value: # p.stdout.readlines():
- print line # line,
- if ParseFlag and len(line.strip())>0:
- ip_address = line.split(':')[0].strip()
- ok_flag = line.split(':')[1].strip().split('=')[1].split('changed')[0].strip()
- changed_flag = line.split(':')[1].strip().split('=')[2].split('unreachable')[0].strip()
- unreachable_flag = line.split(':')[1].strip().split('=')[3].split('failed')[0].strip()
- failed_flag = line.split(':')[1].strip().split('=')[4].strip()
- retval[ip_address]=[ok_flag, changed_flag, unreachable_flag, failed_flag]
- if "PLAY RECAP" in line:
- ParseFlag = True
- log.append (line)
-
- # retval['p'] = p.wait()
-
- print " =================ANSIBLE STDOUT END==============================================\n"
-
- return retval, log, returncode
-
-if __name__ == '__main__':
-
- from multiprocessing import Process, Value, Array, Manager
- import time
-
- nodelist = 'host'
-
- playbook_file = 'ansible_sleep@0.00.yml'
-
-
- d = Manager().dict()
-
- p = Process(nodelist=ansible_call, args=('ansible_module_config', playbook_file, nodelist,d, ))
- p.start()
-
- print "Process running"
- print d
- p.join()
- print d
diff --git a/installation/ansible-server/src/main/scripts/AnsibleSql.py b/installation/ansible-server/src/main/scripts/AnsibleSql.py
deleted file mode 100755
index ab58a96c..00000000
--- a/installation/ansible-server/src/main/scripts/AnsibleSql.py
+++ /dev/null
@@ -1,322 +0,0 @@
-'''
-/*-
-* ============LICENSE_START=======================================================
-* ONAP : APPC
-* ================================================================================
-* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
-* ================================================================================
-* Copyright (C) 2017 Amdocs
-* =============================================================================
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* ECOMP is a trademark and service mark of AT&T Intellectual Property.
-* ============LICENSE_END=========================================================
-*/
-'''
-
-import pymysql, sys
-from os import listdir
-from os.path import isfile, join
-
-class mySql():
-
- def __init__(self, myhost, myuser, mypasswd, mydb):
- self.con = True
- self.error = ''
- self.db = None
- try:
- self.db = pymysql.connect(host=myhost,
- user=myuser,
- passwd=mypasswd,
- db=mydb)
- self.cur = self.db.cursor()
- except Exception as e:
- self.error = e[1]
- self.con = False
-
- def Query (self, myquery, val = None):
- results = None
- try:
- if val:
- self.cur.execute(myquery, val)
- else:
- self.cur.execute(myquery)
- self.db.commit()
- results = self.cur.fetchall()
- except Exception, e:
- results = repr(e)
- return results
-
- def Close (self):
- if self.db:
- self.db.close()
-
-def loadPlaybook (sqlintf, value, version, ext = '.yml'):
-
- errorCode = 0
- diag = ''
-
- # Test if primary key already defined
- query = "SELECT name FROM playbook WHERE name='" + value +"'"
- results = sqlintf.Query (query)
- if len(results) > 0:
- pass
- else:
- query = "INSERT INTO playbook (name) VALUES ('" + value + "')"
- results = sqlintf.Query (query)
- if len(results) > 0:
- errorCode = 1
- diag = results
-
- # Load playbook
- file = open(playbook_path + value + ext, 'r')
- load_file = file.read()
-
- if not errorCode:
- sql = "UPDATE playbook SET value=%s, version=%s, type=%s WHERE name=%s"
-
- results = sqlintf.Query(sql, (load_file, version, ext, value))
-
- if len (results) > 0:
- # Error loading playbook
- errorCode = 1
- diag = results
-
- return errorCode, diag
-
-def loadCredentials (sqlintf, hostgroup, hostname, cred):
- errorCode = 0
- diag = ''
-
- # Load credentials
-
- query = "SELECT hostname,hostgroup FROM inventory WHERE hostname='" + hostname +"'"
- results = sqlintf.Query (query)
-
- if hostname in str (results):
-
- results_hostgroups = results[0][1]
-
- if hostgroup in results_hostgroups.split(','):
- query = "UPDATE inventory SET hostname='" + hostname + "',credentials='" +\
- cred +\
- "' WHERE hostname='" + hostname + "'"
- else:
-
- results_hostgroups = results_hostgroups + ',' + hostgroup
-
- query = "UPDATE inventory SET hostname='" + hostname + "',credentials='" +\
- cred + "',hostgroup='" + results_hostgroups + \
- "' WHERE hostname='" + hostname + "'"
-
- results = sqlintf.Query (query)
-
- else:
-
- query = "INSERT INTO inventory (hostgroup, hostname, credentials) VALUES ('" + \
- hostgroup + "','" + hostname + "','" + cred + "')"
- results = sqlintf.Query (query)
-
- if len (results) > 0:
- # Error loading playbook
- errorCode = 1
- diag = results
-
- return errorCode, diag
-
-
-def readPlaybook (sqlintf, value, version=None):
-
- errorCode = 0
- diag = ''
-
- print "***> in AnsibleSql.readPlaybook"
-
- if not version:
- query = "SELECT MAX(version) FROM playbook WHERE name like'" + value + "%'"
- print " Query:", query
- results = sqlintf.Query (query)
- version = results[0][0]
-
- print " Provided playbook name:", value
- print " Used version:", version
-
- results = []
- if version:
- query = "SELECT value,type FROM playbook WHERE name='" + value + "@" + version + "'"
- results = sqlintf.Query (query)
-
- print "Query:", query
- print "Results:", results
-
- if len(results) == 0:
- errorCode = 1
- else:
- if len(results[0]) == 0:
- errorCode = 1
- diag = results[0]
- else:
- diag = results[0]
-
- return value, version, errorCode, diag
-
-def readCredentials (sqlintf, tag):
- errorCode = []
- diag = []
-
- print "***> in AnsibleSql.readCredential"
-
- # Load credentials
-
- for rec in tag:
-
- # Try hostgroup
- query = "SELECT hostgroup, hostname, credentials FROM inventory WHERE hostgroup LIKE '%" + \
- rec +"%'"
- query_results = sqlintf.Query (query)
-
- results = ()
- for q in query_results:
- if rec in q[0].split(','):
- l = list(q)
- l[0] = rec
- q = tuple(l)
- results = (q,) + results
-
- if len(results) == 0:
- # Try hostname
- query = "SELECT hostgroup, hostname, credentials FROM inventory WHERE hostname='" + \
- rec +"'"
- results = sqlintf.Query (query)
-
- print " Query:", query
- print " Results:", len(results), results
-
- if len(results) == 0:
- errorCode = 1
- hostgroup = rec
- hostname = rec
- credentials = 'ansible_connection=ssh ansible_ssh_user=na ansible_ssh_private_key_file=na\n'
- diag.append([hostgroup, hostname, credentials])
- else:
- errorCode = 0
- for i in range(len (results)):
- for h in results[i][0].split(','):
- hostgroup = h
- hostname = results[i][1]
- credentials = results[i][2]
- diag.append([hostgroup, hostname, credentials])
-
- return errorCode, diag
-
-
-if __name__ == '__main__':
-
- ################################################################
- # Change below
- ################################################################
- host="localhost" # your host, usually localhost
- user="mysql_user_id" # your username
- passwd="password_4_mysql_user_id" # your password
- db="ansible" # name of the data base
-
- playbook_path = "/home/ubuntu/RestServerOpenSource/"
- inventory = "/home/ubuntu/RestServerOpenSource/Ansible_inventory"
- ################################################################
-
- onlyfiles = [f for f in listdir(playbook_path)
- if isfile(join(playbook_path, f))]
-
- sqlintf = mySql (host, user, passwd, db)
-
- # Load playbooks
-
- print "Loading playbooks"
- for file in onlyfiles:
- if "yml" in file:
-
- name = file.split (".yml")[0]
- print " Loading:", name
- version = name.split("@")[1]
- errorCode, diag = loadPlaybook (sqlintf, name, version, '.yml')
- if errorCode:
- print " Results: Failed - ", diag
- else:
- print " Results: Success"
-
- print "\nLoading inventory"
-
- # Load inventory
-
- hostgroup = None
- inv = {}
- file = open(inventory, 'r')
-
- for line in file:
-
- if '[' in line and ']' in line:
- hostgroup = line.strip().replace('[','').replace(']','')
- inv[hostgroup] = {}
- elif hostgroup and len(line.strip())>0:
- host = line.strip().split(" ")[0]
- credentials = line.replace(host,"")
- inv[hostgroup][host] = credentials
-
- file.close()
-
- for hostgroup in inv:
- print " Loading:", hostgroup
- hostfqdn = ''
- cred = ''
- for hostname in inv[hostgroup]:
- cred = inv[hostgroup][hostname]
- errorCode, diag = loadCredentials (sqlintf, hostgroup, hostname, cred)
- if errorCode:
- print " Results: Failed - ", diag
- else:
- print " Results: Success"
-
- print "\nReading playbook"
-
- # Read playbook
-
- if not sqlintf.con:
- print "Cannot connect to MySql:", sqlintf.error
- sys.exit()
-
- name = "ansible_sleep"
- print "Reading playbook:", name
- value, version, errorCode, diag = readPlaybook (sqlintf, name)
- if errorCode:
- print "Results: Failed - ", diag
- else:
- print "Results: Success"
- print value
- print version
- print diag
-
- print "\nReading inventory"
-
- # Read inventory
-
- tag = ["your_inventory_test_group_name"]
- print "Reading inventory tag:", tag
- errorCode, diag = readCredentials (sqlintf, tag)
- if errorCode:
- print "Results: Failed - ", diag
- else:
- print "Results: Success"
- print diag
-
- sqlintf.Close()
-
diff --git a/installation/ansible-server/src/main/scripts/LoadAnsibleMySql.py b/installation/ansible-server/src/main/scripts/LoadAnsibleMySql.py
deleted file mode 100755
index 0a1c78a6..00000000
--- a/installation/ansible-server/src/main/scripts/LoadAnsibleMySql.py
+++ /dev/null
@@ -1,207 +0,0 @@
-'''
-/*-
-* ============LICENSE_START=======================================================
-* ONAP : APPC
-* ================================================================================
-* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
-* ================================================================================
-* Copyright (C) 2017 Amdocs
-* =============================================================================
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* ECOMP is a trademark and service mark of AT&T Intellectual Property.
-* ============LICENSE_END=========================================================
-*/
-'''
-
-#!/usr/bin/python
-import pymysql
-from os import listdir
-from os.path import isfile, join
-
-class mySql():
-
- def __init__(self, myhost, myuser, mypasswd, mydb):
- self.db = pymysql.connect(host=myhost,
- user=myuser,
- passwd=mypasswd,
- db=mydb)
- self.cur = self.db.cursor()
-
- def Query (self, myquery, val = None):
- results = None
- error = None
- try:
- if val:
- self.cur.execute(myquery, val)
- else:
- self.cur.execute(myquery)
- self.db.commit()
- results = self.cur.fetchall()
- except Exception, e:
- error = str (e)
- return results, error
-
- def Close (self):
- self.db.close()
-
-def loadPlaybook (value, version, ext = '.yml'):
-
- errorCode = 0
- diag = ''
-
- # Test if primary key already defined
- query = "SELECT name FROM playbook WHERE name='" + value +"'"
- results, error = sqlintf.Query (query)
- if results:
- # print "Primary key already defined: Updating playbook"
- pass
- else:
- # print "Primary key not defined: Insert new playbook"
- query = "INSERT INTO playbook (name) VALUES ('" + value + "')"
- results, error = sqlintf.Query (query)
- if error:
- errorCode = 1
- diag = error
-
- # Load playbook
- file = open(playbook_path + value + ext, 'r')
- load_file = file.read()
-
- # Load playbook
-
- if not errorCode:
- sql = "UPDATE playbook SET value=%s, version=%s, type=%s WHERE name=%s"
-
- results, error = sqlintf.Query(sql, (load_file, version, ext, value))
-
- if error:
- # Error loading playbook
- errorCode = 1
- diag = error
-
- return errorCode, diag
-
-def loadCredentials (hostgroup, hostname, cred):
- errorCode = 0
- diag = ''
-
- # Load credentials
-
- query = "SELECT hostname,hostgroup FROM inventory WHERE hostname='" + hostname +"'"
- results = sqlintf.Query (query)
-
- print '==>', results
-
- if hostname in str(results):
-
- results_hostgroups = results[0][0][1]
-
- # print "Record already defined: Updating inventory"
- if hostgroup in results_hostgroups.split(','):
- query = "UPDATE inventory SET hostname='" + hostname + "',credentials='" +\
- cred +\
- "' WHERE hostname='" + hostname + "'"
- else:
-
- results_hostgroups = results_hostgroups + ',' + hostgroup
-
- query = "UPDATE inventory SET hostname='" + hostname + "',credentials='" +\
- cred + "',hostgroup='" + results_hostgroups + \
- "' WHERE hostname='" + hostname + "'"
-
- results, error = sqlintf.Query (query)
-
- else:
-
- query = "INSERT INTO inventory (hostgroup, hostname, credentials) VALUES ('" + \
- hostgroup + "','" + hostname + "','" + cred + "')"
- results, error = sqlintf.Query (query)
-
- if error:
- # Error loading credentials
- errorCode = 1
- diag = results
-
- return errorCode, diag
-
-
-if __name__ == '__main__':
-
- ################################################################
- # Change below
- ################################################################
- host="localhost" # your host, usually localhost
- user="mysql_user_id" # your username
- passwd="password_4_mysql_user_id" # your password
- db="ansible" # name of the data base
-
- playbook_path = "/home/ubuntu/RestServerOpenSource/"
- inventory = "/home/ubuntu/RestServerOpenSource/Ansible_inventory"
- ################################################################
-
- onlyfiles = [f for f in listdir(playbook_path)
- if isfile(join(playbook_path, f))]
-
- sqlintf = mySql (host, user, passwd, db)
-
- # Load playbooks
- print "Loading playbooks"
- for file in onlyfiles:
- if "yml" in file:
- name = file.split (".yml")[0]
- print " Loading:", name
- version = name.split("@")[1]
- errorCode, diag = loadPlaybook (name, version)
- if errorCode:
- print " Results: Failed - ", diag
- else:
- print " Results: Success"
- if "tar.gz" in file:
- name = file.split (".tar.gz")[0]
- print " Loading:", name
- version = name.split("@")[1]
- errorCode, diag = loadPlaybook (name, version, ".tar.gz")
-
- print "\nLoading inventory"
-
- # Load inventory
- hostgroup = None
- inv = {}
- file = open(inventory, 'r')
-
- for line in file:
-
- if '[' in line and ']' in line:
- hostgroup = line.strip().replace('[','').replace(']','')
- inv[hostgroup] = {}
- elif hostgroup and len(line.strip())>0:
- host = line.strip().split(" ")[0]
- credentials = line.replace(host,"")
- inv[hostgroup][host] = credentials
-
- file.close()
-
- for hostgroup in inv:
- print " Loading:", hostgroup
- hostfqdn = ''
- cred = ''
- for hostname in inv[hostgroup]:
- cred = inv[hostgroup][hostname]
- errorCode, diag = loadCredentials (hostgroup, hostname, cred)
- if errorCode:
- print " Results: Failed - ", diag
- else:
- print " Results: Success"
-
- sqlintf.Close()
diff --git a/installation/ansible-server/src/main/scripts/README b/installation/ansible-server/src/main/scripts/README
deleted file mode 100644
index 976a8cf7..00000000
--- a/installation/ansible-server/src/main/scripts/README
+++ /dev/null
@@ -1,103 +0,0 @@
-'''
-/*-
-* ============LICENSE_START=======================================================
-* ONAP : APPC
-* ================================================================================
-* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
-* ================================================================================
-* Copyright (C) 2017 Amdocs
-* =============================================================================
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* ECOMP is a trademark and service mark of AT&T Intellectual Property.
-* ============LICENSE_END=========================================================
-*/
-'''
-
-============
-INSTALLATION:
-============
-
-Python:
--------
-sudo apt-get install python2.7
-sudo apt-get install python-pip
-pip install PyMySQL
-pip install requests
-
-Ansible:
---------
-sudo apt-get install software-properties-common
-sudo apt-add-repository ppa:ansible/ansible
-sudo apt-get update
-sudo apt-get install ansible
-
-SQL db: N/A for SDNC
--------
-
-sudo apt-get install mysql-server
-
-Set root passwd during installation (i.e. password_4_mysql_user_id)
-
-sudo service mysql restart
-
-Setup mysql: N/A for SDNC
-------------
-
-mysql -u [username]-p
-mysql -uroot -p
-
-Create user (i.e. id=mysql_user_id psswd=password_4_mysql_user_id)
- CREATE USER 'appc'@'%' IDENTIFIED BY 'password_4_mysql_user_id';
- GRANT ALL PRIVILEGES ON *.* TO 'mysql_user_id'@'%';
- SET PASSWORD FOR 'mysql_user_id'@'%'=PASSWORD('password_4_mysql_user_id');
-
-Create schema
- CREATE SCHEMA ansible;
- show databases;
- use ansible;
- CREATE TABLE playbook (name VARCHAR(45) NOT NULL, value BLOB, type VARCHAR(60), version VARCHAR(60), PRIMARY KEY (name));
- show tables;
- CREATE TABLE inventory (hostname VARCHAR(45) NOT NULL, hostgroup VARCHAR(45), credentials VARCHAR(500), PRIMARY KEY (hostname));
- SHOW COLUMNS FROM playbook;
- SHOW COLUMNS FROM inventory;
- GRANT ALL PRIVILEGES ON *.* TO 'mysql_user_id'@'%' IDENTIFIED BY 'password_4_mysql_user_id' WITH GRANT OPTION;
- GRANT ALL PRIVILEGES ON *.* TO 'ansible'@'%' IDENTIFIED BY 'ansible_agent' WITH GRANT OPTION;
- FLUSH PRIVILEGES;
-
-Load db: N/A for SDNC
---------
-
-python LoadAnsibleMySql.py
-
-=============
-CODE TESTING:
-=============
-1. Start RestServer: python RestServer.py
-
-2. Try curl commands (case no secured REST: http & no authentication):
-
-- Request to execute playbook:
-curl -H "Content-type: application/json" -X POST -d '{"Id": "10", "PlaybookName": "ansible_sleep", "NodeList": ["host"], "Timeout": "60", "EnvParameters": {"Sleep": "10"}}' http://0.0.0.0:8000/Dispatch
-
-response: {"ExpectedDuration": "60sec", "StatusMessage": "PENDING", "StatusCode": 100}
-
-- Get results (blocked until test finished):
-curl --cacert ~/SshKey/fusion_eric-vm_cert.pem --user "appc:abc123" -H "Content-type: application/json" -X GET "http://0.0.0.0:8000/Dispatch/?Id=10&Type=GetResult"
-
-response: {"Results": {"localhost": {"GroupName": "host", "StatusMessage": "SUCCESS", "StatusCode": 200}}, "PlaybookName": "ansible_sleep", "Version": "0.00", "Duration": "11.261794", "StatusMessage": "FINISHED", "StatusCode": 200}
-
-- Delete playbook execution information
-curl --cacert ~/SshKey/fusion_eric-vm_cert.pem --user "appc:abc123" -H "Content-type: application/json" -X DELETE http://0.0.0.0:8000/Dispatch/?Id=10
-
-response: {"StatusMessage": "PLAYBOOK EXECUTION RECORDS DELETED", "StatusCode": 200}
diff --git a/installation/ansible-server/src/main/scripts/RestServer.py b/installation/ansible-server/src/main/scripts/RestServer.py
deleted file mode 100755
index 4758a9b9..00000000
--- a/installation/ansible-server/src/main/scripts/RestServer.py
+++ /dev/null
@@ -1,948 +0,0 @@
-'''
-/*-
-* ============LICENSE_START=======================================================
-* ONAP : APPC
-* ================================================================================
-* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
-* ================================================================================
-* Copyright (C) 2017 Amdocs
-* =============================================================================
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* ECOMP is a trademark and service mark of AT&T Intellectual Property.
-* ============LICENSE_END=========================================================
-*/
-'''
-
-import time, datetime, json, os, sys, subprocess, re
-import uuid
-import tarfile
-import shutil
-
-import requests
-
-import cherrypy
-from cherrypy.lib.httputil import parse_query_string
-from cherrypy.lib import auth_basic
-
-from multiprocessing import Process, Manager
-
-from AnsibleModule import ansibleSysCall
-
-import AnsibleSql
-from AnsibleSql import readPlaybook, readCredentials
-
-from os import listdir
-from os.path import isfile, join
-
-TestRecord = Manager().dict()
-ActiveProcess = {}
-
-def sys_call (cmd):
- p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- output = p.stdout.readlines()
- retval = p.wait()
- if len (output) > 0:
- for i in range(len(output)):
- output[i] = output[i].strip()
- return retval, output
-
-def callback (Id, Result, Output, Log, returncode):
-
- print "***> in RestServer.callback"
-
- if Id in TestRecord:
- time_now = datetime.datetime.utcnow()
- delta_time = (time_now - TestRecord[Id]['Time']).total_seconds()
- Result['PlaybookName'] = TestRecord[Id]['PlaybookName']
- Result['Version'] = TestRecord[Id]['Version']
- if returncode == 137:
- Result['StatusCode'] = 500
- Result['StatusMessage'] = "TERMINATED"
- else:
- Result['StatusCode'] = 200
- Result['StatusMessage'] = "FINISHED"
-
- # Need to update the whole data structure for key=Id otherwise Manager is not updated
- TestRecord[Id] = {'PlaybookName': TestRecord[Id]['PlaybookName'],
- 'LCM': TestRecord[Id]['LCM'],
- 'Version': TestRecord[Id]['Version'],
- 'NodeList': TestRecord[Id]['NodeList'],
- 'HostGroupList': TestRecord[Id]['HostGroupList'],
- 'HostNameList': TestRecord[Id]['HostNameList'],
- 'Time': TestRecord[Id]['Time'],
- 'Timeout': TestRecord[Id]['Timeout'],
- 'Duration': str(delta_time),
- 'EnvParameters': TestRecord[Id]['EnvParameters'],
- 'LocalParameters': TestRecord[Id]['LocalParameters'],
- 'FileParameters': TestRecord[Id]['FileParameters'],
- 'CallBack': TestRecord[Id]['CallBack'],
- 'Result': Result,
- 'Log': Log,
- 'Output': Output,
- 'Path': TestRecord[Id]['Path'],
- 'Mandatory': TestRecord[Id]['Path']}
-
- if not TestRecord[Id]['CallBack'] == None:
-
- # Posting results to callback server
-
- data = {"StatusCode": 200,
- "StatusMessage": "FINISHED",
- "PlaybookName": TestRecord[Id]["PlaybookName"],
- "Version": TestRecord[Id]["Version"],
- "Duration": TestRecord[Id]["Duration"],
- "Results": TestRecord[Id]['Result']['Results']}
-
- if not TestRecord[Id]['Output']['Output'] == {}:
- for key in data["Results"]:
- if key in TestRecord[Id]['Output']['Output']:
- data["Results"][key]["Output"] = TestRecord[Id]['Output']['Output'][key]
-
- print " Posting to", TestRecord[Id]['CallBack']
-
- s = requests.Session()
- r = s.post(TestRecord[Id]['CallBack'], data = json.dumps(data),
- headers = {'content-type': 'application/json'})
- print " Response", r.status_code, r.text
-
-def RunAnsible_Playbook (callback, Id, Inventory, Playbook, NodeList, TestRecord,
- Path, ArchiveFlag):
-
- print "***> in RestServer.RunAnsible_Playbook"
-
- # Run test in playbook for given target
- Result = ''
-
- retval, log, returncode = ansibleSysCall (Inventory, Playbook, NodeList,
- TestRecord[Id]['Mandatory'],
- TestRecord[Id]['EnvParameters'],
- TestRecord[Id]['LocalParameters'],
- TestRecord[Id]['LCM'],
- TestRecord[Id]['Timeout'])
-
-
- print " returncode:", returncode
- print " retval: ", retval
- print " log: ", log
-
- Log = ''.join(log)
- Output = {'Output': {}}
-
- onlyfiles = [f for f in listdir(Path)
- if isfile(join(Path, f))]
-
- for file in onlyfiles:
- if "results.txt" in file:
- f = open(Path + "/" + file, "r")
- key = file.split("_")[0]
- Output['Output'][key] = f.read()
- f.close()
-
- Result = {'Results': {}}
- if 'could not be found' in Log:
- Result['Results'] = {"StatusCode": 101,
- "StatusMessage": "PLAYBOOK NOT FOUND"}
- if returncode == 137:
- Result['Results'] = {"StatusCode": 500,
- "StatusMessage": "TERMINATED"}
-
- elif TestRecord[Id]['NodeList'] == []:
-
- host_index = None
-
- if 'TargetNode' in TestRecord[Id]['EnvParameters']:
- targetlist = TestRecord[Id]['EnvParameters']['TargetNode'].split(' ')
- else:
- targetlist = ["localhost"]
-
- for key in retval:
- for i in range (len(targetlist)):
- if key in targetlist[i]:
- host_index = i
-
- if int(retval[key][0]) > 0 and int(retval[key][2]) == 0 and \
- int(retval[key][3]) == 0:
-
- if host_index:
- Result['Results'][targetlist[host_index]] = \
- {"GroupName": 'na', "StatusCode": 200, \
- "StatusMessage": "SUCCESS"}
- else:
- Result['Results'][key] = \
- {"GroupName": 'na', "StatusCode": 200, \
- "StatusMessage": "SUCCESS"}
- elif int(retval[key][2]) > 0:
- if host_index:
- Result['Results'][targetlist[host_index]] = \
- {"GroupName": 'na', "StatusCode": 400, \
- "StatusMessage": "NOT REACHABLE"}
- else:
- Result['Results'][key] = \
- {"GroupName": 'na', "StatusCode": 400, \
- "StatusMessage": "NOT REACHABLE"}
- elif int(retval[key][3]) > 0:
- if host_index:
- Result['Results'][targetlist[host_index]] = \
- {"GroupName": 'na', "StatusCode": 400, \
- "StatusMessage": "FAILURE"}
- else:
- Result['Results'][key] = \
- {"GroupName": 'na', "StatusCode": 400, \
- "StatusMessage": "FAILURE"}
- else:
-
- for key in retval:
-
- if len(TestRecord[Id]['HostNameList']) > 0:
-
- host_index = []
- for i in range (len(TestRecord[Id]['HostNameList'])):
- if key in TestRecord[Id]['HostNameList'][i]:
- host_index.append(i)
-
- if int(retval[key][0]) > 0 and int(retval[key][2]) == 0 and \
- int(retval[key][3]) == 0:
-
- if len(host_index) > 0:
- Result['Results'][TestRecord[Id]['HostNameList'][host_index[0]]] = \
- {"GroupName": TestRecord[Id]['HostGroupList'][host_index[0]],
- "StatusCode": 200, "StatusMessage": "SUCCESS"}
-
- for i in range (1, len(host_index)):
- Result['Results'][TestRecord[Id]['HostNameList'][host_index[i]]]["GroupName"]+=\
- "," + TestRecord[Id]['HostGroupList'][host_index[i]]
- else:
- Result['Results'][key] = \
- {"GroupName": key,
- "StatusCode": 200, "StatusMessage": "SUCCESS"}
-
- elif int(retval[key][2]) > 0:
-
- if len(host_index) > 0:
- Result['Results'][TestRecord[Id]['HostNameList'][host_index[0]]] = \
- {"GroupName": TestRecord[Id]['HostGroupList'][host_index[0]],
- "StatusCode": 400, "StatusMessage": "NOT REACHABLE"}
-
- for i in range (1, len(host_index)):
- Result['Results'][TestRecord[Id]['HostNameList'][host_index[i]]]["GroupName"]+=\
- "," + TestRecord[Id]['HostGroupList'][host_index[i]]
- else:
- Result['Results'][key] = \
- {"GroupName": key,
- "StatusCode": 200, "StatusMessage": "NOT REACHABLE"}
-
- elif int(retval[key][3]) > 0:
-
- if len(host_index) > 0:
- Result['Results'][TestRecord[Id]['HostNameList'][host_index[0]]] = \
- {"GroupName": TestRecord[Id]['HostGroupList'][host_index[0]],
- "StatusCode": 400, "StatusMessage": "FAILURE"}
-
- for i in range (1, len(host_index)):
- Result['Results'][TestRecord[Id]['HostNameList'][host_index[i]]]["GroupName"]+=\
- "," + TestRecord[Id]['HostGroupList'][host_index[i]]
- else:
- Result['Results'][key] = \
- {"GroupName": key,
- "StatusCode": 200, "StatusMessage": "FAILURE"}
- else:
- host_index = None
- for i in range (len(TestRecord[Id]['NodeList'])):
- if key in TestRecord[Id]['NodeList'][i]:
- host_index = i
-
- if int(retval[key][0]) > 0 and int(retval[key][2]) == 0 and \
- int(retval[key][3]) == 0:
- Result['Results'][TestRecord[Id]['NodeList'][host_index]] = \
- {"GroupName": 'na', "StatusCode": 200, \
- "StatusMessage": "SUCCESS"}
- elif int(retval[key][2]) > 0:
- Result['Results'][TestRecord[Id]['NodeList'][host_index]] = \
- {"GroupName": 'na', "StatusCode": 400, "StatusMessage": "NOT REACHABLE"}
- elif int(retval[key][3]) > 0:
- Result['Results'][TestRecord[Id]['NodeList'][host_index]] = \
- {"GroupName": 'na', "StatusCode": 400, "StatusMessage": "FAILURE"}
-
- callback (Id, Result, Output, Log, returncode)
-
-class TestManager (object):
-
- @cherrypy.expose
- @cherrypy.tools.json_out()
- @cherrypy.tools.json_in()
- @cherrypy.tools.allow(methods=['POST', 'GET', 'DELETE'])
-
- def Dispatch(self, **kwargs):
-
- # Let cherrypy error handler deal with malformed requests
- # No need for explicit error handler, we use default ones
-
- time_now = datetime.datetime.utcnow()
-
- # Erase old test results (2x timeout)
- if TestRecord:
- for key in TestRecord.copy():
- delta_time = (time_now - TestRecord[key]['Time']).seconds
- if delta_time > 2*TestRecord[key]['Timeout']:
- print "Deleted history for test", key
- if os.path.exists(TestRecord[key]['Path']):
- shutil.rmtree (TestRecord[key]['Path'])
- del TestRecord[key]
-
- print "***> in RestServer.Dispatch:", cherrypy.request.method
-
- HomeDir = os.path.dirname(os.path.realpath("~/"))
-
- if 'POST' in cherrypy.request.method:
-
- input_json = cherrypy.request.json
- print " Payload: ", input_json
-
- if 'Id' in input_json and 'PlaybookName' in input_json:
-
- if True:
-
- if not input_json['Id'] in TestRecord:
-
- Id = input_json['Id']
- PlaybookName = input_json['PlaybookName']
-
- version = None
- if 'Version' in input_json:
- version = input_json['Version']
-
- AnsibleInvFail = True
- AnsiblePlaybookFail = True
-
- MySqlConFail = True
- MySqlCause = ''
-
- LocalNodeList = None
-
- str_uuid = str (uuid.uuid4())
-
- LCM = PlaybookName.split(".")[0].split('_')[-1]
- PlaybookDir = HomeDir + "/" + ansible_temp + "/" + \
- PlaybookName.split(".")[0] + "_" + str_uuid
- AnsibleInv = LCM + "_" + "inventory"
- ArchiveFlag = False
-
- print " LCM: ", LCM
- print " PlaybookDir: ", ansible_temp + PlaybookDir.split(ansible_temp)[1]
- print " AnsibleInv: ", AnsibleInv
- print " ansible_temp: ", ansible_temp
-
- if not os.path.exists(HomeDir + "/" + ansible_temp):
- os.makedirs(HomeDir + "/" + ansible_temp)
-
- os.mkdir(PlaybookDir)
-
- # Process inventory file for target
-
- hostgrouplist = []
- hostnamelist = []
-
- NodeList = []
- if 'NodeList' in input_json:
- NodeList = input_json['NodeList']
-
- print " NodeList: ", NodeList
-
- if NodeList == []:
- # By default set to local host
- AnsibleInvFail = False
-
- LocalNodeList = "host"
- LocalCredentials = "localhost ansible_connection=local"
- f = open(PlaybookDir + "/" + AnsibleInv, "w")
- f.write("[" + LocalNodeList + "]\n")
- f.write(LocalCredentials)
- f.close()
-
- else:
-
- if from_files:
-
- # Get credentials from file
-
- data_inventory_orig = {}
- data_inventory_target = {}
- curr_group = None
-
- print "***>", ansible_path + "/" + ansible_inv
- f = open(ansible_path + "/" + ansible_inv, "r")
- for line in f:
- line = line.rstrip()
-
- if len(line)> 0:
- if '#' not in line:
- if "[" in line and "]" in line:
- data_inventory_orig[line] = []
- curr_group = line
- else:
- data_inventory_orig[curr_group].append(line)
- f.close()
-
- for node in NodeList:
- Fail = True
- if "[" + node + "]" in data_inventory_orig:
- if not "[" + node + "]" in data_inventory_target:
-
- print "RESET", "[" + node + "]"
- data_inventory_target["[" + node + "]"] = []
- else:
- print "OK", "[" + node + "]"
- Fail = False
- for cred in data_inventory_orig["[" + node + "]"]:
- data_inventory_target["[" + node + "]"].append(cred)
-
- else:
- for key in data_inventory_orig:
- if node in " ".join(data_inventory_orig[key]):
- if not key in data_inventory_target:
- data_inventory_target[key] = []
- for cred in data_inventory_orig[key]:
- if node in cred:
- data_inventory_target[key].append(cred)
- Fail = False
-
- if Fail:
- data_inventory_target["["+node+"]"] = \
- [node + " ansible_connection=ssh ansible_ssh_user=na ansible_ssh_private_key_file=na"]
-
- AnsibleInvFail = False
-
- f = open(PlaybookDir + "/" + AnsibleInv, "w")
- for key in data_inventory_target:
- f.write(key + "\n")
- for rec in data_inventory_target[key]:
- hostgrouplist.append(key.replace("[", '').replace("]", ''))
- hostnamelist.append(rec.split(' ')[0])
- f.write(rec + "\n")
- f.close()
-
- else:
-
- # Get credentials from mySQL
-
- sqlintf = AnsibleSql.mySql (host, user, passwd,
- db)
- if sqlintf.con:
- MySqlConFail = False
- errorCode, diag = readCredentials (sqlintf,
- NodeList)
-
- print errorCode, diag
- if len (diag) > 0:
- f = open(PlaybookDir + "/" + AnsibleInv,
- "w")
- AnsibleInvFail = False
- # [hostgroup, hostname, credentials]
- for i in range(len(diag)):
- f.write('[' + diag[i][0] + ']' + "\n")
- f.write(diag[i][1]+ " " + diag[i][2] + "\n\n")
- hostgrouplist.append(diag[i][0])
- hostnamelist.append(diag[i][1])
- f.close()
- else:
- MySqlConFailCause = sqlintf.error
- sqlintf.Close()
-
- timeout = timeout_seconds
- if 'Timeout' in input_json:
- timeout = int (input_json['Timeout'])
-
- EnvParam = {}
- if 'EnvParameters' in input_json:
- EnvParam = input_json['EnvParameters']
-
- LocalParam = {}
- if 'LocalParameters' in input_json:
- LocalParam = input_json['LocalParameters']
-
- FileParam = {}
- if 'FileParameters' in input_json:
- FileParam = input_json['FileParameters']
-
- callback_flag = None
- if 'CallBack' in input_json:
- callback_flag = input_json['CallBack']
-
- TestRecord[Id] = {'PlaybookName': PlaybookName,
- 'LCM': LCM,
- 'Version': version,
- 'NodeList': NodeList,
- 'HostGroupList': hostgrouplist,
- 'HostNameList': hostnamelist,
- 'Time': time_now,
- 'Duration': timeout,
- 'Timeout': timeout,
- 'EnvParameters': EnvParam,
- 'LocalParameters': LocalParam,
- 'FileParameters': FileParam,
- 'CallBack': callback_flag,
- 'Result': {"StatusCode": 100,
- "StatusMessage": 'PENDING',
- "ExpectedDuration": str(timeout) + "sec"},
- 'Log': '',
- 'Output': {},
- 'Path': PlaybookDir,
- 'Mandatory': None}
-
- # Write files
-
- if not TestRecord[Id]['FileParameters'] == {}:
- for key in TestRecord[Id]['FileParameters']:
- filename = key
- filecontent = TestRecord[Id]['FileParameters'][key]
- f = open(PlaybookDir + "/" + filename, "w")
- f.write(filecontent)
- f.close()
-
-
- # Process playbook
-
- if from_files:
-
- # Get playbooks from files
-
- MySqlConFail = False
-
- version = None
- target_PlaybookName = None
-
- if '@' in PlaybookName:
- version = PlaybookName.split("@")[1]
- version = version.replace('.yml','')
- version = version.replace('.tar.gz','')
-
- onlyfiles = [f for f in listdir(ansible_path)
- if isfile(join(ansible_path, f))]
-
- version_max = '0.00'
- version_target = ''
-
- for file in onlyfiles:
- if LCM in file:
- temp_version = file.split("@")[1]
- temp_version = temp_version.replace('.yml','')
- temp_version = temp_version.replace('.tar.gz','')
- if version_max < temp_version:
- version_max = temp_version
-
- if not version == None:
- if version in PlaybookName:
- version_target = version
- target_PlaybookName = file
-
- if target_PlaybookName == None:
- for file in onlyfiles:
- if LCM in file and version_max in file:
- target_PlaybookName = file
- version_target = version_max
-
- if target_PlaybookName:
- AnsiblePlaybookFail = False
- readversion = version_target
- src = ansible_path + "/" + target_PlaybookName
- if ".tar.gz" in target_PlaybookName:
- dest = PlaybookDir + "/" + LCM + ".tar.gz"
- shutil.copy2(src, dest)
- retcode = subprocess.call(['tar', '-xvzf',
- dest, "-C", PlaybookDir])
- ArchiveFlag = True
- else:
- dest = PlaybookDir + "/" + LCM + ".yml"
- shutil.copy2(src, dest)
-
- else:
- # Get playbooks from mySQL
-
- sqlintf = AnsibleSql.mySql (host, user, passwd, db)
- if sqlintf.con:
- MySqlConFail = False
-
- name, readversion, AnsiblePlaybookFail, diag = \
- readPlaybook (sqlintf, PlaybookName.split(".")[0],
- version)
-
- if not AnsiblePlaybookFail:
-
- f = open(PlaybookDir + "/" + LCM + diag[1], "w")
- f.write(diag[0])
- f.close()
-
- if ".tar.gz" in diag[1]:
- retcode = subprocess.call(['tar', '-xvzf',
- PlaybookDir + "/" + LCM + diag[1], "-C", PlaybookDir])
- f.close()
- ArchiveFlag = True
- else:
- MySqlConFailCause = sqlintf.error
- sqlintf.Close()
-
- if MySqlConFail:
- if os.path.exists(PlaybookDir):
- shutil.rmtree (PlaybookDir)
- del TestRecord[Id]
- return {"StatusCode": 101,
- "StatusMessage": "CANNOT CONNECT TO MYSQL: " \
- + MySqlConFailCause}
- elif AnsiblePlaybookFail:
- if os.path.exists(PlaybookDir):
- shutil.rmtree (PlaybookDir)
- del TestRecord[Id]
- return {"StatusCode": 101,
- "StatusMessage": "PLAYBOOK NOT FOUND"}
- elif AnsibleInvFail:
- if os.path.exists(PlaybookDir):
- shutil.rmtree (PlaybookDir)
- del TestRecord[Id]
- return {"StatusCode": 101,
- "StatusMessage": "NODE LIST CREDENTIALS NOT FOUND"}
- else:
-
- # Test EnvParameters
- playbook_path = None
- if ArchiveFlag:
- for dName, sdName, fList in os.walk(PlaybookDir):
- if LCM+".yml" in fList:
- playbook_path = dName
- else:
- playbook_path = PlaybookDir
-
- # Store local vars
- if not os.path.exists(playbook_path + "/vars"):
- os.mkdir(playbook_path + "/vars")
- if not os.path.isfile(playbook_path + "/vars/defaults.yml"):
- os.mknod(playbook_path + "/vars/defaults.yml")
-
- for key in TestRecord[Id]['LocalParameters']:
- host_index = []
- for i in range(len(TestRecord[Id]['HostNameList'])):
- if key in TestRecord[Id]['HostNameList'][i]:
- host_index.append(i)
- if len(host_index) == 0:
- for i in range(len(TestRecord[Id]['HostGroupList'])):
- if key in TestRecord[Id]['HostGroupList'][i]:
- host_index.append(i)
- if len(host_index) > 0:
- for i in range(len(host_index)):
- f = open(playbook_path + "/vars/" +
- TestRecord[Id]['HostNameList'][host_index[i]] +
- ".yml", "a")
- for param in TestRecord[Id]['LocalParameters'][key]:
- f.write(param + ": " +
- str (TestRecord[Id]['LocalParameters'][key][param]) +
- "\n")
- f.close()
-
- # Get mandatory parameters from playbook
- Mandatory = []
- with open(playbook_path + "/" + LCM + ".yml") as origin_file:
- for line in origin_file:
- if "Mandatory" in line:
- temp = line.split(":")[1].strip().replace(' ', '')
- if len(temp) > 0:
- Mandatory = temp.split(",")
-
- TestRecord[Id] = {'PlaybookName': TestRecord[Id]['PlaybookName'],
- 'LCM': TestRecord[Id]['LCM'],
- 'Version': readversion,
- 'NodeList': TestRecord[Id]['NodeList'],
- 'HostGroupList': TestRecord[Id]['HostGroupList'],
- 'HostNameList': TestRecord[Id]['HostNameList'],
- 'Time': TestRecord[Id]['Time'],
- 'Timeout': TestRecord[Id]['Timeout'],
- 'Duration': TestRecord[Id]['Duration'],
- 'EnvParameters': TestRecord[Id]['EnvParameters'],
- 'LocalParameters': TestRecord[Id]['LocalParameters'],
- 'FileParameters': TestRecord[Id]['FileParameters'],
- 'CallBack': TestRecord[Id]['CallBack'],
- 'Result': TestRecord[Id]['Result'],
- 'Log': TestRecord[Id]['Log'],
- 'Output': TestRecord[Id]['Output'],
- 'Path': TestRecord[Id]['Path'],
- 'Mandatory': Mandatory}
-
- TestKey = False
-
- if Mandatory:
- for val in Mandatory:
- if EnvParam:
- if val in EnvParam:
- TestKey = True
- else:
- if LocalParam:
- for key in TestRecord[Id]['NodeList']:
- if key in LocalParam:
- if val in LocalParam[key]:
- TestKey = True
- else:
- if LocalParam:
- for key in TestRecord[Id]['NodeList']:
- if key in LocalParam:
- if val in LocalParam[key]:
- TestKey = True
-
- if not TestKey:
- if os.path.exists(PlaybookDir):
- shutil.rmtree (PlaybookDir)
- del TestRecord[Id]
- return {"StatusCode": 101,
- "StatusMessage": "MISSING MANDATORY PARAMETER: " + \
- " ".join(str(x) for x in Mandatory)}
-
-
- # Cannot use thread because ansible module uses
- # signals which are only supported in main thread.
- # So use multiprocess with shared object
-
- p = Process(target = RunAnsible_Playbook,
- args = (callback, Id, PlaybookDir + "/" + AnsibleInv,
- playbook_path + "/" + LCM + ".yml",
- NodeList, TestRecord, PlaybookDir,
- ArchiveFlag))
- p.start()
- ActiveProcess[Id] = p
- return TestRecord[Id]['Result']
- else:
- return {"StatusCode": 101, "StatusMessage": "TEST ID ALREADY DEFINED"}
-
- else:
- return {"StatusCode": 500, "StatusMessage": "REQUEST MUST INCLUDE: NODELIST"}
-
- else:
- return {"StatusCode": 500, "StatusMessage": "JSON OBJECT MUST INCLUDE: ID, PLAYBOOKNAME"}
-
- elif 'GET' in cherrypy.request.method:
-
- input_data = parse_query_string(cherrypy.request.query_string)
-
- print "***> in RestServer.GET"
- print " Payload: ", input_data, input_data['Type']
-
- if 'Id' in input_data and 'Type' in input_data:
- if not ('GetResult' in input_data['Type'] or 'GetOutput' in input_data['Type'] or 'GetLog' in input_data['Type']):
- return {"StatusCode": 500, "StatusMessage": "RESULTS TYPE UNDEFINED"}
- if input_data['Id'] in TestRecord:
-
- if 'GetResult' in input_data['Type']:
-
- print "Result:", TestRecord[input_data['Id']]['Result']
-
- if 'StatusMessage' in TestRecord[input_data['Id']]['Result'] and getresults_block:
-
- print "*** Request blocked", input_data['Id']
-
- while ActiveProcess[input_data['Id']].is_alive():
- time.sleep(5)
-
- print "*** Request released ", input_data['Id']
-
- print TestRecord[input_data['Id']]['Result']
- if TestRecord[input_data['Id']]['Result']['StatusCode'] == 500:
- out_obj = TestRecord[input_data['Id']]['Result']['Results']
- else:
- out_obj = {"StatusCode": 200,
- "StatusMessage": "FINISHED",
- "PlaybookName": TestRecord[input_data['Id']]["PlaybookName"],
- "Version": TestRecord[input_data['Id']]["Version"],
- "Duration": TestRecord[input_data['Id']]["Duration"],
- "Results": TestRecord[input_data['Id']]['Result']['Results']}
- if not TestRecord[input_data['Id']]['Output']['Output'] == {}:
- for key in out_obj["Results"]:
- if key in TestRecord[input_data['Id']]['Output']['Output']:
- out_obj["Results"][key]["Output"] = TestRecord[input_data['Id']]['Output']['Output'][key]
-
- return out_obj
-
- elif 'GetOutput' in input_data['Type']:
-
- if TestRecord[input_data['Id']]['Output'] == {} and \
- getresults_block:
-
- print "*** Request blocked", input_data['Id']
-
- while TestRecord[input_data['Id']]['Output'] == {} \
- or 'StatusMessage' in TestRecord[input_data['Id']]['Result']:
- time.sleep(5)
-
- print "*** Request released ", input_data['Id']
-
- print "Output:", TestRecord[input_data['Id']]['Output']
- return {"Output": TestRecord[input_data['Id']]['Output']['Output']}
- else:
- # GetLog
-
- if TestRecord[input_data['Id']]['Log'] == '' and \
- getresults_block:
-
- print "*** Request blocked", input_data['Id']
-
- while TestRecord[input_data['Id']]['Log'] == '' \
- or 'StatusMessage' in TestRecord[input_data['Id']]['Result']:
- time.sleep(5)
-
- print "*** Request released ", input_data['Id']
-
- print "Log:", TestRecord[input_data['Id']]['Log']
- return {"Log": TestRecord[input_data['Id']]['Log']}
- else:
- return {"StatusCode": 500, "StatusMessage": "TEST ID UNDEFINED"}
- else:
- return {"StatusCode": 500, "StatusMessage": "MALFORMED REQUEST"}
- elif 'DELETE' in cherrypy.request.method:
- input_data = parse_query_string(cherrypy.request.query_string)
-
- print "***> in RestServer.DELETE"
- print " Payload: ", input_data
-
- if input_data['Id'] in TestRecord:
- if not 'PENDING' in TestRecord[input_data['Id']]['Result']:
- print " Path:", TestRecord[input_data['Id']]['Path']
- if os.path.exists(TestRecord[input_data['Id']]['Path']):
- shutil.rmtree (TestRecord[input_data['Id']]['Path'])
- TestRecord.pop (input_data['Id'])
- if input_data['Id'] in ActiveProcess:
- ActiveProcess.pop (input_data['Id'])
-
- return {"StatusCode": 200, "StatusMessage": "PLAYBOOK EXECUTION RECORDS DELETED"}
- else:
- return {"StatusCode": 200, "StatusMessage": "PENDING"}
- else:
- return {"StatusCode": 500, "StatusMessage": "TEST ID UNDEFINED"}
-
-
-if __name__ == '__main__':
-
- # Read configuration
-
- config_file_path = "RestServer_config"
-
- if not os.path.exists(config_file_path):
- print '[INFO] The config file does not exist'
- sys.exit(0)
-
- ip = 'na'
- port = 'na'
- tls = False
- auth = False
- pub = 'na'
- id = 'na'
- priv = 'na'
- psswd = 'na'
- timeout_seconds = 'na'
- ansible_path = 'na'
- ansible_inv = 'na'
- ansible_temp = 'na'
- host = 'na'
- user = 'na'
- passwd = 'na'
- db = 'na'
- getresults_block = False
- from_files = False
-
- file = open(config_file_path, 'r')
- for line in file.readlines():
- if '#' not in line:
- if 'ip:' in line:
- ip = line.split(':')[1].strip()
- elif 'port:' in line:
- port = line.split(':')[1].strip()
- elif 'tls:' in line:
- tls = 'YES' in line.split(':')[1].strip().upper()
- elif 'auth:' in line:
- auth = 'YES' in line.split(':')[1].strip().upper()
- if tls and 'priv:' in line:
- priv = line.split(':')[1].strip()
- if tls and 'pub:' in line:
- pub = line.split(':')[1].strip()
- if auth and 'id:' in line:
- id = line.split(':')[1].strip()
- if auth and 'psswd:' in line:
- psswd = line.split(':')[1].strip()
- if 'timeout_seconds' in line:
- timeout_seconds = int (line.split(':')[1].strip())
- if 'ansible_path' in line:
- ansible_path = line.split(':')[1].strip()
- if 'ansible_inv' in line:
- ansible_inv = line.split(':')[1].strip()
- if not os.path.exists(ansible_path + "/" + ansible_inv):
- print '[INFO] The ansible_inv file does not exist'
- sys.exit(0)
- if 'ansible_temp' in line:
- ansible_temp = line.split(':')[1].strip()
- if 'host' in line:
- host = line.split(':')[1].strip()
- if 'user' in line:
- user = line.split(':')[1].strip()
- if 'passwd' in line:
- passwd = line.split(':')[1].strip()
- if 'db' in line:
- db = line.split(':')[1].strip()
- if 'getresults_block' in line:
- getresults_block = 'YES' in line.split(':')[1].strip().upper()
- if 'from_files' in line:
- from_files = 'YES' in line.split(':')[1].strip().upper()
- file.close()
-
- # Initialization
-
- global_conf = {
- 'global': {
- 'server.socket_host': ip,
- 'server.socket_port': int(port),
- 'server.protocol_version': 'HTTP/1.1'
- }
- }
-
- if tls:
- # Use pythons built-in SSL
- cherrypy.server.ssl_module = 'builtin'
-
- # Point to certificate files
-
- if not os.path.exists(pub):
- print '[INFO] The public certificate does not exist'
- sys.exit(0)
-
- if not os.path.exists(priv):
- print '[INFO] The private key does not exist'
- sys.exit(0)
-
- cherrypy.server.ssl_certificate = pub
- cherrypy.server.ssl_private_key = priv
-
- if auth:
- userpassdict = {id: psswd}
- checkpassword = cherrypy.lib.auth_basic.checkpassword_dict(userpassdict)
-
- app_conf = {'/':
- {'tools.auth_basic.on': True,
- 'tools.auth_basic.realm': 'earth',
- 'tools.auth_basic.checkpassword': checkpassword,
- }
- }
-
- cherrypy.tree.mount(TestManager(), '/', app_conf)
- else:
- cherrypy.tree.mount(TestManager(), '/')
-
- cherrypy.config.update(global_conf)
-
- # Start server
-
- cherrypy.engine.start()
- cherrypy.engine.block()
diff --git a/installation/ansible-server/src/main/scripts/RestServer_config b/installation/ansible-server/src/main/scripts/RestServer_config
deleted file mode 100644
index a98d8749..00000000
--- a/installation/ansible-server/src/main/scripts/RestServer_config
+++ /dev/null
@@ -1,55 +0,0 @@
-# /*-
-# * ============LICENSE_START=======================================================
-# * ONAP : APPC
-# * ================================================================================
-# * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
-# * ================================================================================
-# * Copyright (C) 2017 Amdocs
-# * =============================================================================
-# * Licensed under the Apache License, Version 2.0 (the "License");
-# * you may not use this file except in compliance with the License.
-# * You may obtain a copy of the License at
-# *
-# * http://www.apache.org/licenses/LICENSE-2.0
-# *
-# * Unless required by applicable law or agreed to in writing, software
-# * distributed under the License is distributed on an "AS IS" BASIS,
-# * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# * See the License for the specific language governing permissions and
-# * limitations under the License.
-# *
-# * ECOMP is a trademark and service mark of AT&T Intellectual Property.
-# * ============LICENSE_END=========================================================
-# */
-
-# Host definition
-ip: 0.0.0.0
-port: 8000
-
-# Security (controls use of TLS encrypton and RestServer authentication)
-tls: no
-auth: no
-
-# TLS certificates (must be built on application host)
-priv: provide_privated_key.pem
-pub: provide_public_key.pem
-
-# RestServer authentication
-id: sdnc
-psswd: sdnc
-
-# Mysql
-host: dbhost
-user: sdnc
-passwd: sdnc
-db: ansible
-
-# Playbooks
-from_files: yes
-ansible_path: /opt/onap/sdnc/Playbooks
-ansible_inv: Ansible_inventory
-ansible_temp: PlaybooksTemp
-timeout_seconds: 60
-
-# Blocking on GetResults
-getresults_block: yes
diff --git a/installation/ansible-server/src/main/scripts/startAnsibleServer.sh b/installation/ansible-server/src/main/scripts/startAnsibleServer.sh
deleted file mode 100644
index c35f7864..00000000
--- a/installation/ansible-server/src/main/scripts/startAnsibleServer.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/bash
-exec &> >(tee -a "/var/log/ansible-server.log")
-
-if [ ! -f /tmp/.ansible-server-installed ]
-then
- pip install PyMySQL
- pip install cherrypy
- pip install requests
-
- apt-get -y install software-properties-common
- apt-add-repository -y ppa:ansible/ansible
- apt-get -y install ansible
-
- cp /etc/ansible/ansible.cfg /etc/ansible/ansible.cfg.orig
- cat /etc/ansible/ansible.cfg.orig | sed -e 's/#host_key_checking/host_key_checking/' > /etc/ansible/ansible.cfg
- date > /tmp/.ansible-server-installed 2>&1
-fi
-
-cd /opt/onap/sdnc
-exec /usr/bin/python RestServer.py