feat: add support for vultr api v2

This commit is contained in:
Dhruv Kelawala 2023-03-04 03:50:16 +00:00
parent 1083b4bb97
commit 98fd887e01
4 changed files with 48 additions and 32 deletions

View file

@ -215,7 +215,7 @@ cloud_providers:
disk: 10 disk: 10
vultr: vultr:
os: Ubuntu 20.04 LTS x64 os: Ubuntu 20.04 LTS x64
size: 1024 MB RAM,25 GB SSD,1.00 TB BW size: vc2-1c-1gb
linode: linode:
type: g6-nanode-1 type: g6-nanode-1
image: linode/ubuntu20.04 image: linode/ubuntu20.04

View file

@ -1,3 +1,3 @@
ansible==6.1.0 ansible==7.3.0
jinja2~=3.0.3 jinja2~=3.0.3
netaddr netaddr

View file

@ -4,35 +4,50 @@
- block: - block:
- name: Creating a firewall group - name: Creating a firewall group
vultr_firewall_group: vultr.cloud.firewall_group:
api_key: "{{ vultr_api_key }}"
name: "{{ algo_server_name }}" name: "{{ algo_server_name }}"
- name: Creating firewall rules - name: Creating firewall rules
vultr_firewall_rule: vultr.cloud.firewall_rule:
api_key: "{{ vultr_api_key }}"
group: "{{ algo_server_name }}" group: "{{ algo_server_name }}"
protocol: "{{ item.protocol }}" protocol: "{{ item.protocol }}"
port: "{{ item.port }}" port: "{{ item.port }}"
ip_version: "{{ item.ip }}" ip_type: "{{ item.ip }}"
cidr: "{{ item.cidr }}" subnet: "{{ item.subnet }}"
with_items: subnet_size: "0"
- { protocol: tcp, port: "{{ ssh_port }}", ip: v4, cidr: 0.0.0.0/0 } loop:
- { protocol: tcp, port: "{{ ssh_port }}", ip: v6, cidr: "::/0" } - { protocol: tcp, port: "{{ ssh_port }}", ip: v4, subnet: 0.0.0.0/0 }
- { protocol: udp, port: 500, ip: v4, cidr: 0.0.0.0/0 } - { protocol: tcp, port: "{{ ssh_port }}", ip: v6, subnet: "::/0" }
- { protocol: udp, port: 500, ip: v6, cidr: "::/0" } - { protocol: udp, port: 500, ip: v4, subnet: 0.0.0.0/0 }
- { protocol: udp, port: 4500, ip: v4, cidr: 0.0.0.0/0 } - { protocol: udp, port: 500, ip: v6, subnet: "::/0" }
- { protocol: udp, port: 4500, ip: v6, cidr: "::/0" } - { protocol: udp, port: 4500, ip: v4, subnet: 0.0.0.0/0 }
- { protocol: udp, port: "{{ wireguard_port }}", ip: v4, cidr: 0.0.0.0/0 } - { protocol: udp, port: 4500, ip: v6, subnet: "::/0" }
- { protocol: udp, port: "{{ wireguard_port }}", ip: v6, cidr: "::/0" } - {
protocol: udp,
port: "{{ wireguard_port }}",
ip: v4,
subnet: 0.0.0.0/0
}
- {
protocol: udp,
port: "{{ wireguard_port }}",
ip: v6,
subnet: "::/0"
}
- name: Upload the startup script - name: Upload the startup script
vultr_startup_script: vultr.cloud.startup_script:
api_key: "{{ vultr_api_key }}"
name: algo-startup name: algo-startup
script: | script: |
{{ lookup('template', 'files/cloud-init/base.yml') }} {{ lookup('template', 'files/cloud-init/base.yml') }}
- name: Creating a server - name: Creating a server
vultr_server: vultr.cloud.instance:
name: "{{ algo_server_name }}" api_key: "{{ vultr_api_key }}"
label: "{{ algo_server_name }}"
startup_script: algo-startup startup_script: algo-startup
hostname: "{{ algo_server_name }}" hostname: "{{ algo_server_name }}"
os: "{{ cloud_providers.vultr.os }}" os: "{{ cloud_providers.vultr.os }}"
@ -40,14 +55,14 @@
region: "{{ algo_vultr_region }}" region: "{{ algo_vultr_region }}"
firewall_group: "{{ algo_server_name }}" firewall_group: "{{ algo_server_name }}"
state: started state: started
tag: Environment:Algo tags: ["Environment:Algo"]
ipv6_enabled: true enable_ipv6: true
auto_backup_enabled: false backups: false
notify_activate: false activation_email: false
register: vultr_server register: vultr_server
- set_fact: - set_fact:
cloud_instance_ip: "{{ vultr_server.vultr_server.v4_main_ip }}" cloud_instance_ip: "{{ vultr_server.vultr_instance.main_ip }}"
ansible_ssh_user: algo ansible_ssh_user: algo
ansible_ssh_port: "{{ ssh_port }}" ansible_ssh_port: "{{ ssh_port }}"
cloudinit: true cloudinit: true

View file

@ -12,9 +12,13 @@
set_fact: set_fact:
algo_vultr_config: "{{ vultr_config | default(_vultr_config.user_input) | default(lookup('env','VULTR_API_CONFIG'), true) }}" algo_vultr_config: "{{ vultr_config | default(_vultr_config.user_input) | default(lookup('env','VULTR_API_CONFIG'), true) }}"
- name: Set the Vultr API Key as a fact
set_fact:
vultr_api_key: "{{ lookup('ansible.builtin.ini', 'key', section='default', file=algo_vultr_config) }}"
- name: Get regions - name: Get regions
uri: uri:
url: https://api.vultr.com/v1/regions/list url: https://api.vultr.com/v2/regions
method: GET method: GET
status_code: 200 status_code: 200
register: _vultr_regions register: _vultr_regions
@ -22,7 +26,7 @@
- name: Format regions - name: Format regions
set_fact: set_fact:
regions: >- regions: >-
[ {% for k, v in _vultr_regions.json.items() %} [ {% for v in _vultr_regions.json['regions'] %}
{{ v }}{% if not loop.last %},{% endif %} {{ v }}{% if not loop.last %},{% endif %}
{% endfor %} ] {% endfor %} ]
@ -32,17 +36,14 @@
- name: Set default region - name: Set default region
set_fact: set_fact:
default_region: >- default_region: 1
{% for r in vultr_regions %}
{%- if r['DCID'] == "1" %}{{ loop.index }}{% endif %}
{%- endfor %}
- pause: - pause:
prompt: | prompt: |
What region should the server be located in? What region should the server be located in?
(https://www.vultr.com/locations/): (https://www.vultr.com/locations/):
{% for r in vultr_regions %} {% for r in vultr_regions %}
{{ loop.index }}. {{ r['name'] }} {{ loop.index }}. {{ r['city'] }}
{% endfor %} {% endfor %}
Enter the number of your desired region Enter the number of your desired region
@ -54,5 +55,5 @@
set_fact: set_fact:
algo_vultr_region: >- algo_vultr_region: >-
{% if region is defined %}{{ region }} {% if region is defined %}{{ region }}
{%- elif _algo_region.user_input %}{{ vultr_regions[_algo_region.user_input | int -1 ]['name'] }} {%- elif _algo_region.user_input %}{{ vultr_regions[_algo_region.user_input | int -1 ]['id'] }}
{%- else %}{{ vultr_regions[default_region | int - 1]['name'] }}{% endif %} {%- else %}{{ vultr_regions[default_region | int - 1]['id'] }}{% endif %}