diff --git a/README.md b/README.md index 98877ec..005ae9a 100644 --- a/README.md +++ b/README.md @@ -12,71 +12,50 @@ Cloud infrastructure provisioning. * Manages OpenStack VMs -## Requirements +## Ansible compatibility -Ansible Collections: +This collection has been tested against Ansible `2.9.10`. + +## Installation + +To use this collection it must be first installed. + +This can performed by using the Ansible CLI directly. + +```bash +ansible-galaxy collection install snowdrop.cloud_infra +``` + +Another way to install this collection is using a `requirements.yml` file. ```yaml +--- collections: - - name: openstack.cloud - version: 2.1.0 + - name: snowdrop.cloud_infra ``` -## Role Variables +Then install the this file using the following command. -OpenStack VM role required parameters +```bash +ansible-galaxy collection install -r requirements.yml --upgrade +``` -| Parameter | Comments | -|-----------|------------| -| `rhos_auth`
$\color{fuchsia}{\textsf{map}}$ / $\color{red}{\textsf{required}}$ | Map with the authentication | -| `rhos_auth_type`
$\color{fuchsia}{\textsf{map}}$ / $\color{red}{\textsf{required}}$ | RHOS Authentication type 1) | -| `openstack_security_group`
$\color{fuchsia}{\textsf{map}}$ / $\color{red}{\textsf{required}}$ | Security group | -| `state`
$\color{fuchsia}{\textsf{map}}$ / $\color{red}{\textsf{required}}$ | State of the VM
* `present`
* `absent` | -| `vm_name`
$\color{fuchsia}{\textsf{map}}$ / $\color{red}{\textsf{required}}$ | Name of the VM to be created | +## Roles -1) More information on the available keystone plugins on the -[RHOS documentation](https://docs.openstack.org/keystoneauth/latest/plugin-options.html#available-plugins). - -The `rhos_auth` Map parameter must contain the required attributes for a successfull - authentication as selected with the `rhos_auth_type` variable. - -For a `v3password` authentication the required contents are the following. +* [openstack_vm](roles/openstack_vm): provision OpenStack virtual machines -| Name | Comments | -|-------|-----------------------------------| -| `auth_url`
$\color{fuchsia}{\textsf{map}}$ / $\color{red}{\textsf{required}}$ | Service authentication URL | -| `password`
$\color{fuchsia}{\textsf{map}}$ / $\color{red}{\textsf{required}}$ | Console login user | -| `project_domain_name`
$\color{fuchsia}{\textsf{map}}$ / $\color{red}{\textsf{required}}$ | Project domain | -| `project_name`
$\color{fuchsia}{\textsf{map}}$ / $\color{red}{\textsf{required}}$ | Tenant domain | -| `user_domain_name`
$\color{fuchsia}{\textsf{map}}$ / $\color{red}{\textsf{required}}$ | User domain | -| `username`
$\color{fuchsia}{\textsf{map}}$ / $\color{red}{\textsf{required}}$ | Console login user | +## Usage -Output: -* `openstack_vm_ipv4` -* `openstack_output` +To create a VM on an OpenStack project check the [`create_vm` playbook](playbooks/create_vm.yml). -## Example +To remove a VM from an OpenStack project check the [`remove_vm` playbook](playbooks/create_vm.yml). -Sample playbook: +## License -```yaml -- name: "Create VM on OpenStack" - hosts: localhost - gather_facts: True - - tasks: - - name: "Create VM" - ansible.builtin.include_role: - name: "snowdrop.cloud_infra.openstack_vm" - vars: - rhos_auth: - auth_url: - project_name: - username: - password: - user_domain_name: - project_domain_name: - rhos_auth_type: v3password - state: present - vm_name: snowdrop-vm -``` \ No newline at end of file +Apache License 2.0 + +Check the [LICENSE](LICENSE) to view the full text. + +## Author Information + +This role has been created by the [Snowdrop team](https://github.com/snowdrop/). diff --git a/roles/openstack_vm/molecule/github/INSTALL.rst b/molecule/github/INSTALL.rst similarity index 100% rename from roles/openstack_vm/molecule/github/INSTALL.rst rename to molecule/github/INSTALL.rst diff --git a/roles/openstack_vm/molecule/github/converge.yml b/molecule/github/converge.yml similarity index 100% rename from roles/openstack_vm/molecule/github/converge.yml rename to molecule/github/converge.yml diff --git a/roles/openstack_vm/molecule/github/create.yml b/molecule/github/create.yml similarity index 100% rename from roles/openstack_vm/molecule/github/create.yml rename to molecule/github/create.yml diff --git a/roles/openstack_vm/molecule/github/defaults/main.yml b/molecule/github/defaults/main.yml similarity index 97% rename from roles/openstack_vm/molecule/github/defaults/main.yml rename to molecule/github/defaults/main.yml index f6875c4..ea57293 100644 --- a/roles/openstack_vm/molecule/github/defaults/main.yml +++ b/molecule/github/defaults/main.yml @@ -9,7 +9,7 @@ openstack_defaults: name: "{{ hostname }}" image: Fedora-Cloud-Base-35 key_name: "{{ hostname }}" - flavor: m1.medium + flavor: m1.small network: default_network security_group: default_security_group # Array of items with 2 attributes, name and size diff --git a/roles/openstack_vm/molecule/github/destroy.yml b/molecule/github/destroy.yml similarity index 100% rename from roles/openstack_vm/molecule/github/destroy.yml rename to molecule/github/destroy.yml diff --git a/roles/openstack_vm/molecule/local-default-key/molecule.yml b/molecule/github/molecule.yml similarity index 100% rename from roles/openstack_vm/molecule/local-default-key/molecule.yml rename to molecule/github/molecule.yml diff --git a/molecule/github/roles b/molecule/github/roles new file mode 120000 index 0000000..148b132 --- /dev/null +++ b/molecule/github/roles @@ -0,0 +1 @@ +../../roles/ \ No newline at end of file diff --git a/roles/openstack_vm/molecule/github/verify.yml b/molecule/github/verify.yml similarity index 93% rename from roles/openstack_vm/molecule/github/verify.yml rename to molecule/github/verify.yml index be7ce2c..ddf2e20 100644 --- a/roles/openstack_vm/molecule/github/verify.yml +++ b/molecule/github/verify.yml @@ -42,7 +42,7 @@ - name: "Validate server IPV4" ansible.builtin.assert: that: - - openstack_server_info_output.servers[0].access_ipv4 is defined and openstack_server_info_output.servers[0].access_ipv4 | length > 0 + - openstack_vm_ipv4 is defined and openstack_vm_ipv4 | length > 0 msg: "Openstack server must have an IPV4. " - name: "Validate server flavor" diff --git a/roles/openstack_vm/molecule/local-default-key/INSTALL.rst b/molecule/local-default-key/INSTALL.rst similarity index 100% rename from roles/openstack_vm/molecule/local-default-key/INSTALL.rst rename to molecule/local-default-key/INSTALL.rst diff --git a/roles/openstack_vm/molecule/local-default-key/converge.yml b/molecule/local-default-key/converge.yml similarity index 100% rename from roles/openstack_vm/molecule/local-default-key/converge.yml rename to molecule/local-default-key/converge.yml diff --git a/roles/openstack_vm/molecule/local-default-key/create.yml b/molecule/local-default-key/create.yml similarity index 100% rename from roles/openstack_vm/molecule/local-default-key/create.yml rename to molecule/local-default-key/create.yml diff --git a/roles/openstack_vm/molecule/local-vm-key/defaults/main.yml b/molecule/local-default-key/defaults/main.yml similarity index 97% rename from roles/openstack_vm/molecule/local-vm-key/defaults/main.yml rename to molecule/local-default-key/defaults/main.yml index 280ecf4..f33b3e9 100644 --- a/roles/openstack_vm/molecule/local-vm-key/defaults/main.yml +++ b/molecule/local-default-key/defaults/main.yml @@ -35,7 +35,7 @@ openstack_defaults: name: "{{ hostname }}" image: Fedora-Cloud-Base-35 key_name: "{{ hostname }}" - flavor: m1.medium + flavor: m1.small network: default_network security_group: default_security_group # Array of items with 2 attributes, name and size diff --git a/roles/openstack_vm/molecule/local-default-key/destroy.yml b/molecule/local-default-key/destroy.yml similarity index 100% rename from roles/openstack_vm/molecule/local-default-key/destroy.yml rename to molecule/local-default-key/destroy.yml diff --git a/roles/openstack_vm/molecule/github/molecule.yml b/molecule/local-default-key/molecule.yml similarity index 94% rename from roles/openstack_vm/molecule/github/molecule.yml rename to molecule/local-default-key/molecule.yml index 6922138..03e06e0 100644 --- a/roles/openstack_vm/molecule/github/molecule.yml +++ b/molecule/local-default-key/molecule.yml @@ -4,6 +4,7 @@ dependency: driver: name: default # name: delegated + # name: docker platforms: - name: instance image: docker.io/pycontribs/centos:8 diff --git a/molecule/local-default-key/roles b/molecule/local-default-key/roles new file mode 120000 index 0000000..148b132 --- /dev/null +++ b/molecule/local-default-key/roles @@ -0,0 +1 @@ +../../roles/ \ No newline at end of file diff --git a/roles/openstack_vm/molecule/local-default-key/verify.yml b/molecule/local-default-key/verify.yml similarity index 95% rename from roles/openstack_vm/molecule/local-default-key/verify.yml rename to molecule/local-default-key/verify.yml index ebb9a0a..10653f7 100644 --- a/roles/openstack_vm/molecule/local-default-key/verify.yml +++ b/molecule/local-default-key/verify.yml @@ -52,7 +52,7 @@ - name: "Validate server IPV4" ansible.builtin.assert: that: - - openstack_server_info_output.servers[0].access_ipv4 is defined and openstack_server_info_output.servers[0].access_ipv4 | length > 0 + - openstack_vm_ipv4 is defined and openstack_vm_ipv4 | length > 0 msg: "Openstack server must have an IPV4. " - name: "Validate server flavor" diff --git a/roles/openstack_vm/molecule/local-vm-key/INSTALL.rst b/molecule/local-vm-key/INSTALL.rst similarity index 100% rename from roles/openstack_vm/molecule/local-vm-key/INSTALL.rst rename to molecule/local-vm-key/INSTALL.rst diff --git a/roles/openstack_vm/molecule/local-vm-key/converge.yml b/molecule/local-vm-key/converge.yml similarity index 100% rename from roles/openstack_vm/molecule/local-vm-key/converge.yml rename to molecule/local-vm-key/converge.yml diff --git a/roles/openstack_vm/molecule/local-vm-key/create.yml b/molecule/local-vm-key/create.yml similarity index 100% rename from roles/openstack_vm/molecule/local-vm-key/create.yml rename to molecule/local-vm-key/create.yml diff --git a/roles/openstack_vm/molecule/local-default-key/defaults/main.yml b/molecule/local-vm-key/defaults/main.yml similarity index 97% rename from roles/openstack_vm/molecule/local-default-key/defaults/main.yml rename to molecule/local-vm-key/defaults/main.yml index 280ecf4..f33b3e9 100644 --- a/roles/openstack_vm/molecule/local-default-key/defaults/main.yml +++ b/molecule/local-vm-key/defaults/main.yml @@ -35,7 +35,7 @@ openstack_defaults: name: "{{ hostname }}" image: Fedora-Cloud-Base-35 key_name: "{{ hostname }}" - flavor: m1.medium + flavor: m1.small network: default_network security_group: default_security_group # Array of items with 2 attributes, name and size diff --git a/roles/openstack_vm/molecule/local-vm-key/destroy.yml b/molecule/local-vm-key/destroy.yml similarity index 100% rename from roles/openstack_vm/molecule/local-vm-key/destroy.yml rename to molecule/local-vm-key/destroy.yml diff --git a/roles/openstack_vm/molecule/local-vm-key/molecule.yml b/molecule/local-vm-key/molecule.yml similarity index 87% rename from roles/openstack_vm/molecule/local-vm-key/molecule.yml rename to molecule/local-vm-key/molecule.yml index 952b8f8..03e06e0 100644 --- a/roles/openstack_vm/molecule/local-vm-key/molecule.yml +++ b/molecule/local-vm-key/molecule.yml @@ -2,7 +2,8 @@ dependency: name: galaxy driver: - name: delegated + name: default + # name: delegated # name: docker platforms: - name: instance diff --git a/molecule/local-vm-key/roles b/molecule/local-vm-key/roles new file mode 120000 index 0000000..148b132 --- /dev/null +++ b/molecule/local-vm-key/roles @@ -0,0 +1 @@ +../../roles/ \ No newline at end of file diff --git a/roles/openstack_vm/molecule/local-vm-key/verify.yml b/molecule/local-vm-key/verify.yml similarity index 96% rename from roles/openstack_vm/molecule/local-vm-key/verify.yml rename to molecule/local-vm-key/verify.yml index 81f7fc2..f7ca902 100644 --- a/roles/openstack_vm/molecule/local-vm-key/verify.yml +++ b/molecule/local-vm-key/verify.yml @@ -60,7 +60,7 @@ - name: "Validate server IPV4" ansible.builtin.assert: that: - - openstack_server_info_output.servers[0].access_ipv4 is defined and openstack_server_info_output.servers[0].access_ipv4 | length > 0 + - openstack_vm_ipv4 is defined and openstack_vm_ipv4 | length > 0 msg: "Openstack server must have an IPV4. " - name: "Validate server flavor" diff --git a/molecule/requirements.txt b/molecule/requirements.txt new file mode 100644 index 0000000..2e0a325 --- /dev/null +++ b/molecule/requirements.txt @@ -0,0 +1,8 @@ +#molecule[docker,lint] +molecule-plugins[docker] +yq +ansible-lint +#molecule-lint +molecule-docker +#molecule-podman +lint \ No newline at end of file diff --git a/playbooks/create_vm.yml b/playbooks/create_vm.yml new file mode 100644 index 0000000..3bff300 --- /dev/null +++ b/playbooks/create_vm.yml @@ -0,0 +1,11 @@ +- name: "Create VM on OpenStack" + hosts: localhost + gather_facts: True + + tasks: + - name: "Create VM" + ansible.builtin.include_role: + name: "snowdrop.cloud_infra.openstack_vm" + vars: + state: present + vm_name: snowdrop-vm diff --git a/playbooks/remove_vm.yml b/playbooks/remove_vm.yml new file mode 100644 index 0000000..c9c53ea --- /dev/null +++ b/playbooks/remove_vm.yml @@ -0,0 +1,11 @@ +- name: "Remove VM on OpenStack" + hosts: localhost + gather_facts: True + + tasks: + - name: "Remove VM" + ansible.builtin.include_role: + name: "snowdrop.cloud_infra.openstack_vm" + vars: + state: absent + vm_name: snowdrop-vm diff --git a/requirements.txt b/requirements.txt index c678eea..38b9f8f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,10 +1,3 @@ -molecule[docker,lint] -openstacksdk >= 1.2.0 -#python-openstackclient >= 6.2.0 -yq ansible >= 2.9.10 -ansible-lint -#molecule-lint -molecule-docker -#molecule-podman -lint \ No newline at end of file +openstacksdk >= 2.0.0 +#python-openstackclient >= 6.2.0