Archived
1
This repository has been archived on 2025-08-09. You can view files and clone it, but cannot push or open issues or pull requests.
Files
playbookctl/internal/space_creator/static/dd.sethostname.sh
2024-12-23 01:55:48 +03:00

64 lines
1.4 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# vi: set tabstop=4 shiftwidth=4 noexpandtab :
#------------------------------------------------#
# Модуль настройки hostname.
#
# В отличии от стокового модуля "hostname",
# данный модуль так же патчит файл `/etc/hosts`.
# . . . . . . . . . . . . . . . . . . . . . . . .
# - dd.sethostname:
# name: my-virtual-machine
#------------------------------------------------#
source $1
set -euo pipefail
__curr_hostname="$(hostname)"
__changed=false
if [[ "$__curr_hostname" != "$name" ]]; then
hostnamectl set-hostname "$name"
perl - "$__curr_hostname" "$name" <<'EOP'
#!perl
use strict;
use warnings;
use Data::Dumper qw(Dumper);
my ($oldhost, $newhost) = @ARGV;
my %hosts;
open(FILE_HOSTS, "<", "/etc/hosts") || die $!;
while(<FILE_HOSTS>) {
chomp;
if (/^#/ || /^\s*$/) {
next;
}
my @pair = split(/\s+/, $_, 2);
my @values = split(/\s+/, $pair[1]);
$hosts{$pair[0]} = [@values];
}
close(FILE_HOSTS);
while (my ($key, $value) = each(%hosts)) {
my $i = 0;
foreach my $host (@{ $value }) {
if ($host eq $oldhost) {
@{ $value }[$i] = $newhost;
$hosts{$key} = [@{ $value }[$i]];
}
$i = $i + 1;
}
}
open(FILE_HOSTS, ">", "/etc/hosts") || die $!;
foreach my $key (sort(keys(%hosts))) {
print FILE_HOSTS "$key @{$hosts{$key}}\n";
}
close(FILE_HOSTS);
EOP
__changed=true
fi
## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ##
echo "{ \"changed\": $__changed }"