Ansible Playbook使用笔记

PlayBook:

执行:
ansible-playbook playbook.yml -f 10
ansible-playbook playbook.yml --list-hosts
Facts:
ansible all -m setup

Task Include:
tasks:
  \- include: task2.yml
  \- include: wordpress.yml
    vars:
        wp_user: timmy
        ssh_keys:
          \- keys/one.txt
          \- keys/two.txt

Handlers Include:

    handlers:
      \- include: handlers/handlers.yml

Roles:

        webservers.yml
        fooservers.yml
        roles/
           common/
             files/
             templates/
             tasks/
             handlers/
             vars/
             defaults/
             meta/
           webservers/
             files/
             templates/
             tasks/
             handlers/
             vars/
             defaults/
             meta/

        - hosts: webservers
          roles:
             - common
             - webservers

说明:

    If roles/x/tasks/main.yml exists, tasks listed therein will be added to the play
    If roles/x/handlers/main.yml exists, handlers listed therein will be added to the play
    If roles/x/vars/main.yml exists, variables listed therein will be added to the play
    If roles/x/meta/main.yml exists, any role dependencies listed therein will be added to the list of roles (1.3 and later)
    Any copy tasks can reference files in roles/x/files/ without having to path them relatively or absolutely
    Any script tasks can reference scripts in roles/x/files/ without having to path them relatively or absolutely
    Any template tasks can reference files in roles/x/templates/ without having to path them relatively or absolutely
    Any include tasks can reference files in roles/x/tasks/ without having to path them relatively or absolutely
        - hosts: webservers
          roles:
            - common
            - { role: foo_app_instance, dir: '/opt/a',  port: 5000 }
            - { role: foo_app_instance, dir: '/opt/b',  port: 5001 }

        - hosts: webservers
          roles:
            - { role: some_role, when: "ansible_os_family == 'RedHat'" }```

    - hosts: webservers

      pre_tasks:
        - shell: echo 'hello'

      roles:
        - { role: some_role }

      tasks:
        - shell: echo 'still busy'

      post_tasks:
        - shell: echo 'goodbye'
        Role default variables:
            defaults/main.yml 

        Role dependencies :
            roles/myapp/meta/main.yml


        write a custom module in role:

            roles/
               my_custom_modules/
                   library/
                      module1
                      module2       
            - hosts: webservers
              roles:
                - my_custom_modules
                - some_other_role_using_my_custom_modules
                - yet_another_role_using_my_custom_modules

Varialbes:

    Var Define in playbooks:
        - hosts: webservers
          vars:
            http_port: 80

    infomation discovery from Facts:
        ansible hostname -m setup

        {{ ansible_hostname }}
        {{ ansible_os_family }}
        {{ ansible_devices.sda.model }}

    Trun Off Facts:
    - hosts: whatever
        gather_facts: no

    Fact Caching:
    Redis:
        [defaults]
        gathering = smart
        fact_caching = redis
        fact_caching_timeout = 86400
        # seconds

        yum install redis
        service redis start
        pip install redis

    JsonFile:
        [defaults]
        gathering = smart
        fact_caching = jsonfile
        fact_caching_connection = /path/to/cachedir
        fact_caching_timeout = 86400
        # seconds


    Register Variables:

    - hosts: web_servers

      tasks:

         - shell: /usr/bin/foo
           register: foo_result
           ignore_errors: True

         - shell: /usr/bin/bar
           when: foo_result.rc == 5


    When:

    - hosts: webservers
      roles:
         - { role: debian_stock_config, when: ansible_os_family == 'Debian' }



    - hosts: all
      remote_user: root
      vars_files:
        - "vars/common.yml"
        - [ "vars/{{ ansible_os_family }}.yml", "vars/os_defaults.yml" ]
      tasks:
      - name: make sure apache is running
        service: name={{ apache }} state=running

    - name: template a file
      template: src={{ item }} dest=/etc/myapp/foo.conf
      with_first_found:
        - files:
           - {{ ansible_distribution }}.conf
           - default.conf
          paths:
           - search_location_one/somedir/
           - /opt/other_location/somedir/

Register Variables

    - name: registered variable usage as a with_items list
      hosts: all

      tasks:

          - name: retrieve the list of home directories
            command: ls /home
            register: home_dirs

          - name: add home dirs to the backup spooler
            file: path=/mnt/bkspool/{{ item }} src=/home/{{ item }} state=link
            with_items: home_dirs.stdout_lines
            # same as with_items: home_dirs.stdout.split()


Loops:
    - name: add several users
      user: name={{ item }} state=present groups=wheel
      with_items:
         - testuser1
         - testuser2

    - name: add several users
      user: name={{ item.name }} state=present groups={{ item.groups }}
      with_items:
        - { name: 'testuser1', groups: 'wheel' }
        - { name: 'testuser2', groups: 'root' }

    - name: give users access to multiple databases
      mysql_user: name={{ item[0] }} priv={{ item[1] }}.*:ALL append_privs=yes password=foo
      with_nested:
        - [ 'alice', 'bob' ]
        - [ 'clientdb', 'employeedb', 'providerdb' ]

    tasks:
      - name: Print phone records
        debug: msg="User {{ item.key }} is {{ item.value.name }} ({{ item.value.telephone }})"
        with_dict: "{{users}}"

    - hosts: all
      tasks:

        # first ensure our target directory exists
        - file: dest=/etc/fooapp state=directory

        # copy each file over that matches the given pattern
        - copy: src={{ item }} dest=/etc/fooapp/ owner=root mode=600
          with_fileglob:
            - /playbooks/files/fooapp/*

    tasks:
        - debug: msg="{{ item.0 }} and {{ item.1 }}"
          with_together:
            - "{{alpha}}"
            - "{{numbers}}"

    - name: Setup MySQL users
      mysql_user: name={{ item.0.user }} password={{ item.0.mysql.password }} host={{ item.1 }} priv={{ item.0.mysql.privs | join('/') }}
      with_subelements:
        - users
        - mysql.hosts

你可能感兴趣的:(Ansible Playbook使用笔记)