ansible在playbook中變量傳入到執行腳本的方法

簡介

這個方式用於ansible調用playbook方法實現遠程服務器執行某個腳本,腳本中的某些參數須要由管理服務器傳入的狀況。python

下面的例子是ansible實際調用script模塊實現遠程服務器執行一個shell腳本shell

腳本內容

ansible 執行腳本

#!/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)

遠程調用腳本(eric.sh)

#!/usr/bin/env bash
echo `date` > /tmp/date.txt
echo $1 > /tmp/date.txt

ansible中playbook的設置

playbook的定義(deploy.yml)bash

- hosts: all
  roles:
    - role: init

具體的角色init中task的main.yml定義服務器

- script: ~/bin/eric.sh "{{ var }}"
相關文章
相關標籤/搜索