Ansible playbook 编程

主机规划

Ansible playbook 编程

文章插图
 
 
添加用户账号说明:
1、 运维人员使用的登录账号;
2、 所有的业务都放在 /App/ 下「yun用户的家目录」,避免业务数据乱放;
3、 该用户也被 ansible 使用,因为几乎所有的生产环境都是禁止 root 远程登录的(因此该 yun 用户也进行了 sudo 提权) 。
1 # 使用一个专门的用户,避免直接使用root用户2 # 添加用户、指定家目录并指定用户密码3 # sudo提权4 # 让其它普通用户可以进入该目录查看信息5 useradd -u 1050 -d /app yun && echo '123456' | /usr/bin/passwd --stdin yun6 echo "yunALL=(ALL)NOPASSWD: ALL" >>/etc/sudoers7 chmod 755 /app/ 
Ansible 配置清单Inventory之后文章都是如下主机配置清单
1 [yun@ansi-manager ansible_info]$ pwd 2 /app/ansible_info 3 [yun@ansi-manager ansible_info]$ cat hosts_key4 # 方式1、主机 + 端口 + 密钥 5 [manageservers] 6 172.16.1.180:22 78 [proxyservers] 9 172.16.1.18[1:2]:2210 11 # 方式2:别名 + 主机 + 端口 + 密码12 [webservers]13 web01 ansible_ssh_host=172.16.1.183 ansible_ssh_port=2214 web02 ansible_ssh_host=172.16.1.184 ansible_ssh_port=2215 web03 ansible_ssh_host=172.16.1.185 ansible_ssh_port=22 
条件判断-whenwhen 判断在 ansible 任务中的使用频率非常高 。
例如判断主机是否已经安装指定的软件包;对机器的操作系统进行判断然后再根据不同的方法「yum或apt等」进行软件包安装;根据操作系统的版本判断进行软件包的安装「是安装MySQL还是Mariadb」等 。
示例:根据主机名的不同,下载不同的文件
1 [yun@ansi-manager object04]$ pwd 2 /app/ansible_info/object04 3 [yun@ansi-manager object04]$ ll 4 total 4 5 -rw-rw-r-- 1 yun yun 950 Oct 26 10:22 test_when.yml 6 [yun@ansi-manager object04]$ cat test_when.yml7 --- 8 # 根据 hostname 的不同下载不同的图片 9 # 特殊组 all,对所有机器有效10 - hosts: all11 12tasks:13- name: "download picture jvm-01-01.png"14get_url:15url: http://www.zhangblog.com/uploads/jvm/jvm-01-01.png16dest: /tmp/17when: ansible_hostname == "ansi-haproxy01"18 19- name: "download picture jvm-01-02.png"20get_url:21url: http://www.zhangblog.com/uploads/jvm/jvm-01-02.png22dest: /tmp/23when: ansible_hostname == "ansi-haproxy02"24 25- name: "other download picture jvm-01-03.png"26get_url:27url: http://www.zhangblog.com/uploads/jvm/jvm-01-03.png28dest: /tmp/29# 从 facts 中获取的变量,ansible_facts['ansible_hostname'] != "ansi-haproxy01" 错误写法;ansible_hostname != "ansi-haproxy01" 正确写法30#when: (ansible_hostname != "ansi-haproxy01") and (ansible_hostname != "ansi-haproxy02")# 写法一31#或者如下3行列表之间关系是 (and 与)等同于上一行32#when:33#- ansible_hostname != "ansi-haproxy01"34#- ansible_hostname != "ansi-haproxy02"35#when: ansible_hostname is not match "ansi-haproxy0*"# 写法二36when: (ansible_hostname is match "ansi-manager") or (ansible_hostname is match "ansi-web*")# 写法三37 38 [yun@ansi-manager object04]$ ansible-playbook -b -i ../hosts_key --syntax-check test_when.yml# 语法检测39 [yun@ansi-manager object04]$ ansible-playbook -b -i ../hosts_key -C test_when.yml# 预执行,测试执行40 [yun@ansi-manager object04]$ ansible-playbook -b -i ../hosts_key test_when.yml# 执行41 42 PLAY [all] *******************************************************************************************************43 44 TASK [Gathering Facts] *******************************************************************************************45 ok: [web01]46 ok: [web02]47 ok: [web03]48 ok: [172.16.1.180]49 ok: [172.16.1.181]50 ok: [172.16.1.182]51 52 TASK [download picture jvm-01-01.png] ****************************************************************************53 skipping: [172.16.1.180]54 skipping: [web01]55 skipping: [web02]56 skipping: [web03]57 skipping: [172.16.1.182]58 changed: [172.16.1.181]59 60 TASK [download picture jvm-01-02.png] ****************************************************************************61 skipping: [172.16.1.180]62 skipping: [web01]63 skipping: [web02]64 skipping: [web03]65 skipping: [172.16.1.181]66 changed: [172.16.1.182]67 68 TASK [other download picture jvm-01-03.png] **********************************************************************69 skipping: [172.16.1.181]70 skipping: [172.16.1.182]71 changed: [web02]72 changed: [web01]73 changed: [172.16.1.180]74 changed: [web03]75 76 PLAY RECAP *******************************************************************************************************77 172.16.1.180: ok=2changed=1unreachable=0failed=0skipped=2rescued=0ignored=078 172.16.1.181: ok=2changed=1unreachable=0failed=0skipped=2rescued=0ignored=079 172.16.1.182: ok=2changed=1unreachable=0failed=0skipped=2rescued=0ignored=080 web01: ok=2changed=1unreachable=0failed=0skipped=2rescued=0ignored=081 web02: ok=2changed=1unreachable=0failed=0skipped=2rescued=0ignored=082 web03: ok=2changed=1unreachable=0failed=0skipped=2rescued=0ignored=0


推荐阅读