如何只在第一次运行的剧本运行命令,跳过下一重演?

问题描述 投票:3回答:2

我想下载只对剧本的第一运转的git数据。例如,我有这样的

- name: Check if Magento is already installed
  stat: path=/var/www/html/index.php
  register: index_php
- name: Deploy the latest version from OpenMage github, only if it is not already installed
  git:
    repo: 'https://github.com/OpenMage/magento-mirror'
    dest: /var/www/html
    run_once: true 
  when: not index_php.stat.exists

由于一些其他的命令我将再次运行相同的剧本,但没有像git的几个命令。

我试着用寄存器的index.php,但事后如果有,我得到“味精”本地和远程存储库之间的区别:“在资源库中(力=无)本地修改。”

刚才说了,我很新与Ansible。

git ansible
2个回答
0
投票

run_once的概念是to only run a task one time for a batch of hosts。这是不是你想要的,我想。

一种选择是使用一个lock file。例如:

- name: Check Magento lock
  stat:
    path: /var/lock/ansible-magento.lock
  register: lock

- name: Deploy the latest version from OpenMage github
  block:
    - git:
        repo: 'https://github.com/OpenMage/magento-mirror'
        dest: /var/www/html
    - file:
        path: /var/lock/ansible-magento.lock
        state: touch
  when: not lock.stat.exists

(未测试)


2
投票

也许git的ansible模块中的“更新”选项值得你:

检查doc page

update: no

这样的解释有:

如果没有,不从原点库操作,如归档检索新版本对现有的(旧)库将运行,而且可能不更改选项版本或远程响应。

默认为“是”。

此外,检查在同一个文档页面的例子:

# Example just ensuring the repo checkout exists
- git:
    repo: 'https://foosball.example.org/path/to/repo.git'
    dest: /srv/checkout
    update: no

我希望它可以帮助你!

© www.soinside.com 2019 - 2024. All rights reserved.