ansible
一:
usage:
ansible hosts_list -m module_name -a "command or shell"
eg:
ansible webservers -m command -a "free -m"
ansible webservers -m script -a "/home/test.sh 12 34"
ansible webservers -m shell -a "/home/test.sh"
module_name:
copy
eg: ansible webservers -m copy -a "src=/home/test.sh dest=/tmp/ owner=root group=root mode=0755"
stat
eg: ansible webservers -m stat -a "path=/etc/sysctl.conf"
get_url
eg: ansible webservers -m get_url -a "url=http://www.baidu.com dest=/tmp/index.html mode=0440 force=yes"
yum
eg: ansible webservers -m apt -a "pkg=curl state=latest"
ansible webservers -m yum -a "name=curl state=latest"
cron
eg: ansible webservers -m cron -a "name='check dirs' hour='5,2' job='ls -alh > /dev/null'"
mount
eg: ansible webservers -m mount -a "name=/mnt/data src=/dev/sd0 fstype=ext4 opts=ro state=present"
service
eg: ansible webservers -m service -a "name=nginx state=stoped"
ansible webservers -m service -a "name=nginx state=restarted"
ansible webservers -m service -a "name=nginx state=reloaded"
user
eg: ansible webservers -m user -a "name=cui comment='yaru'"
ansible webservers -m user -a "name=cui state=absent remove=yes"
二.playbook
配置管理,可定制配置,按指定的操作步驟有序執行,支持同步及異步方式.通過YAM格式進行描述定義,實現多臺主機的應用部署。
官方大量例子:https://github.com/ansible/ansible-examples
playbooks模塊調用格式如下eg:
-name: reboot the servers
command: /sbin/reboot -t now
egs:
1./home/test/ansible/playbooks/nginx.yml
---
- hosts: webservers
vars:
worker_processes: 4
num_cpus: 4
max_open_file: 65506
root: /data
remote_user: root
tasks:
- name: ensure nginx is at the latest version
yum: pkg=nginx state=latest
- name: write the nginx config file
template: src=/home/test/ansible/nginx/nginx.conf dest=/etc/nginx/nginx.conf
notify:
- restart nginx
- name: ensure nginx is running
service: name=nginx state=restarted
2.定義主機與用戶
- hosts: webservers
vars:
worker_processes: 4
num_cpus: 4
root: /data
remote_user: root
3.任務列表:
tasks:
- name: xxxxx
service: xxxxx xxxxx
tasks:
- name: xxxxx
template: src=xxxx dest=xxx
notify:
- restart xxx
執行 playbook:
ansible-playbook playbookfile(.yml) [參數]
eg:
ansible-playbook /home/test/ansible/playbooks/nginx.yml -f 10 #f:(10個進程數)并行
[參數]:
--list-hosts playbooks #-l"hosts"
-u REMOTE_USER
-syntax-check 語法檢查
-T TIMEOUT
--step:以單任務步驟執行,方便每一步的確認工作
* ansible-playbook --help
3.playbook角色與包含聲明:
(1)ansible支持寫playbook時拆分成多個文件,通過包含(include)的形式引用,可根據多種維度進行封裝,如定義變量、任務、處理程序等。
(2)目錄結構:
group_vars --相當于全局變量定義
hosts --定義主機“組”
site.yml --全局配置文件,group_vars、hosts、role等都在這里引用
role --角色設定
eg:
/home/test/ansible/playbooks/nginx/
1. cat /home/test/ansible/playbooks/nginx/hosts
[servers1]
192.168.1.21
192.168.1.31
[servers2]
192.168.2.21
192.168.2.31
[webservers]
192.168.3.21
192.168.3.31
...
2. cat /home/test/ansible/playbooks/nginx/group_vars/all #all 對hosts里的全部主機組,相當于默認全局變量
---
#Varibles listed here are applicable to all host groups
ntpserver: ntp.sjtu.edu.cn
cat /home/test/ansible/playbooks/nginx/group_vars/servers1 #對單組主機的特殊制定變量,僅對servers1主機組有效
---
worker_processes: 4
num_cpus: 4
max_open_file: 65536
root: /data
3.角色可以根據復用情況定義,比較隨意
(1)common roles
cat /home/test/ansible/playbooks/nginx/common/vars/main.yml #這里定義的變量優先級高于group_vars里定義的變量
---
#Varibles
ntpserver: 210.210.123.123
cat /home/test/ansible/playbooks/nginx/common/handlers/main.yml
- name: restart ntp
service: name=ntp state=restarted
cat /home/test/ansible/playbooks/nginx/common/tasks/main.yml
- name: Install ntp
yum: name=ntp state=present
- name: Config ntp file
template: src=ntp.conf.j2 dest=/etc/ntp.conf
notify: restarted ntp
- name: ...
cat /home/test/ansible/playbooks/nginx/common/templates/ntp.conf.j2
driftfile /var/lib/ntp/drift
restrict 127.0.0.1
restrict -6 ::1
server {{ ntpserver }} #此處將引用/home/test/ansible/playbooks/nginx/common/vars/main.yml 里定義的ntpserver變量
...
(2) ser1 roles
cat /home/test/ansible/playbooks/nginx/ser1/tasks/main.yml
cat /home/test/ansible/playbooks/nginx/ser1/handlers/main.yml
cat /home/test/ansible/playbooks/nginx/ser1/templates/main.yml
4. cat /home/test/ansible/playbooks/nginx/site.yml
---
- name: apply common config to all hosts
hosts: all
roles:
- common
- name: config and deploy only to servers1
hosts: servers1
roles:
- ser1
5. 運行角色
#cd /home/test/ansible/playbooks/nginx
#ansible-playbook -i hosts site.yml -f 10
三:
1.獲取遠程主機信息-Facts
ansible 192.168.1.66(hostname) -m setup
返回一些變量信息(主機名、ip地址、操作系統、硬件信息等)
2. 在模版中引用:
{{ ansible_hostname }}
{{ ansible_device.sda.mode1 }}
...
3. Jinja2過濾器:
使用格式: {{變量名|過濾方法}}
{{ path | basename }} 過濾出文件名
{{ path | dirname }} 過濾出目錄名
eg:
---
- hosts: 192.168.1.66
vars:
filename: /etc/profile
tasks:
- name: "shell1"
shell: echo {{ filename | basename }} >> /tmp/testshell
4. 自定義facts模塊:
需在目標主機上/etc/ansible/facts.d目錄定義JSON、INI或可執行的JSON輸出,文件擴展名使用.fact
eg:
在192.168.1.66上定義變量:
/etc/ansible/facts.d/preferences.fact
[general]
max_memory_size=32
max_user_processes=3730
open_files=65535
在主控端運行:
ansible 192.168.1.66 -m setup -a "filter=ansible_local" --> 返回層級結構
引用變量:
{{ ansible_local.preferences.general.open_files }}
注冊變量: 變量的另一個用途是將一條命令的執行結果保存到變量中,供后面的playbook使用
eg:
- hosts: servers1
tasks:
- shell: /usr/bin/foo
register: foo_result
ignore_errors: True
- shell: /usr/bin/bar
when: foo_result.rc == 5 #foo_result.rc 為返回 /usr/bin/foo的返回碼,當值為5時, /usr/bin/bar命令才會運行
條件語句when:
有時候我們想跳過某些主機的執行步驟,比如符合特定版本的操作系統將不安裝某個軟件包,或者磁盤空間滿了進行清理等.
eg:
tasks:
- command: /bin/false
register: result
ignore_errors: True
- command: /bin/something
when: result|failed
- command: /bin/something_else #當result執行結果為成功時執行這個
when: result|success
- command: /bin/still/something_else
when: result|skipped
循環:
eg1:
- name: add serveral users #實現批量創建用戶
user: name={{ item }} state=present groups=wheel
with_items:
- testuser1
- testuser2
eg2 Dict:
- name: add serveral users
user: name={{ item.name }} state=present groups={{ item.groups }}
with_items:
- { name: 'testuser1',groups:'wheel'}
- { name: 'testuser2',groups:'root'}
eg3 List:
---
# file: roles/fool/vars/main.yml
packages_base:
- [ 'foo-package', 'bar-package' ]
packages_apps:
- [ ['one-package', 'two-package'] ]
- [ ['red-[package', 'blue-package'] ]
引用:
- name: flattend loop demo
yum:name={{ item }} state=installed
with_flattened:
- package_base
- packages_apps
總結
- 上一篇: mysql affected rows_
- 下一篇: mysql storage_mySQL_