Skip to content
Snippets Groups Projects
Commit c55f70b5 authored by Attila Farkas's avatar Attila Farkas
Browse files

separate user ansible files from basic configuration

parent 89dc55bc
No related branches found
No related tags found
2 merge requests!6Resolve "Convert BigBroker sandbox from KYPO-Creator to sandbox-creator",!5Resolve "Convert BigBroker sandbox from KYPO-Creator to sandbox-creator"
...@@ -23,23 +23,23 @@ def _generate_file(filename, output_string): ...@@ -23,23 +23,23 @@ def _generate_file(filename, output_string):
print("Error: cannot write to this location.") print("Error: cannot write to this location.")
def _create_role_directory(role_name): def _create_role_directory(role_name, provisioning_dir):
""" Creates directory structure for a role. """ """ Creates directory structure for a role. """
try: try:
os.mkdir("provisioning") os.mkdir(provisioning_dir)
except FileExistsError: except FileExistsError:
pass pass
try: try:
os.mkdir("provisioning/roles") os.mkdir(provisioning_dir + "/roles")
except FileExistsError: except FileExistsError:
pass pass
try: try:
os.mkdir("provisioning/roles/" + role_name) os.mkdir(provisioning_dir + "/roles/" + role_name)
except FileExistsError: except FileExistsError:
pass pass
try: try:
os.mkdir("provisioning/roles/" + role_name +"/tasks") os.mkdir(provisioning_dir + "/roles/" + role_name +"/tasks")
except FileExistsError: except FileExistsError:
pass pass
...@@ -71,10 +71,9 @@ def _generate_playbook(definitions): ...@@ -71,10 +71,9 @@ def _generate_playbook(definitions):
host_map = create_host_map(definitions["net_mappings"], definitions["router_mappings"], definitions["hosts"]) host_map = create_host_map(definitions["net_mappings"], definitions["router_mappings"], definitions["hosts"])
network = create_network_map(definitions) network = create_network_map(definitions)
network_ips = create_network_ips(definitions["networks"])
template = _load_template("playbook") template = _load_template("playbook")
output = template.render(hosts=host_map, routers=network, network_ips=network_ips, border_router_name = BORDER_ROUTER_NAME) output = template.render(hosts=host_map, routers=network)
try: try:
os.mkdir("provisioning") os.mkdir("provisioning")
...@@ -92,14 +91,14 @@ def _generate_device_configuration(definitions): ...@@ -92,14 +91,14 @@ def _generate_device_configuration(definitions):
network_ips = create_network_ips(definitions["networks"]) network_ips = create_network_ips(definitions["networks"])
template = _load_template("device_configuration") template = _load_template("device_configuration")
output = template.render(hosts=host_map, routers=network, network_ips=network_ips) output = template.render(hosts=host_map, routers=network, network_ips=network_ips, border_router_name = BORDER_ROUTER_NAME)
try: try:
os.mkdir("provisioning") os.mkdir("base_provisioning")
except FileExistsError: except FileExistsError:
pass pass
_generate_file("./provisioning/device_configuration.yml", output) _generate_file("./base_provisioning/device_configuration.yml", output)
def _generate_hosts_role(definitions): def _generate_hosts_role(definitions):
...@@ -112,7 +111,13 @@ def _generate_hosts_role(definitions): ...@@ -112,7 +111,13 @@ def _generate_hosts_role(definitions):
template = _load_template("hosts") template = _load_template("hosts")
output = template.render(hosts=host_map, routers=network) output = template.render(hosts=host_map, routers=network)
_create_role_directory("hosts") _create_role_directory("hosts", "base_provisioning")
_generate_file("./base_provisioning/roles/hosts/tasks/main.yml", output)
user_template = _load_template("user_hosts")
user_output = template.render()
_create_role_directory("hosts", "provisioning")
_generate_file("./provisioning/roles/hosts/tasks/main.yml", output) _generate_file("./provisioning/roles/hosts/tasks/main.yml", output)
...@@ -125,13 +130,21 @@ def _generate_separate_hosts_role(definitions): ...@@ -125,13 +130,21 @@ def _generate_separate_hosts_role(definitions):
for host_attributes in host_map: for host_attributes in host_map:
if host_attributes["host_name"] == host["name"]: if host_attributes["host_name"] == host["name"]:
host_name = host_attributes["host_name"]
router_ip = host_attributes["router_ip"] router_ip = host_attributes["router_ip"]
interface = host_attributes["interface"] interface = host_attributes["interface"]
template = _load_template("separate_hosts") template = _load_template("separate_hosts")
output = template.render(router_ip=router_ip, interface=interface) output = template.render(host_name=host_name, router_ip=router_ip, interface=interface)
_create_role_directory(host["name"], "base_provisioning")
_generate_file("./base_provisioning/roles/" + host["name"] + "/tasks/main.yml", output)
template = _load_template("user_separate_hosts")
output = template.render(host_name=host_name)
_create_role_directory(host["name"]) _create_role_directory(host["name"], "provisioning")
_generate_file("./provisioning/roles/" + host["name"] + "/tasks/main.yml", output) _generate_file("./provisioning/roles/" + host["name"] + "/tasks/main.yml", output)
def _generate_routers_role(definitions): def _generate_routers_role(definitions):
...@@ -148,8 +161,8 @@ def _generate_routers_role(definitions): ...@@ -148,8 +161,8 @@ def _generate_routers_role(definitions):
template = _load_template("routers") template = _load_template("routers")
output = template.render(hosts=host_map, routers=network, border_router_ip=BORDER_ROUTER_IP) output = template.render(hosts=host_map, routers=network, border_router_ip=BORDER_ROUTER_IP)
_create_role_directory("routers") _create_role_directory("routers", "base_provisioning")
_generate_file("./provisioning/roles/routers/tasks/main.yml", output) _generate_file("./base_provisioning/roles/routers/tasks/main.yml", output)
def _find_cidr(network_name, definitions): def _find_cidr(network_name, definitions):
...@@ -187,16 +200,15 @@ def _generate_br_role(definitions): ...@@ -187,16 +200,15 @@ def _generate_br_role(definitions):
template = _load_template("br") template = _load_template("br")
output = template.render(hosts = host_map, routers=network, br_routes=routers_in_br_network, border_router_name=BORDER_ROUTER_NAME, border_router_public_ip=BORDER_ROUTER_PUBLIC_IP) output = template.render(hosts = host_map, routers=network, br_routes=routers_in_br_network, border_router_name=BORDER_ROUTER_NAME, border_router_public_ip=BORDER_ROUTER_PUBLIC_IP)
_create_role_directory("br") _create_role_directory("br", "base_provisioning")
_generate_file("./provisioning/roles/br/tasks/main.yml", output) _generate_file("./base_provisioning/roles/br/tasks/main.yml", output)
def generate_ansible_files(device_definitions): def generate_ansible_files(device_definitions):
""" Generates files for ansible. """ """ Generates files for ansible. """
_generate_playbook(device_definitions) _generate_playbook(device_definitions)
# uncomment after the new version of ansible can be used _generate_device_configuration(device_definitions)
# _generate_device_configuration(device_definitions)
_generate_hosts_role(device_definitions) _generate_hosts_role(device_definitions)
_generate_separate_hosts_role(device_definitions) _generate_separate_hosts_role(device_definitions)
_generate_routers_role(device_definitions) _generate_routers_role(device_definitions)
......
...@@ -7,18 +7,34 @@ ...@@ -7,18 +7,34 @@
roles: roles:
- hosts - hosts
{% for host in hosts %}
- name: Configuring host {{ host.host_name }} separately
hosts: {{ host.host_name }}
become: yes
roles:
- {{ host.host_name }}
{% endfor %}
{% for host in hosts %} {% for host in hosts %}
- name: Configuring host {{ host.host_name }} - name: Configuring host {{ host.host_name }}
hosts: {{ host.host_name }} hosts: {{ host.host_name }}
become: yes become: yes
tasks: tasks:
- name: Change default gateway {% for network_ip in network_ips %}
command: route add default gw {{ host.router_ip }} {{ host.interface }} - name: Add gateway for {{ network_ip }}
command: route add -net {{ network_ip }} gw {{ host.router_ip }} {{ host.interface }}
{% endfor %}
{% endfor %} {% endfor %}
- name: Configuring all routers - name: Configuring all routers
hosts: {{ routers|map(attribute='router_name')|unique|join(',') }} hosts: {{ routers|map(attribute='router_name')|unique|reject('eq', border_router_name)|join(',') }}
become: yes become: yes
roles: roles:
- routers - routers
- name: Configuring border router
hosts: {{ border_router_name }}
become: yes
roles:
- br
... ...
--- ---
# Configuration of all host devices # Basic configuration of all host devices
- name: Install net-tools - name: Install net-tools
command: apt install net-tools command: apt install net-tools
......
--- ---
# Main ansible playbook # Main user ansible playbook
#- import_playbook: device_configuration.yml - for new version
- name: Configuring all hosts
hosts: {{ hosts|map(attribute='host_name')|unique|join(',') }}
become: yes
roles:
- hosts
{% for host in hosts %}
- name: Configuring host {{ host.host_name }} separately
hosts: {{ host.host_name }}
become: yes
roles:
- {{ host.host_name }}
{% endfor %}
{% for host in hosts %}
- name: Configuring host {{ host.host_name }}
hosts: {{ host.host_name }}
become: yes
tasks:
{% for network_ip in network_ips %}
- name: Add gateway for {{ network_ip }}
command: route add -net {{ network_ip }} gw {{ host.router_ip }} {{ host.interface }}
{% endfor %}
{% endfor %}
- name: Configuring all routers
hosts: {{ routers|map(attribute='router_name')|unique|reject('eq', border_router_name)|join(',') }}
become: yes
roles:
- routers
- name: Configuring border router
hosts: {{ border_router_name }}
become: yes
roles:
- br
# Write your custom configuration here: # Write your custom configuration here:
- name: Hello world
hosts: all
tasks:
- name: print hello world
debug:
msg: "Hello World"
... ...
--- ---
# Role for the host {{ host_name }}
- name: Add default path to router - name: Add default path to router
command: route add default gw {{ router_ip }} {{ interface }} command: route add default gw {{ router_ip }} {{ interface }}
... ...
---
# This is a role for all hosts.
# You can write your tasks here.
# These changes will affect all hosts.
...
---
# This is a role for the host {{ host_name }}.
# You can write your tasks here.
# These changes will affect only the host {{ host_name }}.
...
...@@ -19,7 +19,17 @@ Vagrant.configure("2") do |config| ...@@ -19,7 +19,17 @@ Vagrant.configure("2") do |config|
{{ printAttributes(name) }} end {{ printAttributes(name) }} end
{% endfor %} {% endfor %}
# configuration of devices with ansible # basic ansible configuration of devices and networks
config.vm.provision :ansible{% if ansible_local %}_local{% endif %} do |ansible|
ansible.playbook = "base_provisioning/device_configuration.yml"
ansible.verbose = true
ansible.extra_vars = {
ansible_python_interpreter: "/usr/bin/python3",
}
end
# user configuration of devices with ansible
config.vm.provision :ansible{% if ansible_local %}_local{% endif %} do |ansible| config.vm.provision :ansible{% if ansible_local %}_local{% endif %} do |ansible|
ansible.playbook = "provisioning/playbook.yml" ansible.playbook = "provisioning/playbook.yml"
ansible.verbose = true ansible.verbose = true
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment