Ansible组件

Ansible Inventory

  • Inventory文件位置定义

      # ANSIBLE_HOSTS环境变量
      exporter ANSIBLE_HOSTS=/etc/ansible/hosts
      # ansibele.cfg内部指定
      inventory = /etc/ansible/hosts
      # 运行ansible或ansible-playbook用-i参数指定
      ansible -i hosts ...
      ansible-playbook -i hosts ...
    
  • 定义主机和主机组

      # 主机定义,使用inventory内置变量定义ssh登陆密码
      1 172.17.42.101 ansible_ssh_pass ='123456'
      2 172.17.42.102 ansible_ssh_pass ='123456'
    
      # 定义组docker,下面四台机器172.12.42.101~172.12.42.103
      3 [docker]
      4 172.17.42.10[1:3]
      # 针对docker组,使用inventory内置变量定义了ssh登陆密码
      5 [docker:vars]
      6 ansible_ssh_pass ='123456'
    
      # 定义了一个组ansible,包含docker组
      7 [ansible:children]
      8 docker
    
  • 多个inventory文件

    修改ANSIBLE_HOSTS环境变量或者修改ansible.cfg,此时使用目录即可,目录下可以存放不同主机 测试下来,必须放到inventory目录下;或者放在playbook目录下,-i指定

      # ANSIBLE_HOSTS环境变量
      exporter ANSIBLE_HOSTS=/root/inventory
      # ansibele.cfg内部指定
      inventory = /root/inventory
    

    比如:

      [root@Master ~ ]# cat inventory/hosts
      172.17.42.101 ansible_ssh_pass ='123456'
      172.17.42.102 ansible_ssh_pass ='123456'
      
      [root@Master ~ ]# cat inventory/docker
      [docker]
      172.17.42.10[1:3]
      [docker:vars]
      ansible_ssh__pass ='123456'
      [ansible:children)
      docker
    
  • 动态inventory

    将ansible.cfg配置文件中inventory定义成一个脚本即可. 该脚本必须支持2个参数:–list、–host
    或 运行ansible、ansible-playbook命令是-i + 脚本名字.

    #!/usr/bin/python  # 必须加上,否则会被解析为ini文本
    # coding:utf-8
    
    '''
    动态inventory:
    
    a) 需要支持两个参数,--list(返回组包含的主机列表hosts、主机组变量vars、子组列表children、_meta存放主机变量)
    '''
    
    import json
    import sys
    
    
    def groups():
    	'''groups信息:包含主机列表,组变量,子组等信息'''
    	host_list = ["172.22.12." + str(i) for i in range(11,14)]
    	r = dict()
    	r['docker'] = {'hosts':host_list[0:1]}
    	r['web'] = {'hosts':host_list[1:]}
    	print json.dumps(r, indent=4)
    
    
    def hosts(name):
    	'''hosts信息:包含主机变量'''
    	host_var = { 
        	"172.22.12.11":{"ansible_ssh_port":21},
        	"172.22.12.12":{"ansible_ssh_port":22},
        	"172.22.12.13":{"ansible_ssh_port":23}
        	}.get(name)
    	print json.dumps(host_var, indent=4)
    
    
    
    def main():
    	if len(sys.argv) == 2 and sys.argv[1] == "--list":
        	groups()
    	elif len(sys.argv) == 3 and sys.argv[1] == "--host":
        	hosts(sys.argv[2])
    	else:
        	print "Usage: {} --list or --host <hostname>".format(sys.argv[0])
    
    
    if __name__ == "__main__":
    	main()
    ```
    	
    
  • Inventory参数说明

    变量 说明
    ansible_ssh_host 将要连接的远程主机名.
    ansible_ssh_port ssh端口号
    ansible_ssh_user ssh用户名
    ansible_ssh_pass ssh密码,建议使用–ask-pass或ssh密钥
    ansible_sudo_pass sudo密码,建议使用–ask-sudo-pass
    ansible_sudo_exe sudo命令路径(适用V1.8及以上)
    ansible_connection 与主机连接的类型,比如 local、ssh、paramiko;ansible以前默认使用paramiko,以后默认使用 ‘smart’,‘smart’ 方式会根据是否支持 ControlPersist, 来判断’ssh’ 方式是否可行
    ansible_ssh_private_key_file ssh使用的私钥文件
    ansible_shell_type 目标系统的shell类型,命令的执行使用’sh’语法,可设置为’csh’或’fish’
    ansible_python_interpreter 目标主机的python路径

    定义主机和组变量的方式:
    a) /etc/ansible/group_vars/组名 /etc/ansible/host_vars/主机名
    b) /etc/ansible/group_vars/组名/{文件1,文件2} # 文件1、文件2中的变量都可以被加载;环境比较复杂时,这种管理方式更好

  • patterns(匹配执行任务的主机)
    下面列举一些常见的匹配条件:

      all:匹配所有主机   // ansible和ansible-playbook都支持
      
      webservers:dbservers:冒号表示或的关系,表示主机可以存在于多个group中   ansible和ansible-playbook都支持
      webservers:!phoenix:表示属于webservers组,不属于phoenix组的主机   ansible-playbook支持
    
      webservers:&staging:交集,表示同时属于webservers和staging组的主机  ansible-playbook支持
      webservers:dbservers:&staging:!phoenix:webserver和dbservers两个组中,隶属于staging组,不属于phoenix组的主机  ansible-playbook支持
    
      ~(web|db).*\.example\.com:正则  ansible-playbook支持
    

Ansible Ad-Hoc命令
ansible-doc -l查看所有自带模块,目前有259个命令
ansible-doc 模块名,查看模块使用方法

  • 执行命令

    ansible命令是并发执行的,并发数由ansible.cfg中的forks值控制、或者运行命令时通过-f参数指定.

    ansible允许异步执行任务,对于执行时间很长的任务,下发任务后每过一段时间轮询获取任务结果.

      # 异步任务超时时间为120s 每个-P参数后秒数轮询获取结果,-P + 0 表示不关心任务结果
      ansible docker -B 120 -P 0 -m shell -a 'sleep 10;hostname' -f 5 -o
    
  • 复制文件

    copy模块批量下发文件,文件变化通过MD5值判断.

      ansible docker -m copy -a 'src=hosts.py dest=/root/hosts.py owner=root group
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值