Skip to content

Instantly share code, notes, and snippets.

@chiradeep
Last active July 15, 2018 23:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chiradeep/b111a44cfc2bfb94fcbee6d7db35dab1 to your computer and use it in GitHub Desktop.
Save chiradeep/b111a44cfc2bfb94fcbee6d7db35dab1 to your computer and use it in GitHub Desktop.
Export existing content switching policies and cs vserver into NetScaler Ansible playbook
import requests
from collections import OrderedDict
import yaml
import yamlloader
cs_vserver = 'test_csvserver'
ns_host = 'localhost:32769'
ns_login = 'nsroot'
ns_password= 'nsroot'
url = 'http://%s/nitro/v1/config/csvserver_cspolicy_binding/%s' % (ns_host, cs_vserver)
headers = {'X-NITRO-USER': ns_login, 'X-NITRO-PASS': ns_password, 'Content-Type': 'application/json', 'Accept': 'application/json'}
r = requests.get(url, headers=headers)
policybindings = []
for binding in r.json()[u'csvserver_cspolicy_binding']:
policy_name = binding[u'policyname']
#print policy_name
policy_url = 'http://%s/nitro/v1/config/cspolicy/%s' % (ns_host, policy_name)
policy = requests.get(policy_url, headers=headers)
ansible_obj = OrderedDict([('name', 'Create cs policy %s' % policy_name),
('delegate_to' , 'localhost'),
('netscaler_cspolicy', OrderedDict([
('nsip', ns_host),
('nitro_user', ns_login),
('nitro_pass', ns_password),
('validate_certs', 'no'),
('state', 'present'),
('policyname', policy_name)])
)])
# print policy.json()
if policy.json()[u'cspolicy'][0].get(u'url') != None:
ansible_obj['netscaler_cspolicy']['url'] = policy.json()[u'cspolicy'][0][u'url']
if policy.json()[u'cspolicy'][0].get(u'rule') != None:
ansible_obj['netscaler_cspolicy']['rule'] = policy.json()[u'cspolicy'][0][u'rule']
print yaml.dump(ansible_obj, Dumper=yamlloader.ordereddict.CSafeDumper, default_flow_style=False)
binding_obj = OrderedDict([('policyname', policy_name),
('targetlbvserver', binding['targetlbvserver']),
('priority', binding['priority'])
])
policybindings.append(binding_obj)
print
cs_ansible_obj = OrderedDict([('name', 'Create cs vserver %s' % cs_vserver),
('delegate_to' , 'localhost'),
('netscaler_cs_vserver', OrderedDict([
('nsip', ns_host),
('nitro_user', ns_login),
('nitro_pass', ns_password),
('validate_certs', 'no'),
('state', 'present'),
('name', cs_vserver),
('ipv46', '10.22.22.22'), # FIXME
('port', 80), # FIXME
('servicetype', 'HTTP'), # FIXME
('policybindings', policybindings)])
)])
print yaml.dump(cs_ansible_obj, Dumper=yamlloader.ordereddict.CSafeDumper, default_flow_style=False)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment