繁体   English   中英

如何仅在首次运行的playbook上运行命令,跳过下一次重新运行?

[英]How to run command only on first run playbook, skip on next rerun?

我只想在第一次运行playbook时从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这样的命令。

我尝试使用register index.php,但之后如果本地和远程存储库之间存在差异,我会收到“msg”:“存储库中存在本地修改(强制=否)。”

简而言之,我对Ansible非常新。

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

检查doc页面

update: no

这是那里的解释:

如果不是 ,请不要从源存储库检索新修订版存档之类的操作将在现有(旧)存储库上运行,并且可能不响应对选项版本或远程的更改。

默认值为“是”。

另外,请检查同一文档页面中的示例:

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

我希望它可以帮到你!

run_once的概念是仅为一批主机运行一次任务 我想这不是你想要的。

一个选项是使用锁定文件 例如:

- 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

(未测试)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM