Создайте файл conf с Augeas
Я пытаюсь написать bash-скрипт, который будет использовать Augeas для создания файла conf в /etc/httpd/conf.d/, а также для настройки необходимых узлов для vhost. По какой-то причине я не могу установить узел DocumentRoot. Когда я пытаюсь использовать интерактивную оболочку, я могу создать ее просто отлично:
[root@panel conf.d]# augtool
augtool> print /files/etc/httpd/conf.d/hey.com.conf/
/files/etc/httpd/conf.d/hey.com.conf
/files/etc/httpd/conf.d/hey.com.conf/VirtualHost
/files/etc/httpd/conf.d/hey.com.conf/VirtualHost/arg = "*:80"
/files/etc/httpd/conf.d/hey.com.conf/VirtualHost/directive = "DocumentRoot"
augtool> set /files/etc/httpd/conf.d/hey.com.conf/VirtualHost/*[self::directive='DocumentRoot']/arg "/var/www/vhosts/hey.com"
augtool> print /files/etc/httpd/conf.d/hey.com.conf/
/files/etc/httpd/conf.d/hey.com.conf
/files/etc/httpd/conf.d/hey.com.conf/VirtualHost
/files/etc/httpd/conf.d/hey.com.conf/VirtualHost/arg = "*:80"
/files/etc/httpd/conf.d/hey.com.conf/VirtualHost/directive = "DocumentRoot"
/files/etc/httpd/conf.d/hey.com.conf/VirtualHost/directive/arg = "/var/www/vhosts/hey.com"
augtool> save
Saved 1 file(s)
augtool> quit
[root@panel conf.d]# cat hey.com.conf
<VirtualHost *:80>
DocumentRoot /var/www/vhosts/hey.com
</VirtualHost>
Однако мой сценарий не может его создать:
(Я поместил скрипт в мой путь для легкого выполнения) Пример использования: # aug hey.com
#!/bin/bash
# Set up conf file
name=$1
path="/files/etc/httpd/conf.d/"
conf="$name.conf"
echo ${path}${conf}
docroot="/var/www/vhosts/$name"
# Create Vhost
echo "DocRoot = $docroot"
mkdir $docroot
echo $path$conf
augtool -s set ${path}${conf}/VirtualHost/arg "*:80"
augtool -s set ${path}${conf}/VirtualHost/directive "DocumentRoot"
echo $docroot
echo "Nodes Present"
augtool print ${path}${conf}
#augtool -s set ${path}${conf}/VirtualHost/*[self::directive='DocumentRoot']/arg "$docroot"
augtool -s set /files/etc/httpd/conf.d/hey.com.conf/VirtualHost/*[self::directive=DocumentRoot]/arg /var/www/vhosts/hey.com
augtool print ${path}${conf}
augtool match /augeas//error
Насколько я могу судить, он пытается выполнить ту же команду, но не может записать аргумент в DocumentRoot. Буду очень признателен за любую помощь, чтобы указать мне правильное направление или переделать мое мышление в целом.
Это на коробке CentOS 6.6.
Обновить:
Сценарий создает файл на лету, поэтому он не существует заранее. Я удаляю его между запусками скрипта. Пример вывода выглядит следующим образом:
[root@panel ~]# aug hey.com
/files/etc/httpd/conf.d/hey.com.conf
DocRoot = /var/www/vhosts/hey.com
/files/etc/httpd/conf.d/hey.com.conf
Saved 1 file(s)
Saved 1 file(s)
/var/www/vhosts/hey.com
Nodes Present
/files/etc/httpd/conf.d/hey.com.conf
/files/etc/httpd/conf.d/hey.com.conf/VirtualHost
/files/etc/httpd/conf.d/hey.com.conf/VirtualHost/arg = "*:80"
/files/etc/httpd/conf.d/hey.com.conf/VirtualHost/directive = "DocumentRoot"
/files/etc/httpd/conf.d/hey.com.conf
/files/etc/httpd/conf.d/hey.com.conf/VirtualHost
/files/etc/httpd/conf.d/hey.com.conf/VirtualHost/arg = "*:80"
/files/etc/httpd/conf.d/hey.com.conf/VirtualHost/directive = "DocumentRoot"
/augeas/files/etc/sysconfig/iptables.save/error = parse_failed
1 ответ
Понял, я не правильно цитировал. Та же команда, которая работала в приглашении augtool, не работала в моем bash-скрипте. В сценарии я смог установить саму директиву, и единственное, что отличает аргумент - это использование * и [], которое, как выясняется, bash обрабатывает вместо augtool. Я процитировал это:
augtool -s set '/files/etc/httpd/conf.d/hey.com.conf/VirtualHost/*[self::directive="DocumentRoot"]/arg "/var/www/vhosts/hey.com"'
и теперь я могу построить узел просто отлично:
[root@panel ~]# cat /etc/httpd/conf.d/hey.com.conf
<VirtualHost *:80>
DocumentRoot /var/www/vhosts/hey.com
</VirtualHost>