3 * ============LICENSE_START=======================================================
5 * ================================================================================
6 * Copyright (C) 2017-2019 AT&T Intellectual Property. All rights reserved.
7 * ================================================================================
8 * Copyright (C) 2017 Amdocs
9 * =============================================================================
10 * Licensed under the Apache License, Version 2.0 (the "License");
11 * you may not use this file except in compliance with the License.
12 * You may obtain a copy of the License at
14 * http://www.apache.org/licenses/LICENSE-2.0
16 * Unless required by applicable law or agreed to in writing, software
17 * distributed under the License is distributed on an "AS IS" BASIS,
18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 * See the License for the specific language governing permissions and
20 * limitations under the License.
22 * ============LICENSE_END=========================================================
26 from os import listdir
27 from os.path import isfile, join
35 def buildInventorySysCall(ansible_path, ansible_inv, node_list, playbook_dir, target_inv, hostgrouplist, hostnamelist,
36 inventory_names=None):
38 local_node_list = "host"
39 local_credentials = "localhost ansible_connection=local"
41 f = open(playbook_dir + "/" + target_inv, "w")
42 f.write("[" + local_node_list + "]\n")
43 f.write(local_credentials)
46 # Get credentials from file
47 data_inventory_orig = {}
48 data_inventory_target = {}
51 cherrypy.log("***> " + ansible_path + "/" + ansible_inv)
52 f = open(ansible_path + "/" + ansible_inv, "r")
58 if "[" in line and "]" in line:
59 data_inventory_orig[line] = []
62 data_inventory_orig[curr_group].append(line)
65 if inventory_names is None:
66 for node in node_list:
67 processSingleNode(node, data_inventory_orig, data_inventory_target)
69 for nodes_section in node_list:
70 if ('floating_ip_address-vip' in nodes_section) & ('ne_id_vip' in nodes_section):
71 if inventory_names == "VNFC" or inventory_names == "VM":
72 node = nodes_section['ne_id_vip']
73 processSingleNode(node, data_inventory_orig, data_inventory_target)
74 for vm in nodes_section['vm-info']:
76 if inventory_names == "VNFC" or inventory_names == "VM":
77 processSingleNode(node, data_inventory_orig, data_inventory_target)
79 f = open(playbook_dir + "/" + target_inv, "w")
80 for key in data_inventory_target:
82 for rec in data_inventory_target[key]:
83 hostgrouplist.append(key.replace("[", '').replace("]", ''))
84 hostnamelist.append(rec.split(' ')[0])
89 def processSingleNode(node, data_inventory_orig, data_inventory_target):
91 if "[" + node + "]" in data_inventory_orig:
92 if "[" + node + "]" not in data_inventory_target:
93 cherrypy.log("RESET", "[" + node + "]")
94 data_inventory_target["[" + node + "]"] = []
96 cherrypy.log("OK", "[" + node + "]")
98 for cred in data_inventory_orig["[" + node + "]"]:
99 data_inventory_target["[" + node + "]"].append(cred)
101 for key in data_inventory_orig:
102 if node + " " in " ".join(data_inventory_orig[key]):
103 if key not in data_inventory_target:
104 data_inventory_target[key] = []
105 for cred in data_inventory_orig[key]:
106 if node + " " in cred:
107 data_inventory_target[key].append(cred)
111 data_inventory_target["[" + node + "]"] = \
112 [node + " ansible_connection=ssh ansible_ssh_user=na ansible_ssh_private_key_file=na"]
115 def getPlaybookFile(ansible_path, playbook_name, playbook_type, playbook_dir):
116 # Get playbooks from files
119 target_playbook_name = None
121 if '@' in playbook_name:
122 version = playbook_name.split("@")[1]
123 version = version.replace('.yml', '')
124 version = version.replace('.tar.gz', '')
126 onlyfiles = [f for f in listdir(ansible_path) if isfile(join(ansible_path, f))]
131 for filename in onlyfiles:
132 if playbook_type in filename:
133 temp_version = filename.split("@")[1]
134 temp_version = temp_version.replace('.yml', '')
135 temp_version = temp_version.replace('.tar.gz', '')
136 if version_max < temp_version:
137 version_max = temp_version
139 if version is not None:
140 if version in playbook_name:
141 version_target = version
142 target_playbook_name = filename
144 if target_playbook_name is None:
145 for filename in onlyfiles:
146 if playbook_type in filename and version_max in filename:
147 target_playbook_name = filename
148 version_target = version_max
150 if target_playbook_name:
151 src = ansible_path + "/" + target_playbook_name
152 if not os.path.exists(src):
155 if ".tar.gz" in target_playbook_name:
156 dest = playbook_dir + "/" + playbook_type + ".tar.gz"
157 shutil.copy2(src, dest)
158 subprocess.call(['tar', '-xvzf', dest, "-C", playbook_dir])
160 dest = playbook_dir + "/" + playbook_type + ".yml"
161 shutil.copy2(src, dest)
163 return version_target