Сначала я написал сценарий состояния соленого стека, убедился, что мой локальный каталог всегда такой же новый, как и последний репозиторий git (Shadowsocks .etc), затем скомпилировал каталог:
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
возник конфликт, сначала нужно очистить.
Поэтому я добавляю состояние возврата:
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/
, но использую onlyif, чтобы запустить состояние, когда существует /usr/share/shadowsocks.
Это способ написать поток состояния, как показано ниже?:
если /usr/share/shadowsocks существует:
Revert All:
-> Clone/Update Git Repo
-> Build it
еще:
Clone/Update Git Repo
-> Build it
Как сделать это просто?
В итоге я использую уродливое решение:
Clone Git Repo
(если ошибка возврата) -> Revert
-> Update Git Repo
-> Build
, часть Clone/Update почти такая же, за исключением требования.
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
Я думаю, что всегда есть лучшее решение.