ansible自己練習,有點亂
配置被管理主機的分組名稱,IP地址,埠號,祕鑰檔案,ssh連線使用者
[testhost] //分組名稱
10.200.7.59:9999 //IP地址,埠號, ansible_ssh_private_key_file=/etc/ansible/sshkey/common/10.200.7.59/sysadmin ansible_ssh_user=sysadmin //祕鑰檔案,ssh連線使用者
模組synchronize 從被控制主機拉取檔案到控制機, -l --limit限制,只管理主機
ansible hostIP-m synchronize -a ‘mode=pull src=/tmp/a dest=/root/‘
使用定時模組
ansible testhost -m cron -a "name='test_cron' job='/bin/touch /tmp/test.txt' hour='1,5,10' weekday=1"
Ansible-playbook
YAML最關鍵的部分為列表 欄位 和對映
列表的所有元素均使用“-”打頭,例如:# A list of tasty fruits- Apple- Orange
一定要做好縮排,通過空格進行排序,排列整齊的認為是同一級別的
引數互動
ansible-playbooke33_var_in_command.yml --extra-vars "{'hosts':'vm-rhel7-1', 'user':'root'}"
gather_facts引數指定了在以下任務部分執行前,是否先執行setup模組獲取主機相關資訊,這在後面的task會使用到setup獲取的資訊時用到;
建立使用者
- name: create_user hosts: testhost user: root gather_facts: false vars: - user: "msiyuetian" |
0.user模組
tasks:
- name: create user
user: name="{{ user }}"
1.debug模組
debug模組使用很簡單.它具有兩個引數,msg和fail.msg就是打印出來的資訊,而當fail引數設定為yes時,會發送失敗通知給ansible,然後ansible會停止執行任務.
- name: debug
Debug:
Msg: {{ message.stdout }}
2.check模式
ansible還提供了check模式和diff模式.只需要執行playbook時新增引數–check和–diff.check模式執行時,ansible不會真正控制遠端機器發生變更.這能夠讓你獲得這次playbook任務中,將會發生changed事件的列表.
3.設定使用系統變數
- name:設定ROOT使用者的SU密碼
set_fact:
ansible_become_pass:“abc”
4yaml中包含另一個yaml表格:
[[email protected] httpd]# cat httpd.yaml
- name: conf
remote_user: root
hosts: a
tasks:
include: tasks/main.yaml
handlers:
include: handlers/main.yaml
5.service 模組及定義handlers(內容和正常書寫一直)
[[email protected] handlers]# vim main.yaml
內容如下:
- name: restart httpd
service: name=httpd enabled=yes state=restarted
6.tags模組
在playbook中 其中一個選項 -t,-t表示可以執行某些特定標籤對應的tasks
如果第二次執行的時候就沒有必要去重新yum安裝
ansible-playbook httpd.yaml -t conf
- name: conf file
copy: src=/opt/test/httpd/httpd.conf dest=/etc/httpd/conf/httpd.conf
tags: conf
notify: restart httpd
7.定義yum模組的使用,並且使用條件when,即 命令為yum
- name: install #定義第一個任務名
yum: name=httpd state=present
when: ansible_pkg_mgr == "yum"
when: ansible_os_family == "RedHat"
8.notigy 和 handlers模組方法的使用
- name: test copy copy: src=/etc/passwd dest=/tmp/handlers.txt notify: test handlers handlers: - name: test handlers shell: echo "msiyuetian.blog.51cto.com" >> /tmp/handlers.txt |
說明:只有 copy 模組真正執行後,才會去呼叫下面的 handlers 相關的操作,追加內容。也就是說如果 src 和 dest 內容是一樣的,並不會去執行 handlers 裡面的 shell 相關命令。所以這種比較適合配置檔案發生更改後,需要重啟服務的操作。我理解notify是在做比較。
9.Ansible-playbook使用sudo
- hosts: webnodes
tasks:
- name: test ping connection:
remote_user: test
sudo: yes
10.引數的使用
- name: change mode for files
file: path=/tmp/{{ item }} mode=600 owner=root group=root
with_items:
- 1.txt
- 2.txt
這裡變數必須是以{{item}}進行標記,而呼叫變數必須是with_items:進行賦值
補充:在使用with_items的時候還可以使用hashes
user:name={{item,name}} state=present groups={{item.group}}
with_items:
-{name:'test1',gourp: 'wheel'}
-{name:'test2',gourp: 'root'}
11.Register模組儲存結果
- name: Get /tmp info
file: dest=/tmp state=directory
register: tmp //獲取原始檔的一些屬性資訊
- name: Set mode on /var/tmp
file: dest=/tmp/subtmp mode={{ tmp.mode }} state=directory // 建立資料夾
12.prompt互動方式獲取變數值
- hosts: server
vars_prompt:
- name: web
prompt: 'Please input the web server:'
private: no
tasks:
- name: concent of the file test
template: src=/root/test dest=/tmp/test
檢視/root/test檔案
在一個主機上面只執行一次一個任務.”run_once”來實現:run_once: true
在本地執行程式:delegate_to:localhost