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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,290评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,399评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,021评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,034评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,412评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,651评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,902评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,605评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,339评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,586评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,076评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,400评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,060评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,851评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,685评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,595评论 2 270

推荐阅读更多精彩内容