• 4 ansibleplaybook Sky


    ansible-playbook
    
    使用ansible-playbook命令执行playbook时,ansible会先将playbook 的task解析成python文件的命令,然后通过ssh连接到host(Managed node),通过sftp/scp将解析的python文件传输到host机器上去,然后使用–become-user指定的账号或者是默认账号admin调用host机器上安装的python执行相应的命令
    
    playbook是ansible用于配置,部署,和管理被节点的剧本
    通过playbook的详细描述,执行其中的一些列tasks,可以让远端的主机达到预期的状态。playbook就像ansible控制器给被控节点列出的一系列to-do-list,而且被控节点必须要完成
    playbook顾名思义,即剧本,现实生活中演员按照剧本表演,在ansible中,这次由被控计算机表演,进行安装,部署应用,提供对外的服务等,以及组织计算机处理各种各样的事情。
    
    1 ansible-playbook参数介绍
    ansible可用的选项如下:
    -v:输出详细的执行过程信息,可以得到执行过程所有的信息。
    -i PATH:指定inventory信息,默认为/etc/ansible/hosts。
    -f:并发线程数,默认为5个线程。
    -private-key=PRIVATE_KEY_FILE:指定密钥文件。
    -m:指定执行使用的模块。
    -M:指定模块的存放路径,默认为/usr/share/ansible,也可以通过ANSIBLE_LIBRARY来设定默认路径。
    -a:指定模块参数。
    -u:指定远程主机以哪个用户运行命令。
    -l:限制运行主机,等同于“–limit”。
    –list-hosts:列出符合条件的主机列表,不执行任何命令。
    
    2 ansible-playbook变量
    变量优先级:
    命令行定义变量 > play中的vars_files > play中的vars变量 > host_vars中定义的变量> group_vars/组 > group_vars/all > inventory定义的变量
    
    2.1 通过vars/set_fact定义变量:
    playbook中定义变量vars,变量用 "{{变量}}" 表示
    hosts:在ansible 章节介绍的 /etc/ansible/hosts 里面定义主机名
    remote_user: 登陆的用户
    vars: 配置变量
    tasks: 需要执行命令
    set_fact: 定义变量并赋值
    debug: 打印需要内容
    - hosts: tx_151
      remote_user: root
      vars: 
        testvar1: test1
      tasks:
      - set_fact:
         testvar2: "test2"
      - debug:
          msg: "{{testvar1}} {{testvar2}} "
    
    2.2 ansible内置系统变量
    ansible_version:ansible版本号
    inventory_hostname:获取到被操作的当前主机的主机名称
    groups_names:内置变量groups
    inventory_dir:ansible主机中清单文件的存放路径,默认inventory_dir对应的值为/etc/ansible,默认的文件路径/etc/ansible/hosts
    - hosts: vm3
      remote_user: root
      tasks:
      - debug:
          msg: "系统变量:{{ ansible_version }} {{ inventory_hostname }}  {{ group_names }} {{inventory_dir}}"
    
    yaml语法:
    # vim apache.yaml
    - hosts: vm3
      tasks:
      - name: install httpd package
        yum: name=httpd state=present
      - name: copy httpd.conf
        copy: src=/tmp/httpd.conf dest=/etc/httpd/conf/httpd.conf
        #复制http.conf过去,/tmp/httpd.conf在本机上要存在
        notify: restart httpd  #当http.conf发生改变时,通知给相应的handlers
        tags:restart_httpd  #打标签
      - name: ensure httpd running
        service: name=httpd state=started enabled=yes
        tags: start_httpd  #打标签
      handlers:
      - name: restart httpd
        service: name=httpd state=restarted
    -----------------------------------------------------------------------------------
    - host:                   # 针对主机对象
      tasks:                  # 主任务列表
      - name:                 # 任务名
        yum:                  # 任务
        notify:               # 引用处理程序
      handlers:               # 定义处理程序
      - name:                 # 任务名
      service:                # 任务
    语法检查:
    ansible-playbook apache.yaml --syntax-check
    ansible-playbook apache.yaml --list-tasks
    ansible-playbook apache.yaml --list-hosts
    执行:
    ansible-playbook apache.yaml
    
    任务可以通过“tags”打标签,而后可以在ansible-playbook命令上使用-t指定进行调用:
    ansible-playbook apache.yaml -t restart_httpd
    
    2.3 playbook的变量可以定义在一个专门存放变量的文件中
    vi vars01.yml
    web_package: httpd
    db_package: mariadb-server
    ftp_package: vsftpd
    
    引用了变量文件vars01.yml 的写法
    
    #play
    - hosts: webservers
      vars_files: ./vars01.yml
      tasks:
        - name: Installed Httpd Service
          yum:
            name:
              - "{{ web_package }}"
              - "{{ db_package }}"
              - "{{ ftp_package }}"
            state: present
    
    2.4 更好的方式是在ansible的项目目录中创建额外的两个变量目录,分别是host_vars 和 group_vars
    group_vars 目录下必须存放的是和inventory清单文件中定义的组名一致
    
    cat /etc/ansible/hosts
    [webservers]
    web01 ansible_ssh_host=172.16.1.7
    web02 ansible_ssh_host=172.16.1.8
    [mysql]
    mysql01 ansible_ssh_host=192.168.1.85
    
    cat /etc/ansible/group_vars/webservers #只针对/etc/ansible/hosts定义的webservers主机生效
    web_package: nginx
    ftp_package: vsftpd
    
    cat /etc/ansible/group_vars/all  #对/etc/ansible/hosts定义的所有主机都生效
    httpd_package: httpd
    
    cat /etc/ansible/host_vars/mysql
    mysql_package: mysql
    
    注意:系统提供了特殊的组,"all",也就是说在group_vars目录下创建一个all文件,定义变量对所有的主机都生效
    host_vars目录下存放的是某个host所需要定义的变量,这个变量优先级会高于group_vars 中定义的变量
    
    2.5 通过命令行覆盖变量
    通过命令行覆盖变量,inventory的变量会被playbook文件中覆盖,这两种方式的变量都会被命令行直接指定的变量覆盖,使用参数--extra-vars或-e设定变量
    ansible-playbook test.yml -e "web_package=nginx" -e "ftp_package=vsftpd"
    
    2.6 ansible变量层级定义
    
    vi vars02.yaml
    rainbow:
      web:
        web_package: httpd
        db_package: mariadb-server
        ftp_package: vsftpd
    code:
      web:
        filename: code_web_filename
    
    在配置playbook中引用:
    - hosts: webservers
      vars_file: vars02.yml
      tasks:
        - name: install package
          yum: name= "{{ rainbow.we.web_package }}"
        - name:
          file: path="{{ code.web.filename}}" state=touch
  • 相关阅读:
    深入浅出 Java Concurrency (7): 锁机制 part 2 AQS[转]
    深入浅出 Java Concurrency (6): 锁机制 part 1[转]
    深入浅出 Java Concurrency (5): 原子操作 part 4[转]
    深入浅出 Java Concurrency (4): 原子操作 part 3 指令重排序与happens-before法则[转]
    深入浅出 Java Concurrency (3): 原子操作 part 2[转]
    深入浅出 Java Concurrency (2): 原子操作 part 1[转]
    深入浅出 Java Concurrency (1) : J.U.C的整体认识[转]
    深入浅出 Java Concurrency
    读书笔记--模式与重构 目录
    SpringMVC,3种不同的URL路由配置方法 [转]
  • 原文地址:https://www.cnblogs.com/skyzy/p/16890945.html
Copyright © 2020-2023  润新知