From 9a1fb1b9827c910ce6a5aad25d088d3e8797f159 Mon Sep 17 00:00:00 2001 From: Matthew McKinnon Date: Tue, 29 Oct 2024 21:44:57 +1000 Subject: [PATCH] featcreate task to map iscsi drive and partition, refs #31 --- hosts | 4 +++ main.yml | 8 ++++++ tasks/iscsi.yml | 74 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 tasks/iscsi.yml diff --git a/hosts b/hosts index ffb84c5..a1ed410 100644 --- a/hosts +++ b/hosts @@ -6,3 +6,7 @@ vps02.comprofix.com [docker] docker.comprofix.xyz + +[dev] +10.10.10.170 + diff --git a/main.yml b/main.yml index a30c99d..ee95ad1 100644 --- a/main.yml +++ b/main.yml @@ -127,6 +127,14 @@ tags: dockerserver_install +- hosts: dev + become: yes + tasks: + + - name: Connect iSCSI + import_tasks: tasks/iscsi.yml + tags: iscsi_connect + diff --git a/tasks/iscsi.yml b/tasks/iscsi.yml new file mode 100644 index 0000000..2a70e75 --- /dev/null +++ b/tasks/iscsi.yml @@ -0,0 +1,74 @@ +--- +- name: Ensure open-iscsi is installed + package: + name: open-iscsi + state: present + +- name: Ensure open-iscsi is installed + package: + name: parted + state: present + +- name: Discover iSCSI targets + command: iscsiadm -m discovery -t sendtargets -p "10.10.10.2" + register: iscsi_discovery + changed_when: False + +- name: Set target_iqn variable based on discovery + set_fact: + target_iqn: "{{ item.split(' ')[1] }}" + loop: "{{ iscsi_discovery.stdout_lines }}" + when: item.startswith("10.10.10.2") + +- name: Fail if no target_iqn found + fail: + msg: "No target IQN found for iSCSI server IP 10.10.10.2" + when: target_iqn is not defined + +- name: List all block devices + command: lsblk -o NAME,SIZE,TYPE,MODEL + register: lsblk_output + +- name: Set iSCSI device variable + set_fact: + iscsi_device: "/dev/{{ item.split()[0] }}" + loop: "{{ lsblk_output.stdout_lines }}" + when: item.split()[2] == 'disk' and 'iSCSI' in item # Adjust based on the MODEL you observe + +- name: Fail if no iSCSI device found + fail: + msg: "No iSCSI device found!" + when: iscsi_device is not defined + +- name: Create a partition on iSCSI device using parted + parted: + device: "{{ iscsi_device }}" + number: 1 + state: present + part_type: primary + fs_type: ext4 + part_start: 0% # Start at the beginning of the device + part_end: 100% # Use the entire available space + +- name: Create filesystem on new partition + filesystem: + fstype: ext4 + dev: "{{ iscsi_device }}1" # Format the partition + +- name: Create mount point + file: + path: /mnt/data + state: directory + +- name: Mount iSCSI target + mount: + path: /mnt/data + src: "{{ iscsi_device }}1" # Mount the new partition + fstype: ext4 + state: mounted + +- name: Ensure iSCSI target is mounted at boot + lineinfile: + path: /etc/fstab + line: "{{ iscsi_device }}1 /mnt/iscsi ext4 defaults 0 0" + state: present