ansible--變量-創(chuàng)新互聯(lián)

ansible中的變量主要來源于以下幾種場景:

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、南平ssl等。為上千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的南平網(wǎng)站制作公司
  1. Inventory(host vars,group vars)

  2. playbook里面

  3. 命令行

  4. playbook執(zhí)行task過程中產(chǎn)生結(jié)果,可以register起來,作為變量給下面的task使用

  5. roles里面

  6. 來自于nodes上面的facts

其中1-4一般來說都是用戶自己定義的,而5和facts則主要是ansible從nodes上面拉取過來,當(dāng)然facts也可以自己定義。

Inventory里面的變量

/etc/ansible/hosts

[salt]

salt-master http_port=80  ##主機(jī)變量

10.240.162.112 ansible_connection=paramiko

[salt:vars]  ##組變量

mysql_port=3306

/etc/ansible/host_vars/salt-master  ##定義在文件里主機(jī)變量,文件名和主機(jī)名要一致

lxc:lixc

/etc/ansible/group_vars/salt  ##定義在文件里的組變量,文件名要和組名一致

lss:

 - liss

 - ansible

playbooks里面的變量

---

- hosts: all

 user: lixc

 vars:

  time: 120  ##變量

  port: 80

  keeplive: 100

 vars_files:

  - /vars/test.yml   ##也可以導(dǎo)入外部的文件里的變量

playbooks里面可以定義變量,也可以導(dǎo)入外部的文件里面的變量

命令行里面的變量

命令行,傳遞變量給playbooks大概有三種方式

第1種方式,比較簡單了。

cat command_vars.yml

---

- hosts: salt-master

 remote_user: '`uservar`'  ##命令行變量

 tasks:

  - name: run this command and ignore the result

   shell: echo `echovar`

  - debug: msg='`result`.`stdout`'

ansible-playbook command_vars.yml -e "uservar=lixc echovar=hellomysql"  ##傳入變量參數(shù)

第2種方式,以json的格式傳遞變量。

ansible-playbook command_vars.yml -e '{"uservar":"lixc", "echovar":"hellomysql"}'

##變量形式較復(fù)雜的時候,用json格式較方便,一般的直接用第一種方式就可以了

第3種方式,傳入json文件。第二種,第三種方法,一般用于變量形式較復(fù)雜的情況。不過,一般估計(jì)很少用,因?yàn)樵诿钚袀髯兞勘緛砭筒欢嘤冒?,還是第一種命令行傳遞方式稍微常用點(diǎn)。

cat test.json   ##json文件

uservar: lixc

echocar: hellomysql

ansible-playbook command_vars.yml -e '@test.json'  ##用@加上json文件

第4種方式,register task的結(jié)果,作為變量,給下面的task使用

---

- hosts: slat-master

 tasks:

  - name: test

   command: ls /home

   register: result

  - debug: msg='`result`.`stdout`'

第五種方式,在roles里定義。

├── group_vars  ##全局組變量

│  └── salt

├── hosts

├── roles

│  ├── mysql

│  │  ├── handlers

│  │  │  └── main.yml

│  │  ├── tasks

│  │  │  ├── configure.yml

│  │  │  └── main.yml

│  │  ├── templates

│  │  │  └── my.cnf

│  │  └── vars      ##當(dāng)前role變量

│  │     └── main.yml

第六種方方式,從nodes獲取facts,facts和salt-stack里面的grains差不多,主要是nodes本身的一個系統(tǒng)信息,bios信息,網(wǎng)絡(luò),硬盤等等信息。不過,facts比salt-stack中的grains獲取的信息。要更多一些。

ansible slat-master -m setup|wc -l  ##查看facts

284

salt ‘*’ grains.items|wc -l    ##查看grains

65

自定義facts

自定義facts有多種方法,有能力的同學(xué),可以直接去修改,setup這個模塊。不過官方的東西,咱們還是不要隨便改了。

第二種方法,定義在nodes上面,默認(rèn)定義在/etc/ansible/fact.d/*fact里面。

定義文件的格式,大概三種,分別是ini格式,json格式,或者可執(zhí)行文件,不過他們返回的必須是json格式。

lixc.fact

{"json":["hello","world"]}   ##這個文件內(nèi)容是json格式

lss.fact

#!/usr/bin/env python  ##這個文件是python腳本,返回json格式的字典

import json

dic = {"ansible_addresses": ["10.240.161.139","192.168.115.164"]}

print json.dumps(dic)

lxc.fact

[ini]    ##ini格式

lixc=hello

lss=world

在node上創(chuàng)建文件夾并把測試的fact文件傳送過去。修改lss.fact這個文件的屬性為其它組可執(zhí)行的權(quán)限,否則待會執(zhí)行不了,用-s參數(shù)試了下,也執(zhí)行不了

ansible salt-master -a "mkdir -p /etc/ansible/fact.d" -s

for file in `ls `;do ansible salt-master -m copy -a " src=${file} dest=/etc/ansible/facts.d/" -s;done >/dev/null

ansible salt-master -m file -a "dest/etc/ansible/facts.d/lss.fact mode=755" > /dev/null -s

 ##上述有修改python腳本屬性,待會要執(zhí)行

ansible salt-master -m setup -a "filter=ansible_local"

自定義模塊,只不過這個模塊,返回一個facts格式的結(jié)果罷了。

在ansible的module里面,自定義一個文件夾,放自己的module,然后丟給自定義的module進(jìn)去

mkdir /usr/share/ansible/custom

cat  chengge

#!/usr/bin/env python

import json

dic = {"ansible_facts": {'chengge': 'Hello ansible','liss': "Hello salt=stack"}}

print json.dumps{dic}

##字典的key要為ansible_facts,要不然playbooks里不能用facts了

cp chengge /usr/share/ansible/custom

ansible salt-master -m chengge

具體如何使用自定義模塊:

其實(shí),我們想用模塊里返回的facts,那么顯然,我們使用之前,肯定要先執(zhí)行以下我們自定義的module

先看看playbooks

---

- hosts: slat-master

 tasks:

  - name: test custom module

   action: chengge      ##先執(zhí)行下自定義module

  - debug: msg='`chengge`'  ##使用facts

再看看,執(zhí)行結(jié)果

ansible--變量

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站名稱:ansible--變量-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://muchs.cn/article24/diedje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、定制網(wǎng)站、品牌網(wǎng)站建設(shè)、域名注冊靜態(tài)網(wǎng)站、Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)