這個方式用於ansible調用playbook方法實現遠程服務器執行某個腳本,腳本中的某些參數須要由管理服務器傳入的狀況。python
下面的例子是ansible實際調用script模塊實現遠程服務器執行一個shell腳本shell
#!/usr/bin/env python # -*- coding:utf-8 -*- # edit: mesopodamia@gmail.com import ansible from ansible.playbook import PlayBook from ansible.inventory import Inventory from ansible import callbacks from ansible import utils import sys reload(sys) sys.setdefaultencoding('utf-8') vars = "hello world" ansible_command = "/usr/local/bin/ansible-playbook" playbook = "/home/eric/playbook/deploy.yml" hosts = ['192.168.0.99'] # Boilerplace callbacks for stdout/stderr and log output utils.VERBOSITY = 0 playbook_cb = callbacks.PlaybookCallbacks(verbose=utils.VERBOSITY) stats = callbacks.AggregateStats() runner_cb = callbacks.PlaybookRunnerCallbacks(stats, verbose=utils.VERBOSITY) # pro輸入數據是列表 def ansible_playbook(playbook,pro,vars): pb = PlayBook( playbook=playbook, inventory = Inventory(pro), callbacks = playbook_cb, runner_callbacks = runner_cb, stats = stats, extra_vars = {'var':vars} ) return pb.run() if __name__ == "__main__": ansible_playbook(playbook,hosts,vars)
#!/usr/bin/env bash echo `date` > /tmp/date.txt echo $1 > /tmp/date.txt
playbook的定義(deploy.yml)bash
- hosts: all roles: - role: init
具體的角色init中task的main.yml定義服務器
- script: ~/bin/eric.sh "{{ var }}"