Назад | Перейти на главную страницу

Марионетка: можно ли удалить несколько строк, используя тип file_line?

В прошлые времена в компании, в которой я работаю, кто-то настраивал множество псевдонимов и экспорт в /etc/profile.

С тех пор мы внедрили Puppet, и есть модуль, который управляет экспортом и псевдонимами пользователей приложения.

Новый модуль на самом деле очень простой ... он гарантирует, что файл с именем application_env.sh проживает в /etc/profile.d/ и в основном это файл, который настраивает соответствующий экспорт и псевдонимы.

Мне дали задание убедиться, что эти экспорты и псевдонимы поступают из application_env.sh только файл, а не из /etc/profile.

Итак, я собираюсь добавить в манифест application_env, который сейчас выглядит так:

class appuser-env {
  file{ "/etc/profile.d/appuser-env.sh":
    ensure  => "present",
    content => template("appuser-env/appuser-env.sh.erb"),
    mode    => "774",
    require => Class["facts"],
  }
}

Другой тип, который выглядит так:

file_line{ "remove_old_exports_aliases":
  ensure => absent,
  line => ['export ANT_HOME_1_7_0=/appdir/org/apache/ant/1.7.0', 'export ANT_HOME=$ANT_HOME_1_7_0', 'export PATH=$ANT_HOME/bin:$PATH', 'export JAVA_HOME_1_6_0=/appdir/com/sun/jdk', 'export JAVA_HOME=$JAVA_HOME_1_6_0', 'export PATH=$JAVA_HOME/bin:$PATH','export ENVIRONMENT_TYPE=prod','export CVS_RSH=${CVS_RSH-ssh}# change default from rsh to ssh for cvs command','export TOMCAT_HOME_6_0_29=/appdir/org/apache/tomcat/6.0.29','export TOMCAT_HOME=$TOMCAT_HOME_6_0_29','export PATH=$PATH:$TOMCAT_HOME/bin','export VOLDEMORT_HOME=/appdir/voldemort-0.80.1/config/test_config3','export LOCATION=nyc'],
  path => '/etc/profile',
}

Но когда я бегу puppet agent -t на соответствующей машине я получаю следующую ошибку:

[root@server4 # puppet agent -t
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog for server4.company.com
Info: Applying configuration version '1448374061'
Error: /Stage[main]/appuser-env/File_line[remove_old_exports_aliases]: Could not evaluate: private method `chomp' called for #<Array:0x7fba5a3ead20>
Notice: Finished catalog run in 16.90 seconds
[root@server4 ]#

Есть идеи, что означает эта ошибка или как это делается правильно?

Используйте несколько file_line ресурсы, каждый из которых удаляет одну строку:

# for all "file_line" resources .
File_line {
  ensure => absent,
  path   => '/etc/profile',
}

file_line {
  'remove_old_exports_aliases':
    line => 'export ANT_HOME_1_7_0=/appdir/org/apache/ant/1.7.0';
  'remove aliases':
    line => 'export ANT_HOME=$ANT_HOME_1_7_0';
}

попробуй это

file {
--
----}
file_line{ "remove_old_exports_aliases":
  ensure => absent,
  line => ['export ANT_HOME_1_7_0=/appdir/org/apache/ant/1.7.0'],
  path => '/etc/profile',
}->file_line{ "remove aliases":
  ensure => absent,
  line => ['export ANT_HOME=$ANT_HOME_1_7_0'],
  path => '/etc/profile',
}

попробуйте, если вы можете поместить это в цикл.

Вместо того, чтобы пытаться удалить строки из /etc/profile, ( file_line ресурс действительно ужасен для чего-либо продвинутого), просто управляйте содержимым /etc/profile в целом. Таким образом, вы точно знаете, что там находится, и описываете желаемое конечное состояние системы, а не понятия не имеете, что там, за исключением нескольких строк, которые вы явно пытались удалить.