首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编写一个Salt堆栈状态脚本,在更新最新的git之前,确保回购目的地是清理的?

如何编写一个Salt堆栈状态脚本,在更新最新的git之前,确保回购目的地是清理的?
EN

Stack Overflow用户
提问于 2014-06-25 15:50:08
回答 2查看 3.5K关注 0票数 2

首先,我编写了一个salt堆栈状态脚本,确保我的本地目录总是和最新的git一样新(影子袜子.etc),然后编译目录:

代码语言:javascript
复制
Clone Shadowsocks Github:
  git.latest:
    - name: https://github.com/madeye/shadowsocks-libev.git
    - target: /usr/share/shadowsocks/
    - require:
      - pkg: Install Shadowsocks Depend Pkgs
      - cmd: Revert All

Build Shadowsocks Command:
  cmd.run:
    - name: |
        ./configure
        make
        make install
    - cwd: /usr/share/shadowsocks/
    - require:
      - git: Clone Shadowsocks Github

第一次执行就可以了。

但是如果回购新的更新,然后再次执行状态将失败--目录中有本地文件,git.latest有冲突,首先需要清理。

因此,我添加了一个恢复状态:

代码语言:javascript
复制
Revert All:
  cmd.run:
    - name: |
        git checkout .
    - cwd: /usr/share/shadowsocks/
    - onlyif: ls /usr/share/shadowsocks

Clone Shadowsocks Github:
  git.latest:
    - name: https://github.com/madeye/shadowsocks-libev.git
    - target: /usr/share/shadowsocks/
    - require:
      - pkg: Install Shadowsocks Depend Pkgs
      - cmd: Revert All

Build Shadowsocks Command:
  cmd.run:
    - name: |
        ./configure
        make
        make install
    - cwd: /usr/share/shadowsocks/
    - require:
      - git: Clone Shadowsocks Github

然后它运行得很好,但是当我rm -rf /usr/share/shadowsocks目录时,状态脚本会失败:Comment: Desired working directory "/usr/share/shadowsocks/" is not available

我解决的问题是- cwd: /usr/share/shadowsocks/,但是只有当/usr/share/ address存在时,我才会使用状态运行。

这是一种编写状态流的方法吗?

如果存在/usr/共享/阴影袜:

Revert All: -> Clone/Update Git Repo -> Build it

否则:

Clone/Update Git Repo -> Build it

如何使它变得简单?

最后,我使用了一个丑陋的解决方案:

Clone Git Repo(如果恢复错误) -> Revert -> Update Git Repo -> Build,克隆/更新部分除需求外几乎相同。

代码语言:javascript
复制
Revert All:
  cmd.run:
    - name: |
        git checkout .
    - cwd: /usr/share/shadowsocks/
    - onlyif: ls /usr/share/shadowsocks
    - onfail:
       - git: Clone Shadowsocks Github

Clone Shadowsocks Github:
  git.latest:
    - name: https://github.com/madeye/shadowsocks-libev.git
    - target: /usr/share/shadowsocks/
    - require:
      - pkg: Install Shadowsocks Depend Pkgs

Update Shadowsocks Github:
  git.latest:
    - name: https://github.com/madeye/shadowsocks-libev.git
    - target: /usr/share/shadowsocks/
    - require:
      - pkg: Install Shadowsocks Depend Pkgs
      - cmd: Revert All

Build Shadowsocks Command:
  cmd.run:
    - name: |
        ./configure
        make
        make install
    - cwd: /usr/share/shadowsocks/
    - require:
      - git: Update Shadowsocks Github

我认为总会有更好的解决办法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-22 03:19:31

这个问题由Daniel Jagszen在盐社区:https://groups.google.com/forum/#!topic/salt-users/8SQG9KNEu44中完美地解决了。

这可能是因为"cwd“的论点

代码语言:javascript
复制
Revert All:
  cmd.run:
    - name: |
        git checkout .
    - cwd: /usr/share/shadowsocks/
    - onlyif: ls /usr/share/shadowsocks

AFAIK cwd是在只有检查之前进行的。所以

代码语言:javascript
复制
Revert All:
  cmd.run:
    - name: cd /usr/share/shadowsocks/ && git checkout .
    - onlyif: test -d /usr/share/shadowsocks

应该行得通。

票数 0
EN

Stack Overflow用户

发布于 2014-09-18 21:07:44

也许我不明白这一点,但我认为我的用例非常相似。我拥有确保所有存储库都处于正确状态的状态的状态,这也意味着它们是干净的,并且在构建过程中创建的文件必须被移除。

一般来说,这与盐没有多大关系,我想,在更新之前,只要重新设置你的回购程序就可以了:

代码语言:javascript
复制
....
cd $APP_DIR;
git clean  -d  -fx ""
git checkout $BRANCH
git pull
...

这是shell脚本的一部分,它代表了我的构建。如果您的目录已经清除,您的状态将不会失败。你总能把它清理干净。

而且,您总是可以编写有状态的脚本/状态,并与salt通信:

代码语言:javascript
复制
echo ""
echo "changed=no comment='Build failed, reason: ...'"
exit 1;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24413254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档