ansible批量執行命令
阿新 • • 發佈:2018-06-28
配置ssh 由於 pub 依賴 chmod linux服務器 目錄 libs CA 批量管理linux服務器指的是:批量執行命令、下發文件等等
安裝ansible
- 1.1: 安裝epel源
yum install epel-release -y #編輯/etc/yum.repos.d/epel.repo,註釋mirrorlist,打開baseurl
- 1.2: 安裝ansible
yum list ansible #ansible版本,如果這個命令運行有問題的話,多運行幾次 yum install ansible -y
- 1.3: ansible查看幫助
ansible-doc -l #查看總幫助 ansible-doc -s shell #查看shell模塊的幫助 ansible-doc -s raw
配置主機組(/etc/ansible/hosts)
[testgroup]
192.168.56.40
192.168.56.41
192.168.56.42
[test41]
192.168.56.41
[test42]
192.168.56.42
配置ssh免密碼登錄
ssh-keygen -t rsa#一直按回車即可
ssh-copy-id -i .ssh/id_rsa.pub ip #上傳公鑰到服務器
ansible模塊
-
- ansible語法
ansible 主機組或者主機 -m 模塊 -a 命令
- ansible語法
-
2 ansible語法測試
ansible testgroup -m ping ansible testgroup -m command -a "pwd"
-
3 : ansible模塊command(不支持管道,不建議使用)
ansible testgroup -m command -a "pwd" ansible testgroup -m command -a "echo testa|grep a" #這個不能正常使用 ansible testgroup -m command -a "echo bb >>/tmp/testansible" #重定向也無法正常使用
6: ansible模塊shell(支持管道)
ansible testgroup -m shell -a "echo testa|grep a" #支持管道 ansible testgroup -m shell -a "echo bb >>/tmp/testansible" #支持重定向 ansible testgroup -m shell -a "cat /etc/passwd|awk -F‘:‘ ‘{print \$1}‘" #遇到特殊符號需要加入\轉義,這樣子ansible才能正常運行
7: ansible模塊raw(如果運行命令,一般使用shell模塊)
說明為什麽會有raw,由於ansible依賴python環境,例如需要有python-simplejson之類的包,如果沒安裝的話,就無法使用shell等模塊,就需要先用raw安裝一下。ansible testgroup -m raw -a "yum install python-simplejson -y" ansible testgroup -m raw -a "yum install libselinux-python -y"
- 8.1 ansible模塊copy(下放文件)
ll -h /usr/local/src/ cat /tmp/testdir/test.txt ansible testgroup -m copy -a "src=/tmp/testdir/test.txt dest=/usr/local/src/" #src指定本地的文件 #dest指定遠程主機的目錄或者文件
- 8.2 拷貝文件夾
ll -h /usr/local/src/ ansible testgroup -m copy -a "src=/tmp/testdir/ dest=/usr/local/src/" #testdir文件夾沒拷貝 ansible testgroup -m copy -a "src=/tmp/testdir dest=/usr/local/src/" #testdir文件夾也拷貝了
- 8.3 備份文件
ansible testgroup -m copy -a "src=/tmp/testdir/test.txt dest=/usr/local/src/ backup=yes"?
- 8.4 指定用戶和權限
ansible testgroup -m copy -a "src=/tmp/testdir/test.txt dest=/usr/local/src/ backup=yes owner=nobody group=nobody mode=0600"
- 9: ansible模塊script(遠程機器運行ansible主控端的腳本)
實現的方案:把腳本下發到所有的服務器,然後再運行腳本。copy+shell+delete
cat /usr/local/src/script
chmod a+x /usr/local/src/script
ansible testgroup -m script -a "/usr/local/src/script"
- 10: ansible-playbook(把ansible執行命令寫入文件中)
#cat /usr/local/src/test.yaml
- hosts: testgroup
tasks:
- name: test ansible
shell: echo "shell 1" >>/tmp/a
- name: test2
shell: echo "shell 2" >>/tmp/a
運行:ansible-playbook /usr/local/src/test.yaml
#cat /usr/local/src/test_copy.yaml
- hosts: testgroup
tasks:
- name: test ansible
shell: echo "shell 1" >>/tmp/a
- name: test copy
copy: src=/tmp/a dest=/usr/local/src/
#下發nginx配置,對nginx進行檢測
#cat /usr/local/src/test_nginx.yaml
- hosts: testgroup
tasks:
- name: copy nginx conf
copy: src=/tmp/nginx.conf dest=/usr/local/nginx/conf/ backup=yes
- name: nginx conf check
shell: /usr/local/nginx/sbin/nginx -t
register: nginx_result
- debug: var=nginx_result
#可只輸出stdout_lines或者stderr_lines
ansible批量執行命令