ansible
rpm -ql ansible 查看安装文件 /usr/bin/ansible 主程序 ansible --key-file=/root/id_rsa all -m ping #all Inventory主机清单里面所有的主机 ansible配置文件详解 [defaults] #通用默认配置 inventory = /etc/ansible/hosts #被控制端IP或者DNS列表 library = /usr/share/my_modules/ ##默认搜寻模块的位置 remote_tmp = ~/.ansible/tmp #远程执行临时文件 local_tmp = ~/.ansible/tmp plugin_filters_cfg = /etc/ansible/plugin_filters.yml forks = 5 ##并行线程数 poll_interval = 15 ##回频率或轮询间隔时间 sudo_user = root ##sudo远程执行用户名 ask_sudo_pass = True ##使用sudo,是否需要输入密码 ask_pass = True ##是否需要输入密码 transport = smart ##通信机制 remote_port = 22 ##远程SSH端口 module_lang = C ##模块和系统之间通信的语言 module_set_locale = False gathering = implicit ##控制默认facts收集(远程系统变量) gather_subset = all gather_timeout = 10 roles_path = /etc/ansible/roles ##使用playbook搜索Ansible roles host_key_checking = False ##是否检查远程主机密钥 sudo_exe = sudo ##sudo远程执行命令 sudo_flags = -H -S -n ##传递sudo之外的参数 timeout = 10 ##SSH超时时间 remote_user = root ##远程登录用户名 log_path = /var/log/ansible.log ##日志文件存放路径 module_name = command ##Ansible命令默认执行的模块 executable = /bin/sh ##执行的shell环境,用户shell模块 hash_behaviour = replace ##特定的优先级覆盖变量 jinja2_extensions = jinja2.ext.do,jinja2.ext.i18 ##允许开启jinja2扩展模块 private_key_file = /path/to/file ##私钥文件存储位置 display_skipped_hosts = True ##显示跳过任何任务的状态 system_warnings = True ##禁用系统运行Ansible潜在问题警告 deprecation_warnings = True ##PlayBook输出禁用“不建议使用”警告 command_warnings = False ##command模块Ansible默认发出警告 nocolor = 1 ##输出带上颜色区别,0表示开启,1表示关闭 pipelining = False ##开启pipe SSH通道优化 [accelerate] ##accelerate缓存加速 accelerate_port = 5099 ##加速连接端口5099 accelerate_timeout = 30 ##命令执行超过时间,单位为s accelerate_connect_timeout = 5.0 ##上一个活动连接的时间,单位为min accelerate_daemon_timeout = 30 ##允许多个私钥被加载到daemon accelerate_multi_key = yes ##任何客户端想要连接daemon都要开启这个选项
? ansible 主机清单匹配规则: all 表示主机清单所有主机 ansible all -m ping
* 通配符(机清单) ansible "*" -m ping ansible 192.168.1.* -m ping ansible "*svr" -m ping 或关系 ansible web:db -m ping ansible 192.168.1.1:192.168.1.22 -m ping 逻辑与(交集) ansible "web:&db" -m ping # 在web组并且在db组中的机器 逻辑非 ansible ‘web:!db‘ -m ping # 在web组中,但是不在db组中的机器 需要用单引号 正则 ansible "~(web|db)..hh.com" -m ping
sudo 连接方式:
[[email?protected] ~]# ansible all -m command -a "ls -lh" -u kuwo -k -b -K #-b sudo用户,默认配置文件为root -K sudo密码
SSH password:
SUDO password[defaults to SSH password]:
ansible all -m ping -u kuwo -k -b --become-user mgpj #以kuwo sudo 切换至mgpj用户执行ping
ansible all -m ping -u kuwo --become-user=root -a "ls -l" mgpj #以kuwo sudo 切换至 root用户执行ping
? 常用模块 ping模块 [[email?protected] ~]# ansible -uroot --key-file=/root/id_rsa all -m ping ? -m command 模块 默认模块 <>|;& $ 这些特殊字符command不支持
-m fetch 模块 拷贝客服端的文件到服务器,只支持一个文件拷贝 目录可以先tar -m file 模块 创建文件设置文件属性 -m user 模块 ?
? 主机清单中指定单独主机执行ansible? 使用参数 --limit? ansible all --key-file=/root/id_rsa -m hostname -a ‘name=node‘ --limit 172.168.1.112 ansible all --key-file=/root/id_rsa -m hostname -a ‘name=node‘ --limit all #指定组名也可以的
? ansible? ?playbook 使用的yaml 或者 yml 文件: test.yml文件 - hosts: all become: yes #是否允许身份切换 become_method: sudo #切换用户身份的方式,有sudo、su、pbrun等方式,默认为sudo tasks: - name: create file #remote_user: test #become: yes #是否允许身份切换 #become_method: sudo #切换用户身份的方式,有sudo、su、pbrun等方式,默认为sudo #become_user: test #切换指定的用户 file: name=/opt/test state=touch
? playbook 之 notify 和 handlers?配合使用,执行yml文件的时候,里面内容会自动执行;?notify 当某文件程序目录发生变化的时候 通知handlers处理, - hosts: all become: yes #是否允许身份切换 become_method: sudo #切换用户身份的方式,有sudo、su、pbrun等方式,默认为sudo tasks: - name: create file #remote_user: test #become: yes #是否允许身份切换 #become_method: sudo #切换用户身份的方式,有sudo、su、pbrun等方式,默认为sudo #become_user: test #切换指定的用户 file: name=/opt/test state=touch notify: stop httpd #create file执行完后 通知handlers里面的name: stop httpd 做停止服务
ansible-playbook -utest -k test.yml #普通用户执行 ? ?playbook 之 tags:加标签,作用是将来可以调用这个标签里面的内容,多个动作可以用一个标签,也就是标签名相同 - hosts: all become: yes become_method: sudo tasks: - name: create file #remote_user: test #become: yes #become_method: sudo #become_user: test file: name=/opt/test state=touch #notify: stop httpd tags: createfile #定义标签 - name: create user user: name=newusers2 system=yes shell=/sbin/nologin notify: - restart httpd - stop httpd - name: install httpd yum: name=httpd ansible-playbook --key-file=/root/id_rsa test.yml -t starthttpd? ? #-t starthttpd? ? ?指定标签名 ? playbook之变量 ansible all --key-file=/root/id_rsa -m setup #查看系统变量,这些变量都是可以直接拿到playbook里面直接使用的 参数 -e - hosts: all become: yes become_method: sudo tasks: - name: create user user: name={{ arg }} system=yes shell=/sbin/nologin
? /etc/ansible/hosts 在主机清单中定义变量,可以定义主机变量 和 公共变量 普通变量:单一的单个主机有效,优先级比公共变量高 /etc/ansible/hosts 文件中组db里面的172.168.1.112 定义了一个单一变量 hostname [db] 172.168.1.112 hostname=node1 #定义个hostname变量 yml内容: - hosts: all become: yes become_method: sudo tasks: - name: hostname
hostname: name={{ hostname }} #ansible-playbook --key-file=/root/id_rsa test2.yml #执行后 就修改主机名为node1
? 公共变量(组变量):针对一个组的主机定义变量 /etc/ansible/hosts 文件中组db里面,下面定义个db的组变量 [db] 172.168.1.112 hostname=node1 #定义个单一变量 [db:vars] #对DB组定义了公共变量 host=www domian=com yml文件: - hosts: db become: yes become_method: sudo tasks: - name: hostname
hostname: name={{ host }}.{{ hostname }}.{{domian}} #调用host公共变量 hostname单一变量 domian公共变量
? 通过yml文件定义变量 testvars.yml: #存放变量的文件 var1: open var2: nginx test.yml - hosts: db vars_files: #指定存放变量testvars.yml文件 - testvars.yml tasks: - name: create fiel file: name=/opt/{{ var2 }} state=touch #var2 获取的是 testvars.yml文件的变量
#ansible-playbook --key-file=/root/id_rsa test.yml
? playbook之模版template: 是一个模块? 只能在playbook中使用 1 cp /etc/nginx/nginx.conf ./templates/nginx.conf.j2 #templates 在当前目录下面建立一个templates目录,默认从这个目录查找,如果不是,需要定义绝对路劲 #ansible-playbook --key-file=/root/id_rsa test.yml
? 变量的优先级: 命令-e变量 >? playbook里面定义的变量 > 主机清单里面定义的变量(普通变量>公共变量) playbook 之?when 判断语句 -m setup 查看到各个主机的 ansible_os_family 家庭版本系列 ansible_distribution 系统 ansible_distribution_major_version系统版本 ---
- hosts: db become: yes #是否允许身份切换 become_method: sudo #切换用户身份的方式,有sudo、su、pbrun等方式,默认为sudo vars_files: - testvars.yml tasks: - name: install nginx yum: name=nginx - name: copy file 6 when: ansible_distribution_major_version == "6" #当系统版本是6的时候 拷贝下面文件 template: src=nginx6.conf.j2 dest=/etc/nginx/nginx.conf notify: reload nginx - name: copy file 7 when: ansible_distribution_major_version == "7" #当系统版本是7的时候 拷贝下面文件 template: src=nginx7.conf.j2 dest=/etc/nginx/nginx.conf notify: reload nginx - name: start nginx service: name=nginx state=started enabled=yes handlers: - name: reload nginx service: name=nginx state=restarted
? playbook之with_items 迭代 也就是循环 ---
- hosts: db become: yes #是否允许身份切换 become_method: sudo #切换用户身份的方式,有sudo、su、pbrun等方式,默认为sudo vars_files: - testvars.yml tasks: - name: file
file: name=/opt/{{ item }} state=touch #item 代表with_items里面的值 类似于for 里面的值 when: ansible_distribution_major_version == "7" #如果是7 才执行创建文件 with_items: #相当于是for循环 - file1 - file2 - file3 - file4 - file5 - name: install with_items: - htop - sl - hping3
yum: name={{item}}
? playbook之if 判断 for.yml: ---
- hosts: db become: yes #是否允许身份切换 become_method: sudo #切换用户身份的方式,有sudo、su、pbrun等方式,默认为sudo vars: http: - web1 - web2 service: - db: name1: mysql name2: sqlserver tasks: - name: file template: src=for.conf.j2 dest=/opt/for.conf
? Roles ansible roles 各个目录作用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |