SaltStack: Как написать pkgs, используя регулярное выражение в sls?

Я использую saltstack для развертывания своих серверов. Я хочу установить все пакеты "tomcat7" на один сервер. Итак, я пишу файл sls следующим образом:

 ^tomcat7.*:
  pkg:
    - installed
  - require:
    - pkg: openjdk-7-jdk 

Но в итоге получает ошибку:

----------
State: - pkg
Name:      ^tomcat7.*
Function:  installed
    Result:    False
    Comment:   Package ^tomcat7.* failed to install
    Changes:  

Но на самом деле сервер успешно установил все пакеты ^tomcat7.*.

root@vagrant-ubuntu-raring-64:~# dpkg -l tomcat7*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name                                                  Version                         Architecture                    Description
+++-=====================================================-===============================-===============================-===============================================================================================================
ii  tomcat7                                               7.0.35-1~exp2ubuntu1.1          all                             Servlet and JSP engine
ii  tomcat7-admin                                         7.0.35-1~exp2ubuntu1.1          all                             Servlet and JSP engine -- admin web applications
ii  tomcat7-common                                        7.0.35-1~exp2ubuntu1.1          all                             Servlet and JSP engine -- common files
ii  tomcat7-docs                                          7.0.35-1~exp2ubuntu1.1          all                             Servlet and JSP engine -- documentation
ii  tomcat7-examples                                      7.0.35-1~exp2ubuntu1.1          all                             Servlet and JSP engine -- example web applications
ii  tomcat7-user                                          7.0.35-1~exp2ubuntu1.1          all                             Servlet and JSP engine -- tools to create user instances

Как решить эту проблему? Нужно ли мне писать все пакеты ^tomcat7.* один за другим?


person Feng Yu    schedule 21.08.2013    source источник


Ответы (1)


Итак, проблема здесь в том, что состояние pkg.installed проверяет список установленных пакетов на точное совпадение с ^tomcat7.* без использования регулярного выражения. Он обнаруживает, что этого пакета нет, и пытается его установить. Попытка работает, потому что система упаковки, очевидно, действительно поддерживает регулярное выражение. Затем pkg.installed снова проверяет список установленных пакетов на наличие ^tomcat7.* (без регулярного выражения) и обнаруживает, что он все еще отсутствует, поэтому сообщает об ошибке.

Решение здесь может состоять в том, чтобы добавить еще один аргумент к pkg.installed, который включает сопоставление регулярных выражений. Однако это делает состояние менее детерминированным, поскольку мы будем просто искать в списке пакетов совпадение с регулярным выражением и не будем проверять, установлены ли все пакеты с этим регулярным выражением. Это может иметь неприятные последствия, если, например, ранее был установлен только пакет tomcat7. pkg.installed увидит совпадение и не установит остальные пакеты.

Было бы гораздо лучше использовать аргумент pkgs, чтобы дать список всех точных пакетов, которые вам нужны. Это гораздо более детерминировано, и вы знаете, что все они будут установлены, даже если один или несколько были установлены ранее.

person Colton Myers    schedule 21.08.2013
comment
Большое спасибо! Я понимаю. - person Feng Yu; 22.08.2013