'''
/*-
* ============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:
-------

sudo apt-get install mysql-server

Set root passwd during installation (i.e. password_4_mysql_user_id)

sudo service mysql restart

Setup mysql:
------------

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:
--------

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}
