無法上傳圖片
一、程序主要文件:
ansible
ansible-playbook
ansible-doc
二、程序發布:
要求:
1.不能影響用戶體驗
2.系統不能停機
3.不能導致系統故障或造成系統完全不可用。
發布路徑:
/webapps/tuangou
/webapps/tuangou-1.1
/webapps/tuangou-1.2.
在調度器上下線一批主機(標記為維護模式)–>關閉服務–>部署新版本–>啟動服務–>在調度器上啟用這一批主機;
三、相關配置文件
配置文件:
/etc/ansible/ansible.cfg
主機清單:
/etc/ansible/hosts
插件目錄:
/usr/share/ansible_plugins/
基于秘鑰驗證:(1)ssh-keygen -t rsa -P '' (2)家目錄下ssh-copy-id -i .ssh/id_rsa.pub root@10.1.44.2
ansible命令:
Usage:ansible <host-pattern> [options]
四、常用選項:
-m MOD_NAME -a MOD_ARGS
配置
ansible-doc -l列出模塊
ansible-doc -s列出簡短信息
1.ansible ping 測試主機是否在線
2.command在遠程主機執行命令
3.shell:在遠程主機調用shell解釋器運行命令,支持shell的各種功能,例如“管道”
注意:command和shell模塊的核心參數直接為命令本身;而其它模塊的參數通常
為“key=value”格式;
4.copy復制ansible主機文件到遠程主機
ansible all -m copy -a "src=/etc/fstab dest=/tmp/fstab.ansible"
5.file
用法:
(1)創建目錄
-a "path= state=directory"
(2)創建鏈接文件
-a "path= src= state=link"
(3)刪除文件
-a "path= state=absent"
修改屬主
刪除文件
創建鏈接文件
ansible all -m file -a "path=/tmp/ystab.ansible.link src=/tmp/ystab.ansible state=link"
6.fetch:從遠程一臺主機上獲取文件
7.cron 計劃任務
刪除任務ansible all -m cron -a "name='sync time' state=absent"
8.hostname
name
9.yum:安裝軟件
(1)name= state={present|latest}
(2)
ansible all -m yum -a "name=httpd"
ansible all -m yum -a "name=httpd state=absent"卸載
10.service
name=
state= {started|stoped|restarted}
enabled= 開機是否自啟動
11.group
gid name= state system
12.user
group基本組 groups附加組
name=
group=
groups=
comment=
13.setup 用于收集遠程的
ansible 10.1.44.4 -m setup 顯示鍵值對
YAML:模板語言
數據結構:
key:value
-item 1
-item 2
-item 3
字典{name:jerry,age:21}
playbook
核心元素:
task:任務,由模塊定義的操作的列表;
Variables:變量
Templates:模板,即使用了模板語法的文本文件;
Handlers:由特定條件觸發的Tasks;
Roles:角色
playbook的基本組件:
Hosts:運行指定任務的目標主機
remote_user:在遠程主機以哪個用戶身份執行
sudo_user:非管理員需要擁有sudo權限
tasks:任務列表
模塊,模塊參數
格式:(1)action:module arguments (2)module:arguments
例子:(1)編輯“劇本”
(2)測試:ansible-playbook –check group.yaml
(3)檢測會對哪些主機造成影響
(4)看執行的任務
運行playbook,使用ansible-playbook命令
(1)檢測語法
ansible-playbook –syntax-check *.yaml
(1)測試運行
ansible-playbook -C /path/to/playbook.yaml
–list-hosts
–list-tasks
–list-tags
(2)運行
ansible-playbook /path/to/playbook.yaml
-t TAGS,–tags=TAGS
–skip-tags=SKIP_TAGS
–start-at-task=START_AT
例子2:開啟遠程主機的8080端口
前提要做的是:關閉服務,并卸載。
ansible websrvs -m yum -a "name=httpd state=absent"
(1)劇本文件
(2)準備好要復制至遠程主機的文件
(3)測試
(4)結果
例子3:現將本機的配置文件又改回80端口,重新執行了上次的文件后,發現遠程主機的端口并未改變。那么要想使得遠程主機的監聽端口的為80,則還需要進行重啟操作?,F在引入handlers
配置文件如下
tags:給指定任務一個標識,便于只執行該任務。
-name:NAME
module:arguments
tags:TAG_ID
ansible-playbook –check -t instconf –list-tags web.yaml
ansible-palybook -t instconf web.yaml
Variables:
類型:
內建:
(1)facts:
調用:{{ var_name }}
自定義:
(1)命令行傳遞;
-e VAR=VALUE
(2)在hosts inventory中為每個主機定義專用變量值;
(a)向不同的主機傳遞不同的變量:
IP/HOSTNAME variable_name=value
(b)向組內的所有主機傳遞相同的變量
[groupname:vars]
variable_name=value
(3)在playbook中定義
vars:
-var_name:value
-var_name:value
(4)Inventory還可以使用參數
用于定義ansible遠程連接目標主機時的使用的屬性,而非傳遞給playbook的變量;ansible_ssh_host ansible_ssh_port ansible_ssh_user
示例1:(1)編輯配置文件vim pkg.yaml
(2)測試,使用-e 來傳遞變量名
示例2:在文件提前定義變量
此時直接使用測試命令:ansible-playbook –check pkg.yaml不加參數也可以。
若不想使用之前定義的變量名:可以使用-e進行替換變量名。
(2)host文件中定義的內容
Templates:模板
執行模板文件中的腳本,并生產結果數據流,需要使用template模板
template:
-a ""
注意此模板只能使用與playbook
示例1:(1)復制一份nginx的配置文件到/root下。重命名后為nginx.conf.j2,其部分配置內容如下
(2)vim test.yaml
(3)ansible-playbook –check test.yaml
(4)實際運行后,遠程主機的配置文件的結果如下worker_processes 1;
示例2:
– hosts:ngxsrvs
remote_user: root
task:
– name: install nginx package
yum:name=nginx state=latest
– name:install conf file
template:src=/root/nginx.conf.j2 dest=/etc/nginx/nginx.conf
tags:ngxconf
notify:reload nginx service
– name:start nginx service
service:name=nginx state=started enabled=true
handlers:
-name:reload nginx service
shell :/usr/sbin/nginx -s reload
條件測試:
when語句:在task中定義
循環:迭代,需要重復執行的任務
對迭代項的引用,固定變量名為"item",使用with_item屬性給定要迭代的元素;
元素:字符串,字典
基于列表給出元素示例:
基于字典列表給元素示例:
角色:roles
以特定的層級目錄結構進行組織的tasks、variables、handlers、templates、file
role_name/
file/:存儲由copy或script等模塊調用的文件;
tasks/:此目錄中至少應用一個名為main.yml的文件,用于定義各task;其它的文件需要由main.yml進行“包含”調用;
handlers/:此目錄中至少應用一個名為main.yml的文件,用于定義各handlers;其它的文件需要由main.yml進行“包含”調用;
vars/:此目錄中至少應用一個名為main.yml的文件,用于定義各variable;其它的文件需要由main.yml進行“包含”調用;
templates/:存儲由template模塊調用的模板文本;
meta/:此目錄中至少應用一個名為main.yml的文件,用于定義當前角色的特殊設定及其依賴關系;其它的文件需要由main.yml進行“包含”調用;
default/:此目錄中至少應該有一個名為main.yml的文件,用于設定默認變量。
mkdir ./{nginx,memcached,httpd,mysql}/{files,templates,vars,handlers,meta,default,tasks} -pv
原創文章,作者:178babyhanggege,如若轉載,請注明出處:http://www.www58058.com/58594