如何编写Saltstack状态脚本,在更新最新的git repo之前,确保repo目标是cleanup?
首先,我编写了一个saltstack状态脚本,确保我的本地目录始终与最新的git repo(Shadowsocks.etc)一样新,然后编译目录:如何编写Saltstack状态脚本,在更新最新的git repo之前,确保repo目标是cleanup?,git,salt-stack,Git,Salt Stack,首先,我编写了一个saltstack状态脚本,确保我的本地目录始终与最新的git repo(Shadowsocks.etc)一样新,然后编译目录: Clone Shadowsocks Github: git.latest: - name: https://github.com/madeye/shadowsocks-libev.git - target: /usr/share/shadowsocks/ - require: - pkg: Install Sh
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
第一次执行就可以了
但是如果repo new update然后execute state将再次失败——目录中有本地文件,git.latest
get conflict,需要首先清理
因此,我添加了一个还原状态:
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
然后它工作得很好,但是当Irm-rf
/usr/share/shadowsocks目录时,状态脚本失败:注释:所需的工作目录/usr/share/shadowsocks/”不可用
我解决的问题是-cwd:/usr/share/shadowsocks/
,但我仅使用yif使状态在/usr/share/shadowsocks存在时运行
这是一种按如下方式编写状态流的方法吗
如果存在/usr/share/shadowsocks:
全部还原:
->克隆/更新Git Repo
->构建它
其他:
克隆/更新Git Repo
->构建它
如何让它变得简单
我最终使用了一个丑陋的解决方案:
克隆Git Repo
(如果还原错误)->还原
->更新Git Repo
->构建
,
除了要求之外,克隆/更新部分几乎相同
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
我认为总会有更好的解决方案。也许我不明白这一点,但我认为我的用例非常相似。我有一个state,它的任务是确保所有存储库都处于正确的状态,这也意味着它们是干净的,在构建过程中创建的文件必须被删除 一般来说,这与盐没有多大关系。我想,在更新回购协议之前,只需重置回购协议即可:
....
cd $APP_DIR;
git clean -d -fx ""
git checkout $BRANCH
git pull
...
这是代表我的构建的shell脚本的一部分。如果您的目录已清除,您的状态将不会失败。你可以随时清理它
您始终可以编写有状态脚本/状态并与salt通信:
echo ""
echo "changed=no comment='Build failed, reason: ...'"
exit 1;
盐社区的丹尼尔·贾格森(Daniel Jagszen)完美地解决了这个问题: 这可能是因为“cwd”的论点 如果cwd发生在唯一检查之前。所以
Revert All:
cmd.run:
- name: cd /usr/share/shadowsocks/ && git checkout .
- onlyif: test -d /usr/share/shadowsocks
应该有效。很抱歉,没有提到这个问题是由salt社区的Daniel Jagszent完美解决的
Revert All:
cmd.run:
- name: cd /usr/share/shadowsocks/ && git checkout .
- onlyif: test -d /usr/share/shadowsocks