Last active
January 12, 2023 16:40
-
-
Save nitanka/7843fc1b72aba0faf8260aecf735221f to your computer and use it in GitHub Desktop.
Ansible: Adding EBS volume to an EC2 instance
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
- name: Creating a Volume | |
hosts: localhost | |
become: yes | |
tasks: | |
- name: Creating a Volume | |
ec2_vol: | |
aws_access_key: "{{ lookup('env', 'AWS_ACCESS_KEY_ID') }}" | |
aws_secret_key: "{{ lookup('env', 'AWS_SECRET_ACCESS_KEY') }}" | |
instance: '<instance-id>' | |
volume_size: <volume-size> | |
device_name: <device-name> #/dev/xvdf, /dev/xvdb | |
region: '<region-name>' | |
volume_type: <volume-type> #example gp2 | |
register: ec2_vol | |
- name: Printing the volume information | |
debug: var=ec2_vol | |
- name: creating mount point (directory) | |
file: | |
state: directory | |
path: "< path >" | |
- name: formatting the volume | |
filesystem: | |
dev: "< MOUNT_VOLUME >" | |
fstype: "< VOLUME_FORMAT >" #ext4, ext3 etc | |
#the device mount depends on the system | |
- name: mounting the filesystem | |
mount: | |
name: "< path to mount point >" | |
src: "< MOUNT_VOLUME >" | |
fstype: "< VOLUME_FORMAT >" #ext4, ext3 etc | |
state: mounted |
I think you are running the ansible in ec2 instance. I was running on my local machine.
ya, the above ansible script is for managing ec2 instances.
I don't get any /dev/xvdf
but /dev/nvme1n1
within ec2 instance when running lsblk
(related to https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/device_naming.html#available-ec2-device-names and https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-using-volumes.html). To deduce it, I use something like below using facts from Ansible and matching volume id to device
- name: Collect only facts about hardware
setup:
gather_subset:
- hardware
- name: Output dev name
debug:
var: "{{ hostvars[inventory_hostname].ansible_devices | dict2items | community.general.json_query(jmesquery) | first}}"
vars:
jmesquery: "[?length(value.links.ids)>`0` && contains(map(&contains(@, `{{ ec2_vol.volume_id.replace('vol-', '') }}`), value.links.ids), `true`)].key"
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
on the above code, we can see in creating volume task, we are passing the device name, I am using the same device name in formatting the volume task