1. 程式人生 > >ansible自己練習,有點亂

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/‘

  -l  1.1.1.1

使用定時模組

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