ansible
yum install -y ansible
測(cè)試是否可用 ansible localhost -m ping
/etc/ansible/ansible.cfg :主配置文件,配置 ansible 工作特性
/etc/ansible/hosts :配置主機(jī)清單文件
/etc/ansible/roles/ :存放 ansible 角色的目錄
主配置文件存在 /etc/anible/ansible.cfg
指定特權(quán)用戶
[privilege_escalation]
become=True
become_method=sudo
become_user=user
become_ask_pass=False
ansible;adhoc;playbook;tasks;Roles;Roles方式編排web集群架構(gòu);
配置文件的優(yōu)先級(jí)
1) 最先查找 $ANSIBLE_CONFIG 變量
2) 其次查找當(dāng)前項(xiàng)目目錄下 ansible.cfg
3) 然后查找用戶家目錄下的 .ansible.cfg
4) 最后查找 /etc/ansible/ansible.cfg
Inventory 文件主要用來(lái)填寫(xiě)被管理主機(jī)以及主機(jī)組信息;(邏輯上定義);
默認(rèn) Inventory 文件為 /etc/ansible/hosts ;
當(dāng)然也可以自定義一個(gè)文件,當(dāng)執(zhí)行 ansible 命令時(shí)使用 -i 選項(xiàng)指定 Inventory
文件位置;
配置主機(jī)清單
[webservers]
172.16.1.7
172.16.1.8 ansible_become=yes
ansible_become=yes 這個(gè)的意思是加上sudo
嘗試開(kāi)始進(jìn)行操作
ad-hoc執(zhí)行步驟
1.加載自己的配置文件,默認(rèn) /etc/ansible/ansible.cfg ;
2.查找對(duì)應(yīng)的主機(jī)配置文件,找到要執(zhí)行的主機(jī)或者組;
3.加載自己對(duì)應(yīng)的模塊文件,如 command ;
4.通過(guò) ansible 將模塊或命令生成對(duì)應(yīng)的臨時(shí) py 文件,并將該文件傳輸至遠(yuǎn)
程服務(wù)器對(duì)應(yīng)執(zhí)行用戶 $HOME/.ansible/tmp/ansible-tmp-number/XXX.PY ;
5.執(zhí)行用戶家目錄的 `` 文件;
6.給文件 +x 執(zhí)行;
7.執(zhí)行并返回結(jié)果;
8.刪除臨時(shí) py 文件, sleep 0 退出;
使用 ad-hoc 執(zhí)行一次遠(yuǎn)程命令,注意觀察返回結(jié)果的顏色;
綠色: 代表被管理端主機(jī)沒(méi)有被修改
黃色: 代表被管理端主機(jī)發(fā)現(xiàn)變更
紅色: 代表出現(xiàn)了故障,注意查看提示
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-756685.html
ansible常用模塊
command模塊
[root@manger ~]# ansible localhost -m command -a 'chdir=/root
echo $PWD'
ansible localhost -m command -a
'creates=/data/file ifconfig eth0'
shell 模塊
參數(shù) 選項(xiàng) 含義
chdir chdir /opt 執(zhí)行ansible時(shí),切換到指定的目錄
creates creates /data/file 如果文件存在,則跳過(guò)執(zhí)行
removes removes /data/file 如果文件存在,則執(zhí)行
ansible localhost -m shell -a "ifconfig eth0|awk
'NR==2' "
scripts 模塊
ansible webservers -m script -a "/data/yum.sh"
copy模塊
ansible webservers -m copy -a "src=./httpd.conf
dest=/etc/httpd/conf/httpd.conf owner=root group=root mode=644"
file模塊
ansible webservers -m file -a
"path=/tmp/foo.conf state=touch mode=666"
ansible webservers -m file -a "path=/tmp/foo
state=directory mode=777"
ansible webservers -m file -a "path=/tmp/foo
state=directory owner=root group=root mode=777 recurse=yes"
等模塊,有很多平時(shí)用不到,這里做一個(gè)大概記錄
ansible 的playbook
playbook 是一個(gè) 由 yaml 語(yǔ)法編寫(xiě)的文本文件,它由 play 和 task 兩部分組
成。
play : 主要定義要操作主機(jī)或者主機(jī)組
task :主要定義對(duì)主機(jī)或主機(jī)組具體執(zhí)行的任務(wù),可以是一個(gè)任務(wù),也可以是多個(gè)
任務(wù)(模塊)
總結(jié): playbook 是由一個(gè)或多個(gè) play 組成,一個(gè) play 可以包含多個(gè) task 任
務(wù)。
可以理解為: 使用多個(gè)不同的模塊來(lái)共同完成一件事情。
1) playbook 是對(duì) AD-Hoc 的一種編排方式。
2) playbook 可以持久運(yùn)行,而 Ad-Hoc 只能臨時(shí)運(yùn)行。
3) playbook 適合復(fù)雜的任務(wù),而 Ad-Hoc 適合做快速簡(jiǎn)單的任務(wù)。
4) playbook 能控制任務(wù)執(zhí)行的先后順序。
語(yǔ)法 描述
縮進(jìn) YAML使用固定的縮進(jìn)風(fēng)格表示層級(jí)結(jié)構(gòu),每個(gè)縮進(jìn)由兩個(gè)空格組成, 不能
使用tabs
冒號(hào) 以冒號(hào)結(jié)尾的除外,其他所有冒號(hào)后面所有必須有空格。
短橫線
表示列表項(xiàng),使用一個(gè)短橫杠加一個(gè)空格。多個(gè)項(xiàng)使用同樣的縮進(jìn)級(jí)別
作為同一列表。
示例
$cat installed_httpd.yml
#1.定義play
#2.定義task、(Installed、Configure、Init、Systemd)
- hosts: webservers
tasks:
- name: Installed Httpd Server
yum:
name: httpd
state: present
- name: Configure Httpd Server
copy:
src: ./httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
owner: "root"
group: "root"
mode: '0644'
backup: yes
notify: Restart Httpd Server
- name: Init Httpd Server
copy:
src: ./index.html.j2
dest: /var/www/html/test.html
- name: Systemd Httpd Server
systemd:
name: httpd
state: started
enabled: yes
handlers:
- name: Restart Httpd Server
systemd:
name: httpd
state: restarted
上面是用root 用戶執(zhí)行的
下面是用普通用戶執(zhí)行
- hosts: webservers
become: true
become_user: root
tasks:
- name: Installed Httpd Server
yum:
name: httpd
state: present
- name: Configure Httpd Server
copy:
src: ./httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
owner: "nouser"
group: "nouser"
mode: '0644'
backup: yes
notify: Restart Httpd Server
- name: Init Httpd Server
copy:
src: ./index.html.j2
dest: /var/www/html/test.html
owner: "nouser"
group: "nouser"
mode: '0644'
- name: Systemd Httpd Server
systemd:
name: httpd
state: started
enabled: yes
handlers:
- name: Restart Httpd Server
systemd:
name: httpd
state: restarted
檢查語(yǔ)法 :ansible-playbook installed_httpd.yml --
syntax-check
執(zhí)行命令: ansible-playbook installed_httpd.yml
安裝php
cat install_nginx_php.yml
#1.安裝nginx
#2.安裝php
#3.添加nginx虛擬主機(jī),觸發(fā)重啟
#4.配置php,連接redis;觸發(fā)重啟
#5.部署phpadmin;、
- hosts: webservers
vars:
web_site_directory: /ansible/admin2
tasks:
- name: Installed Nginx PHP Server
yum:
name: "{{ item }}"
state: present
loop:
- nginx
- php71w
- php71w-cli
- php71w-common
- php71w-devel
- php71w-embedded
- php71w-gd
- php71w-mcrypt
- php71w-mbstring
- php71w-pdo
- php71w-xml
- php71w-fpm
- php71w-mysqlnd
- php71w-opcache
- php71w-pecl-memcached
- php71w-pecl-redis
- php71w-pecl-mongodb
tags: Install
- name: Create Nginx Process Runtime Group
group:
name: www
gid: 666
tags: Install
- name: Create Nginx Process Runtime User
user:
name: www
uid: 666
create_home: no
tags:
- Install
- Configure
- name: Configure Nginx Nginx.conf
copy:
src: ./conf/nginx.conf.j2
dest: /etc/nginx/nginx.conf
owner: 'root'
group: 'root'
mode: '0644'
notify: Restart Nginx Server
tags: Configure
- name: Configure Nginx VHosts ansible.oldxu.com;
template:
src: ./conf/ansible.oldxu.com.conf.j2
dest: /etc/nginx/conf.d/ansible.oldxu.com.conf
notify: Restart Nginx Server
- name: Check Web Configure
shell:
cmd: /usr/sbin/nginx -t
register: Check_Nginx
changed_when:
- Check_Nginx.stdout.find('successful')
- false
- name: Configure php php.ini
copy:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
mode: "{{ item.mode }}"
loop:
- { src: "./conf/php.ini.j2", dest: "/etc/php.ini" , mode: "0644" }
- { src: "./conf/php-fpm.d.www.conf.j2", dest: "/etc/php-fpm.d/www.conf" , mode: "0644" }
notify: Restart PHP Server
- name: Systemd Nginx And PHP Server
systemd:
name: "{{ item }}"
state: started
enabled: yes
loop:
- nginx
- php-fpm
# download code
- name: Create Web Site Directory
file:
path: "{{ web_site_directory }}"
state: directory
owner: 'www'
group: 'www'
mode: '0755'
- name: Unarchive Myadmin Code
unarchive:
src: file/phpmyadmin.zip
dest: "{{ web_site_directory }}"
owner: 'www'
group: 'www'
handlers:
- name: Restart Nginx Server
systemd:
name: nginx
state: restarted
- name: Restart PHP Server
systemd:
name: php-fpm
state: restarted
playbook中變量的引用
變量提供了便捷的方式來(lái)管理 ansible 項(xiàng)目中的動(dòng)態(tài)值。 比如 nginx-1.12 ,可能
后期會(huì)反復(fù)的使用到這個(gè)版本的值,那么如果將此值設(shè)置為變量,后續(xù)使用和修改都
將變得非常方便。這樣可以簡(jiǎn)化項(xiàng)目的創(chuàng)建和維護(hù);
在 Ansible 中定義變量分為如下三種方式:
1) 通過(guò)命令行傳遞變量參數(shù)定義
2) 在play文件中進(jìn)行定義變量
2.1) 通過(guò)vars定義變量
2.2) 通過(guò)vars_files定義變量
3) 通過(guò)inventory在主機(jī)組或單個(gè)主機(jī)中設(shè)置變量
3.1) 通過(guò)host_vars對(duì)主機(jī)進(jìn)行定義
3.2) 通過(guò)group_vars對(duì)主機(jī)組進(jìn)行定義
vars 形式的變量
- hosts: webservers
vars:
web_packages: httpd
ftp_packages: vsftpd
tasks:
- name: Output Variables
debug:
msg:
- "{{ web_packages }}"
- "{{ ftp_packages }}"
輸出結(jié)果為
"msg": [
"httpd",
"vsftpd"
]
在 playbook 中使用 vars_files 指定文件作為變量文件,好處就是其他的
playbook 也可以調(diào)用;
[root@ansible project1]# cat vars.yml
web_packages: httpd
ftp_packages: vsftpd
- hosts: webservers
vars_files:
- ./vars.yml
tasks:
- name: Output Variables
debug:
msg:
- "{{ web_packages }}"
- "{{ ftp_packages }}"
playbook 傳送多個(gè)變量
ansible-playbook f5.yml -i hosts -e
"web_packages=GeoIP" -e "ftp_packages=telnet"
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-756685.html
到了這里,關(guān)于飛天使-linux操作的一些技巧與知識(shí)點(diǎn)4-ansible常用的技巧,配置等的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!