diff --git a/cloud.yml b/cloud.yml index 671c7765..6515103f 100644 --- a/cloud.yml +++ b/cloud.yml @@ -33,6 +33,8 @@ when: algo_provider == "scaleway" - role: cloud-openstack when: algo_provider == "openstack" + - role: cloud-cloudstack + when: algo_provider == "cloudstack" - role: local when: algo_provider == "local" diff --git a/config.cfg b/config.cfg index 15aa586e..313a0c25 100644 --- a/config.cfg +++ b/config.cfg @@ -150,6 +150,10 @@ cloud_providers: openstack: flavor_ram: ">=512" image: Ubuntu-18.04 + cloudstack: + size: Tiny + image: Linux Ubuntu 18.04 LTS 64-bit + disk: 10 vultr: os: Ubuntu 18.04 x64 size: 1024 MB RAM,25 GB SSD,1.00 TB BW diff --git a/input.yml b/input.yml index 34ae4f66..e7c06fdd 100644 --- a/input.yml +++ b/input.yml @@ -20,6 +20,7 @@ - { name: Google Compute Engine, alias: gce } - { name: Scaleway, alias: scaleway} - { name: OpenStack (DreamCompute optimised), alias: openstack } + - { name: CloudStack, alias: cloudstask } - { name: Install to existing Ubuntu 18.04 server (Advanced), alias: local } vars_files: - config.cfg diff --git a/roles/cloud-cloudstack/defaults/main.yml b/roles/cloud-cloudstack/defaults/main.yml new file mode 100644 index 00000000..31eba013 --- /dev/null +++ b/roles/cloud-cloudstack/defaults/main.yml @@ -0,0 +1,2 @@ +--- +cloudstack_venv: "{{ playbook_dir }}/configs/.venvs/cloudstack" \ No newline at end of file diff --git a/roles/cloud-cloudstack/tasks/main.yml b/roles/cloud-cloudstack/tasks/main.yml new file mode 100644 index 00000000..753205ec --- /dev/null +++ b/roles/cloud-cloudstack/tasks/main.yml @@ -0,0 +1,58 @@ +--- +- block: + - name: Build python virtual environment + import_tasks: venv.yml + + - block: + - name: Security group created + cs_securitygroup: + name: "{{ algo_server_name }}-security_group" + description: AlgoVPN security group + register: cs_security_group + + - name: Security rules created + cs_security_group_rule: + security_group: "{{ cs_security_group.name }}" + protocol: "{{ item.proto }}" + start_port: "{{ item.port_min }}" + end_port: "{{ item.port_max }}" + cidr: "{{ item.range }}" + with_items: + - { proto: tcp, start_port: 22, end_port: 22, range: 0.0.0.0/0 } + - { proto: udp, start_port: 4500, end_port: 4500, range: 0.0.0.0/0 } + - { proto: udp, start_port: 500, end_port: 500, range: 0.0.0.0/0 } + - { proto: udp, start_port: "{{ wireguard_port }}", end_port: "{{ wireguard_port }}", range: 0.0.0.0/0 } + + - name: Keypair created + cs_sshkeypair: + name: "{{ SSH_keys.comment|regex_replace('@', '_') }}" + public_key: "{{ SSH_keys.public }}" + register: cs_keypair + + - name: Set facts + set_fact: + image_id: "{{ cloud_providers.cloudstack.image }}" + size: "{{ cloud_providers.cloudstack.size }}" + disk: "{{ cloud_providers.cloudstack.disk }}" + keypair_name: "{{ cs_keypair.name }}" + + - name: Server created + cs_instance: + name: "{{ algo_server_name }}" + root_disk_size: "{{ disk }}" + image: "{{ image_id }}" + ssh_key: "{{ keypair_name }}" + security_groups: "{{ cs_security_group.name }}" + register: cs_server + + - set_fact: + cloud_instance_ip: "{{ cs_server.default_ip }}" + ansible_ssh_user: ubuntu + environment: + PYTHONPATH: "{{ cloudstack_venv }}/lib/python2.7/site-packages/" + + rescue: + - debug: var=fail_hint + tags: always + - fail: + tags: always diff --git a/roles/cloud-cloudstack/tasks/venv.yml b/roles/cloud-cloudstack/tasks/venv.yml new file mode 100644 index 00000000..4b641fcf --- /dev/null +++ b/roles/cloud-cloudstack/tasks/venv.yml @@ -0,0 +1,13 @@ +--- +- name: Clean up the environment + file: + dest: "{{ cloudstack_venv }}" + state: absent + when: clean_environment + +- name: Install requirements + pip: + name: sc + version: 2.5.8 + virtualenv: "{{ cloudstack_venv }}" + virtualenv_python: python2.7