puppet/iscsi/manifests/init.pp

142 lines
3.3 KiB
Puppet

# Install iSCSI target prequisites.
#
class iscsi::server {
package { "scsi-target-utils":
ensure => installed,
}
service { "tgtd":
ensure => running,
enable => true,
require => Package["scsi-target-utils"],
}
file { "/etc/tgt/targets.conf":
ensure => present,
source => [ "puppet:///files/iscsi/targets.conf.${fqdn}",
"puppet:///files/iscsi/targets.conf",
"puppet:///modules/iscsi/targets.conf", ],
mode => 0600,
owner => root,
group => root,
require => Package["scsi-target-utils"],
}
file { "/etc/tgt/target.d":
ensure => directory,
mode => 0700,
owner => root,
group => root,
require => Package["scsi-target-utils"],
}
exec { "iscsi-refresh":
command => "tgt-admin -e",
path => "/bin:/usr/bin:/sbin:/usr/sbin",
onlyif => "tgt-admin -e -p | egrep '^tgtadm '",
require => Service["tgtd"],
}
}
# Create iSCSI target.
#
# === Parameters
#
# $name:
# Path to block device that will be used as target.
#
# $tid:
# Target ID.
#
# $initiator:
# List of hosts that are allowed to connect to this target.
# Defaults to ALL.
#
# $ensure:
# If set to present target will be created and if set to absent
# target will be removed.
#
# === Sample usage
#
# iscsi::target { "/dev/vg0/iscsi":
# ensure => present,
# tid => 1,
# initiator => "192.168.1.2",
# }
define iscsi::target($tid, $initiator = "ALL", $ensure = "present") {
include iscsi::server
$iqn = sprintf("iqn.2005-08.tgt:%s%s", $hostname, regsubst($name, "/", ".", "G"))
case $ensure {
"present": {
file { "/etc/tgt/target.d/${tid}.conf":
ensure => present,
content => template("iscsi/tid.conf.erb"),
mode => 0600,
owner => root,
group => root,
require => File["/etc/tgt/target.d"],
before => Exec["iscsi-refresh"],
}
}
"absent": {
file { "/etc/tgt/target.d/${tid}.conf":
ensure => absent,
before => Exec["iscsi-refresh"],
}
}
}
}
# Install iSCSI initiator software.
#
class iscsi::initiator {
package { "iscsi-initiator-utils":
ensure => installed,
}
service { "iscsid":
ensure => running,
enable => true,
require => Package["iscsi-initiator-utils"],
}
}
# Connect to iSCSI target.
#
# === Parameters
#
# $name:
# IQN of iSCSI target to connect to.
#
# $portal:
# Address of iSCSI target server.
#
# === Sample usage
#
# iscsi::connect { "iqn.2005-08.tgt:vm0001.dev.vg0.iscsi":
# portal => "192.168.100.1",
# }
define iscsi::connect($portal) {
include iscsi::initiator
exec { "iscsi-connect-${name}":
path => "/bin:/usr/bin:/sbin:/usr/sbin",
command => "iscsiadm --mode discovery --type sendtargets --portal ${portal} && iscsiadm --mode node --targetname ${name} --portal ${portal} --login && sleep 5",
unless => "iscsiadm --mode session | egrep '${portal}:[0-9]*,[0-9]* ${name}'\$",
require => Service["iscsid"],
}
}