zoukankan      html  css  js  c++  java
  • ansible

    一:
    usage:
    ansible hosts_list -m module_name -a "command or shell"
    eg:
    ansible webservers -m command -a "free -m"
    ansible webservers -m script -a "/home/test.sh 12 34"
    ansible webservers -m shell -a "/home/test.sh"

    module_name:
    copy
    eg: ansible webservers -m copy -a "src=/home/test.sh dest=/tmp/ owner=root group=root mode=0755"
    stat
    eg: ansible webservers -m stat -a "path=/etc/sysctl.conf"
    get_url
    eg: ansible webservers -m get_url -a "url=http://www.baidu.com dest=/tmp/index.html mode=0440 force=yes"
    yum
    eg: ansible webservers -m apt -a "pkg=curl state=latest"
    ansible webservers -m yum -a "name=curl state=latest"
    cron
    eg: ansible webservers -m cron -a "name='check dirs' hour='5,2' job='ls -alh > /dev/null'"
    mount
    eg: ansible webservers -m mount -a "name=/mnt/data src=/dev/sd0 fstype=ext4 opts=ro state=present"
    service
    eg: ansible webservers -m service -a "name=nginx state=stoped"
    ansible webservers -m service -a "name=nginx state=restarted"
    ansible webservers -m service -a "name=nginx state=reloaded"
    user
    eg: ansible webservers -m user -a "name=cui comment='yaru'"
    ansible webservers -m user -a "name=cui state=absent remove=yes"

    二.playbook
    配置管理,可定制配置,按指定的操作步骤有序执行,支持同步及异步方式.通过YAM格式进行描述定义,实现多台主机的应用部署。
    官方大量例子:https://github.com/ansible/ansible-examples
    playbooks模块调用格式如下eg:
    -name: reboot the servers
    command: /sbin/reboot -t now

    egs:
    1./home/test/ansible/playbooks/nginx.yml
    ---
    - hosts: webservers
    vars:
    worker_processes: 4
    num_cpus: 4
    max_open_file: 65506
    root: /data
    remote_user: root
    tasks:
    - name: ensure nginx is at the latest version
    yum: pkg=nginx state=latest
    - name: write the nginx config file
    template: src=/home/test/ansible/nginx/nginx.conf dest=/etc/nginx/nginx.conf
    notify:
    - restart nginx
    - name: ensure nginx is running
    service: name=nginx state=restarted

    2.定义主机与用户
    - hosts: webservers
    vars:
    worker_processes: 4
    num_cpus: 4
    root: /data
    remote_user: root

    3.任务列表:
    tasks:
    - name: xxxxx
    service: xxxxx xxxxx
    tasks:
    - name: xxxxx
    template: src=xxxx dest=xxx
    notify:
    - restart xxx

    执行 playbook:
    ansible-playbook playbookfile(.yml) [参数]

    eg:
    ansible-playbook /home/test/ansible/playbooks/nginx.yml -f 10 #f:(10个进程数)并行
    [参数]:
    --list-hosts playbooks #-l"hosts"
    -u REMOTE_USER
    -syntax-check 语法检查
    -T TIMEOUT
    --step:以单任务步骤执行,方便每一步的确认工作
    * ansible-playbook --help

    3.playbook角色与包含声明:
    (1)ansible支持写playbook时拆分成多个文件,通过包含(include)的形式引用,可根据多种维度进行封装,如定义变量、任务、处理程序等。
    (2)目录结构:
    group_vars --相当于全局变量定义
    hosts --定义主机“组”
    site.yml --全局配置文件,group_vars、hosts、role等都在这里引用
    role --角色设定

    eg:
    /home/test/ansible/playbooks/nginx/

    1. cat /home/test/ansible/playbooks/nginx/hosts
    [servers1]
    192.168.1.21
    192.168.1.31

    [servers2]
    192.168.2.21
    192.168.2.31

    [webservers]
    192.168.3.21
    192.168.3.31

    ...

    2. cat /home/test/ansible/playbooks/nginx/group_vars/all #all 对hosts里的全部主机组,相当于默认全局变量
    ---
    #Varibles listed here are applicable to all host groups
    ntpserver: ntp.sjtu.edu.cn


    cat /home/test/ansible/playbooks/nginx/group_vars/servers1 #对单组主机的特殊制定变量,仅对servers1主机组有效
    ---
    worker_processes: 4
    num_cpus: 4
    max_open_file: 65536
    root: /data


    3.角色可以根据复用情况定义,比较随意
    (1)common roles
    cat /home/test/ansible/playbooks/nginx/common/vars/main.yml #这里定义的变量优先级高于group_vars里定义的变量
    ---
    #Varibles
    ntpserver: 210.210.123.123

    cat /home/test/ansible/playbooks/nginx/common/handlers/main.yml
    - name: restart ntp
    service: name=ntp state=restarted

    cat /home/test/ansible/playbooks/nginx/common/tasks/main.yml
    - name: Install ntp
    yum: name=ntp state=present
    - name: Config ntp file
    template: src=ntp.conf.j2 dest=/etc/ntp.conf
    notify: restarted ntp
    - name: ...

    cat /home/test/ansible/playbooks/nginx/common/templates/ntp.conf.j2
    driftfile /var/lib/ntp/drift
    restrict 127.0.0.1
    restrict -6 ::1

    server {{ ntpserver }} #此处将引用/home/test/ansible/playbooks/nginx/common/vars/main.yml 里定义的ntpserver变量
    ...

    (2) ser1 roles
    cat /home/test/ansible/playbooks/nginx/ser1/tasks/main.yml
    cat /home/test/ansible/playbooks/nginx/ser1/handlers/main.yml
    cat /home/test/ansible/playbooks/nginx/ser1/templates/main.yml

    4. cat /home/test/ansible/playbooks/nginx/site.yml
    ---
    - name: apply common config to all hosts
    hosts: all
    roles:
    - common
    - name: config and deploy only to servers1
    hosts: servers1
    roles:
    - ser1

    5. 运行角色
    #cd /home/test/ansible/playbooks/nginx
    #ansible-playbook -i hosts site.yml -f 10


    三:
    1.获取远程主机信息-Facts
    ansible 192.168.1.66(hostname) -m setup
    返回一些变量信息(主机名、ip地址、操作系统、硬件信息等)

    2. 在模版中引用:
    {{ ansible_hostname }}
    {{ ansible_device.sda.mode1 }}
    ...

    3. Jinja2过滤器:
    使用格式: {{变量名|过滤方法}}
    {{ path | basename }} 过滤出文件名
    {{ path | dirname }} 过滤出目录名
    eg:
    ---
    - hosts: 192.168.1.66
    vars:
    filename: /etc/profile
    tasks:
    - name: "shell1"
    shell: echo {{ filename | basename }} >> /tmp/testshell
    4. 自定义facts模块:
    需在目标主机上/etc/ansible/facts.d目录定义JSON、INI或可执行的JSON输出,文件扩展名使用.fact
    eg:
    在192.168.1.66上定义变量:
    /etc/ansible/facts.d/preferences.fact
    [general]
    max_memory_size=32
    max_user_processes=3730
    open_files=65535

    在主控端运行:
    ansible 192.168.1.66 -m setup -a "filter=ansible_local" --> 返回层级结构
    引用变量:
    {{ ansible_local.preferences.general.open_files }}

    注册变量: 变量的另一个用途是将一条命令的执行结果保存到变量中,供后面的playbook使用
    eg:
    - hosts: servers1
    tasks:
    - shell: /usr/bin/foo
    register: foo_result
    ignore_errors: True
    - shell: /usr/bin/bar
    when: foo_result.rc == 5 #foo_result.rc 为返回 /usr/bin/foo的返回码,当值为5时, /usr/bin/bar命令才会运行

    条件语句when:
    有时候我们想跳过某些主机的执行步骤,比如符合特定版本的操作系统将不安装某个软件包,或者磁盘空间满了进行清理等.
    eg:
    tasks:
    - command: /bin/false
    register: result
    ignore_errors: True
    - command: /bin/something
    when: result|failed
    - command: /bin/something_else #当result执行结果为成功时执行这个
    when: result|success
    - command: /bin/still/something_else
    when: result|skipped

    循环:
    eg1:
    - name: add serveral users #实现批量创建用户
    user: name={{ item }} state=present groups=wheel
    with_items:
    - testuser1
    - testuser2
    eg2 Dict:
    - name: add serveral users
    user: name={{ item.name }} state=present groups={{ item.groups }}
    with_items:
    - { name: 'testuser1',groups:'wheel'}
    - { name: 'testuser2',groups:'root'}
    eg3 List:
    ---
    # file: roles/fool/vars/main.yml
    packages_base:
    - [ 'foo-package', 'bar-package' ]
    packages_apps:
    - [ ['one-package', 'two-package'] ]
    - [ ['red-[package', 'blue-package'] ]
    引用:
    - name: flattend loop demo
    yum:name={{ item }} state=installed
    with_flattened:
    - package_base
    - packages_apps

  • 相关阅读:
    express如何使用cors插件、body-parser插件
    如何让xshell关闭后依然运行node项目
    nuxt命令和部署
    Python—函数的名称空间
    Python—生成器
    Python—闭包
    Python入门-字符串常用方法
    Python入门-函数
    Python入门-文件操作
    Python入门-三级菜单
  • 原文地址:https://www.cnblogs.com/clovn/p/5426900.html
Copyright © 2011-2022 走看看