• ansible学习笔记



    ssh认证:
    ssh-keygen -t rsa
    ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.90.19

    虚拟化环境:
    [root@izbp1a7wyzv7b3ujsfphj2z ansibleui]# virtualenv demo
    New python executable in /app/ansibleui/demo/bin/python2
    Also creating executable in /app/ansibleui/demo/bin/python
    Please make sure you remove any previous custom paths from your /root/.pydistutils.cfg file.
    Installing setuptools, pip, wheel...done.
    [root@izbp1a7wyzv7b3ujsfphj2z ansibleui]# source demo/bin/activate
    (demo) [root@izbp1a7wyzv7b3ujsfphj2z ansibleui]# pip install ansible==1.9.4 Django==1.8 django-filter djangorestframework==3.2.3 MYSQL-python


    注册变量 register
    把任务的执行结果当成一个变量的值,待后面的任务使用
    注册变量经常和debug一起使用
    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible# cat f3.yml
    ---
    - hosts: 172.16.90.20
    remote_user: root
    vars:
    touch_file: imoocc2.file
    tasks:
    - name: get date
    shell: uptime
    register: date_output
    - name: touch file
    shell: "touch /tmp/{{touch_file}}"
    - name: echo date_output
    shell: echo {{date_output.stdout}}>>/tmp/{{touch_file}}

    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible/playbooks# cat register.yml
    ---
    - hosts: 172.16.90.20
    remote_user: root
    vars:
    touch_file: zhailiang
    tasks:
    - name: get ls
    shell: ls
    register: ls_output
    - name: echo output
    shell: echo "{{ ls_output.stdout }}">>/tmp/{{ touch_file }}
    - debug: msg=" {{ ls_output.stdout }}"


    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible/playbooks# ansible-playbook ./register.yml

    PLAY [172.16.90.20] ****************************************************************************************************************************************************************************

    TASK [Gathering Facts] *************************************************************************************************************************************************************************
    ok: [172.16.90.20]

    TASK [get ls] **********************************************************************************************************************************************************************************
    changed: [172.16.90.20]

    TASK [echo output] *****************************************************************************************************************************************************************************
    changed: [172.16.90.20]

    TASK [debug] ***********************************************************************************************************************************************************************************
    ok: [172.16.90.20] => {
    "msg": " anaconda3 Anaconda3-4.1.0-Linux-x86_64.sh Desktop Documents Downloads Music Pictures Public Templates Videos"
    }

    PLAY RECAP *************************************************************************************************************************************************************************************
    172.16.90.20 : ok=4 changed=2 unreachable=0 failed=0


    远程主机的系统变量 Facts
    anible会通过setup来搜集主机的系统信息,这些搜集到的系统信息叫Facts
    比如:ansible_distribution == "CentOS" and ansible_distribution_major_version == "7"
    如果要关闭Fact,可设置gather_facts: no
    如果是访问复杂的,可用:
    {{ ansible_date_time.date}}
    {{ ansible_date_time["time"] }}

    when:
    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible# cat f4.yml
    ---
    - hosts: 172.16.90.19,172.16.90.20
    remote_user: root
    vars:
    touch_file: imoocc.file
    tasks:
    - name: "touch flag file"
    command: touch /tmp/this_is_{{ansible_distribution}}_system
    when: ansible_distribution == "CentOS" and ansible_distribution_major_version == "7"

    with_items
    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible# cat f5.yml
    ---
    - hosts: 172.16.90.19,172.16.90.20
    remote_user: root
    tasks:
    - name: add serverl users
    user: name={{ item.name }} state=present groups={{ item.groups }}
    with_items:
    - { name: 'testuser1', groups: 'wheel'}
    - { name: 'testuser2', groups: 'root'}
    当item大于5时,将with_items的数据输出显示到/tmp/kingleoric.txt上
    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible/playbooks# cat with_items.yml
    ---
    - hosts: 172.16.90.20
    remote_user: root
    tasks:
    - name: withitems
    shell: echo {{ item }} >> /tmp/kingleoric.txt
    with_items: [ 0, 2, 4, 6, 8, 10]
    when: item > 5
    vars还支持列表:
    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible/playbooks# cat loop1.yml
    ---
    - hosts: 172.16.90.20
    vars:
    somelist: ["test1", "test2"]
    tasks:
    - name: add serverl users
    user: name={{ item }} state=present groups=testuser1
    with_items: "{{ somelist }}"
    结果为:
    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible/playbooks# ansible-playbook ./loop1.yml

    PLAY [172.16.90.20] ****************************************************************************************************************************************************************************

    TASK [Gathering Facts] *************************************************************************************************************************************************************************
    ok: [172.16.90.20]

    TASK [add serverl users] ***********************************************************************************************************************************************************************
    changed: [172.16.90.20] => (item=test1)
    changed: [172.16.90.20] => (item=test2)

    PLAY RECAP *************************************************************************************************************************************************************************************
    172.16.90.20 : ok=2 changed=1 unreachable=0 failed=0
    with_items支持用于迭代的list类型变量

    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible/playbooks# ansible-playbook ./with_items.yml

    PLAY [172.16.90.20] ****************************************************************************************************************************************************************************

    TASK [Gathering Facts] *************************************************************************************************************************************************************************
    ok: [172.16.90.20]

    TASK [withitems] *******************************************************************************************************************************************************************************
    skipping: [172.16.90.20] => (item=0)
    skipping: [172.16.90.20] => (item=2)
    skipping: [172.16.90.20] => (item=4)
    changed: [172.16.90.20] => (item=6)
    changed: [172.16.90.20] => (item=8)
    changed: [172.16.90.20] => (item=10)

    PLAY RECAP *************************************************************************************************************************************************************************************
    172.16.90.20 : ok=2 changed=1 unreachable=0 failed=0


    字典循环
    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible# cat f6.yml
    ---
    - hosts: 172.16.90.19,172.16.90.20
    remote_user: root
    tasks:
    - name: add serverl users
    user: name={{ item.key }} state=present groups={{ item.value}}
    with_dict:
    { 'testuser3': 'wheel', 'testuser4': 'root'}

    循环目录:当前目录
    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible/playbooks# cat f7.yml
    ---
    - hosts: 172.16.90.19,172.16.90.20
    remote_user: root
    tasks:
    - file: dest=/tmp/aa state=directory
    - copy: src={{ item }} dest=/tmp/bb owner=root mode=600
    with_fileglob:
    - aa/*


    条件+循环
    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible/playbooks# cat f8.yml
    ---

    - hosts: 172.16.90.19,172.16.90.19
    remote_user: root
    tasks:
    - debug: msg= {{item.key}} is the winnter
    with_dict: {'kingleoric':{'english': 50, 'chinese': 30}, 'tom': {'english': 80, 'chinese': 30}}
    when: item.value.english >= 60
    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible/playbooks# ansible-playbook ./f8.yml

    PLAY [172.16.90.19,172.16.90.19] ****************************************************************************************************************************************************************

    TASK [Gathering Facts] **************************************************************************************************************************************************************************
    ok: [172.16.90.19]

    TASK [debug] ************************************************************************************************************************************************************************************
    skipping: [172.16.90.19] => (item={'key': u'kingleoric', 'value': {u'chinese': 30, u'english': 50}})
    ok: [172.16.90.19] => (item={'key': u'tom', 'value': {u'chinese': 30, u'english': 80}}) => {
    "item": {
    "key": "tom",
    "value": {
    "chinese": 30,
    "english": 80
    }
    },
    "msg": ""
    }

    PLAY RECAP **************************************************************************************************************************************************************************************
    172.16.90.19 : ok=2 changed=0 unreachable=0 failed=0


    异常处理:
    1.忽略错误
    ignore_errors: yes
    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible/playbooks# cat f9.yml
    ---
    - hosts: 172.16.90.19,172.16.90.20
    remote_user: root
    tasks:
    - name: ignore false
    command: /bin/false
    ignore_errors: yes
    - name: touch a file
    file: path=/tmp/test2 state=touch mode=0700 owner=root group=root


    2.failed_when
    当小于3才会执行后面的脚本
    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible/playbooks# cat f10.yml
    ---
    - hosts: 172.16.90.19,172.16.90.20
    remote_user: root
    tasks:
    - name: get process
    shell: ps -ef|wc -l
    register: process_count
    failed_when: process_count < 3
    - name: touch a file
    file: path=/tmp/test2 state=touch mode=0700 owner=testuser1 group=wheel
    当修改为process_count > 3后再执行:
    [root@izbp1j17ifxfecekzxs2lyz tmp]# ls -l test2
    -rwx------ 1 testuser1 wheel 0 3月 18 19:05 test2

    3.
    changed_when: false 对应 changed=0 有文件发生变化
    #changed_when: false 对应 changed=1 有文件发生变化
    当我们控制一些远程主机执行某些任务时,当任务在远程主机上成功执行,状态发生更改时,会返回changed状态响应,状态未发生更改时,会返回OK状态响应。
    当任务被跳过时,会返回skipped状态响应。我们可以通过changed_when来手动更改changed响应状态。示例如下:


    tags:
    1.打标签,可以对一个对象打一个或多个标签
    2.标签使用
    通过tags和任务对象进行捆绑,控制部分或指定的task执行
    打标签对象包括单个task include roles
    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible/playbooks# cat f12_tags.yml
    ---
    - hosts: 172.16.90.19,172.16.90.20
    remote_user: root
    tasks:
    - name: create file 1
    shell: touch /tmp/file1.txt
    tags:
    - cfile1
    - cfile3
    - name: create file 2
    shell: touch /tmp/file2.txt
    tags:
    - cfile2

    只对cfile1处理
    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible/playbooks# ansible-playbook ./f12_tags.yml -t cfile1

    跳过cfile1
    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible/playbooks# ansible-playbook ./f12_tags.yml --skip-tags cfile1

    roles


    handler
    按照定义的顺序执行的,而不是按照任务中的顺序执行:
    定义顺序是1>2>3,调用的顺序:3>2>1 执行顺序是1>2>3
    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible/playbooks# cat handler.yml
    ---
    - hosts: 172.16.90.20
    remote_user: root
    vars:
    random_number1: "kingleoric"
    random_number2: "leon"

    tasks:
    - name: copy the /etc/hosts to /tmp/hosts. {{ random_number1 }}
    copy: src=/etc/hosts dest=/tmp/hosts.{{ random_number1 }}
    notify:
    - define the 3nd handler
    - name: copy the /etc/hosts to /tmp/hosts. {{ random_number2 }}
    copy: src=/etc/hosts dest=/tmp/hosts.{{ random_number2 }}
    notify:
    - define the 2nd handler
    - define the 1st handler
    handlers:
    - name: define the 1st handler
    debug: msg="define the 1st"
    - name: define the 2nd handler
    debug: msg="define the 2nd"
    - name: define the 3nd handler
    debug: msg="define the 3nd"


    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible/playbooks# ansible-playbook ./handler.yml

    PLAY [172.16.90.20] ****************************************************************************************************************************************************************************

    TASK [Gathering Facts] *************************************************************************************************************************************************************************
    ok: [172.16.90.20]

    TASK [copy the /etc/hosts to /tmp/hosts. kingleoric] *******************************************************************************************************************************************
    changed: [172.16.90.20]

    TASK [copy the /etc/hosts to /tmp/hosts. leon] *************************************************************************************************************************************************
    changed: [172.16.90.20]

    RUNNING HANDLER [define the 1st handler] *******************************************************************************************************************************************************
    ok: [172.16.90.20] => {
    "msg": "define the 1st"
    }

    RUNNING HANDLER [define the 2nd handler] *******************************************************************************************************************************************************
    ok: [172.16.90.20] => {
    "msg": "define the 2nd"
    }

    RUNNING HANDLER [define the 3nd handler] *******************************************************************************************************************************************************
    ok: [172.16.90.20] => {
    "msg": "define the 3nd"
    }

    PLAY RECAP *************************************************************************************************************************************************************************************
    172.16.90.20 : ok=6 changed=2 unreachable=0 failed=0


    include
    include_tasks/include :动态包含tasks的任务列表
    f12_include.yml包含touchf1.yml和touchf2.yml 2个yml文件
    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible/playbooks# cat f12_include.yml
    ---
    - hosts: 172.16.90.19,172.16.90.20
    remote_user: root
    tasks:
    - include_tasks: touchf1.yml
    - include_tasks: touchf2.yml

    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible/playbooks# cat touchf1.yml
    ---
    - name: create file 1
    shell: touch /tmp/file1.txt
    tags:
    - cfile1
    - cfile3

    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible/playbooks# cat touchf2.yml
    ---
    - name: create file 2
    shell: touch /tmp/file2.txt
    tags:
    - cfile2

    模板 template
    playbook中定义的变量,inventory中的Host Group 都可以在template使用
    这个例子使用template模块复制index.html.j2并替换为index.html
    其中index.html.j2为:
    <html>
    <title>#46 Demo</title>

    <!--
    http://stackoverflow.com/questions/22223270/vertically-and-horizontally-center-a-div-with-css
    http://css-tricks.com/centering-in-the-unknown/
    http://jsfiddle.net/6PaXB/
    -->

    <style>.block {text-align: center;margin-bottom:10px;}.block:before {content: '';display: inline-block;height: 100%;vertical-align: middle;margin-right: -0.25em;}.centered {display: inline-block;vertical-align: middle; 300px;}</style>

    <body>
    <div class="block" style="height: 99%;">
    <div class="centered">
    <h1>#46 Demo {{ defined_name }}</h1>
    <p>Served by {{ ansible_hostname }} ({{ ansible_default_ipv4.address }}).</p>
    </div>
    </div>
    </body>
    </html>

    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible/playbooks# cat template.yml
    ---
    - hosts: 172.16.90.20
    remote_user: root
    vars:
    http_port: 80
    defined_name: "hello my name is kingleoric"
    tasks:
    - name: write configuration file
    template: src=/etc/ansible/templates/index.html.j2 dest=/tmp/index.html
    notify:
    - restart apache
    handlers:
    - name: restart apache
    service: name=httpd state=restarted
    结果为:
    root@iZbp133fmo5z205fno4gkiZ:/etc/ansible/playbooks# ansible-playbook ./template.yml

    PLAY [172.16.90.20] ****************************************************************************************************************************************************************************

    TASK [Gathering Facts] *************************************************************************************************************************************************************************
    ok: [172.16.90.20]

    TASK [write configuration file] ****************************************************************************************************************************************************************
    changed: [172.16.90.20]

    RUNNING HANDLER [restart apache] ***************************************************************************************************************************************************************
    changed: [172.16.90.20]

    PLAY RECAP *************************************************************************************************************************************************************************************
    172.16.90.20 : ok=3 changed=2 unreachable=0 failed=0
    目标服务器出现index.html的文件

  • 相关阅读:
    未分类[selenium]常见元素定位
    未分类[selenium]-元素定位不到的原因及解决办法
    1.4测试需求分析
    1.3测试用例设计方法
    1.2软件生命周期&测试流程
    《Python 高级编程》简要读书笔记
    app基本测试要点总结
    python 找出两个列表的相同元素与不同元素
    mysql 8.0之后关于group by 语句报错问题
    selenium webdriver 执行原理
  • 原文地址:https://www.cnblogs.com/kingleoric/p/8873127.html
Copyright © 2020-2023  润新知