用于"配置make install"的Saltstack

nom*_*men 14 salt-stack

我正在用SaltStack弄湿我的脚.我已经完成了我的第一个状态(带有静态配置的Vim安装程序),而我正在开发第二个状态.

不幸的是,我希望我的状态安装的应用程序没有Ubuntu软件包.我将不得不自己构建应用程序.使用Salt进行"configure-make-install"类型安装是否有"最佳实践"? 或者我应该只使用cmd?

特别是,如果我是手工做的话,我会做一些事情:

wget -c http://example.com/foo-3.4.3.tar.gz
tar xzf foo-3.4.3.tar.gz
cd foo-3.4.3
./configure --prefix=$PREFIX && make && make install
Run Code Online (Sandbox Code Playgroud)

Dan*_*ite 23

如果您愿意,可以使用状态模块来抽象前两行.

但是你也可以在目标minion上运行命令.

install-foo:
  cmd.run:
    - name: |
        cd /tmp
        wget -c http://example.com/foo-3.4.3.tar.gz
        tar xzf foo-3.4.3.tar.gz
        cd foo-3.4.3
        ./configure --prefix=/usr/local
        make
        make install
    - cwd: /tmp
    - shell: /bin/bash
    - timeout: 300
    - unless: test -x /usr/local/bin/foo
Run Code Online (Sandbox Code Playgroud)

只需确保包含一个unless参数以使脚本具有幂等性.

或者,将bash脚本分发给minion并执行.请参阅: 如何使用Salt Stack执行多个命令?

至于best practice?我建议使用fpm创建.deb或.rpm包并安装它.至少,将该tarball复制到salt master并且不再依赖外部资源在三年之后存在.

  • 您的除非条款不会按预期工作.它应该是一个普通的字符串条目而不是列表.它目前总是返回true. (2认同)
  • 使用`fpm`打包二进制文件时+1,特别是如果您在EC2或其他云中运行.如果你正在使用长时间运行的实例,那么如果你在第一次盐运行过程中花费额外的一两分钟就没那么重要了,但是如果你在ec2中运行短期实例,你绝对不会我想一遍又一遍地为这个编译时付出代价. (2认同)

Jef*_*uer 11

我们假设foo-3.4.3.tar.gz检入GitHub.您可以在状态文件中使用以下方法:

git:
  pkg.installed

https://github.com/nomen/foo.git:
  git.latest:
    - rev: master
    - target: /tmp/foo
    - user: nomen
    - require:
      - pkg: git

foo_deployed:
  cmd.run:
    - cwd: /tmp/foo
    - user: nomen
    - name: |
        ./configure --prefix=/usr/local
        make
        make install
    - require:
      - git: https://github.com/nomen/foo.git
Run Code Online (Sandbox Code Playgroud)

您的配置prefix位置可以作为盐柱传递.如果构建过程更复杂,您可以考虑编写自定义状态.