无法上传图片
一、程序主要文件:
ansible
ansible-playbook
ansible-doc
二、程序发布:
要求:
1.不能影响用户体验
2.系统不能停机
3.不能导致系统故障或造成系统完全不可用。
发布路径:
/webapps/tuangou
/webapps/tuangou-1.1
/webapps/tuangou-1.2.
在调度器上下线一批主机(标记为维护模式)–>关闭服务–>部署新版本–>启动服务–>在调度器上启用这一批主机;
三、相关配置文件
配置文件:
/etc/ansible/ansible.cfg
主机清单:
/etc/ansible/hosts
插件目录:
/usr/share/ansible_plugins/
基于秘钥验证:(1)ssh-keygen -t rsa -P '' (2)家目录下ssh-copy-id -i .ssh/id_rsa.pub root@10.1.44.2
ansible命令:
Usage:ansible <host-pattern> [options]
四、常用选项:
-m MOD_NAME -a MOD_ARGS
配置
ansible-doc -l列出模块
ansible-doc -s列出简短信息
1.ansible ping 测试主机是否在线
2.command在远程主机执行命令
3.shell:在远程主机调用shell解释器运行命令,支持shell的各种功能,例如“管道”
注意:command和shell模块的核心参数直接为命令本身;而其它模块的参数通常
为“key=value”格式;
4.copy复制ansible主机文件到远程主机
ansible all -m copy -a "src=/etc/fstab dest=/tmp/fstab.ansible"
5.file
用法:
(1)创建目录
-a "path= state=directory"
(2)创建链接文件
-a "path= src= state=link"
(3)删除文件
-a "path= state=absent"
修改属主
删除文件
创建链接文件
ansible all -m file -a "path=/tmp/ystab.ansible.link src=/tmp/ystab.ansible state=link"
6.fetch:从远程一台主机上获取文件
7.cron 计划任务
删除任务ansible all -m cron -a "name='sync time' state=absent"
8.hostname
name
9.yum:安装软件
(1)name= state={present|latest}
(2)
ansible all -m yum -a "name=httpd"
ansible all -m yum -a "name=httpd state=absent"卸载
10.service
name=
state= {started|stoped|restarted}
enabled= 开机是否自启动
11.group
gid name= state system
12.user
group基本组 groups附加组
name=
group=
groups=
comment=
13.setup 用于收集远程的
ansible 10.1.44.4 -m setup 显示键值对
YAML:模板语言
数据结构:
key:value
-item 1
-item 2
-item 3
字典{name:jerry,age:21}
playbook
核心元素:
task:任务,由模块定义的操作的列表;
Variables:变量
Templates:模板,即使用了模板语法的文本文件;
Handlers:由特定条件触发的Tasks;
Roles:角色
playbook的基本组件:
Hosts:运行指定任务的目标主机
remote_user:在远程主机以哪个用户身份执行
sudo_user:非管理员需要拥有sudo权限
tasks:任务列表
模块,模块参数
格式:(1)action:module arguments (2)module:arguments
例子:(1)编辑“剧本”
(2)测试:ansible-playbook –check group.yaml
(3)检测会对哪些主机造成影响
(4)看执行的任务
运行playbook,使用ansible-playbook命令
(1)检测语法
ansible-playbook –syntax-check *.yaml
(1)测试运行
ansible-playbook -C /path/to/playbook.yaml
–list-hosts
–list-tasks
–list-tags
(2)运行
ansible-playbook /path/to/playbook.yaml
-t TAGS,–tags=TAGS
–skip-tags=SKIP_TAGS
–start-at-task=START_AT
例子2:开启远程主机的8080端口
前提要做的是:关闭服务,并卸载。
ansible websrvs -m yum -a "name=httpd state=absent"
(1)剧本文件
(2)准备好要复制至远程主机的文件
(3)测试
(4)结果
例子3:现将本机的配置文件又改回80端口,重新执行了上次的文件后,发现远程主机的端口并未改变。那么要想使得远程主机的监听端口的为80,则还需要进行重启操作。现在引入handlers
配置文件如下
tags:给指定任务一个标识,便于只执行该任务。
-name:NAME
module:arguments
tags:TAG_ID
ansible-playbook –check -t instconf –list-tags web.yaml
ansible-palybook -t instconf web.yaml
Variables:
类型:
内建:
(1)facts:
调用:{{ var_name }}
自定义:
(1)命令行传递;
-e VAR=VALUE
(2)在hosts inventory中为每个主机定义专用变量值;
(a)向不同的主机传递不同的变量:
IP/HOSTNAME variable_name=value
(b)向组内的所有主机传递相同的变量
[groupname:vars]
variable_name=value
(3)在playbook中定义
vars:
-var_name:value
-var_name:value
(4)Inventory还可以使用参数
用于定义ansible远程连接目标主机时的使用的属性,而非传递给playbook的变量;ansible_ssh_host ansible_ssh_port ansible_ssh_user
示例1:(1)编辑配置文件vim pkg.yaml
(2)测试,使用-e 来传递变量名
示例2:在文件提前定义变量
此时直接使用测试命令:ansible-playbook –check pkg.yaml不加参数也可以。
若不想使用之前定义的变量名:可以使用-e进行替换变量名。
(2)host文件中定义的内容
Templates:模板
执行模板文件中的脚本,并生产结果数据流,需要使用template模板
template:
-a ""
注意此模板只能使用与playbook
示例1:(1)复制一份nginx的配置文件到/root下。重命名后为nginx.conf.j2,其部分配置内容如下
(2)vim test.yaml
(3)ansible-playbook –check test.yaml
(4)实际运行后,远程主机的配置文件的结果如下worker_processes 1;
示例2:
– hosts:ngxsrvs
remote_user: root
task:
– name: install nginx package
yum:name=nginx state=latest
– name:install conf file
template:src=/root/nginx.conf.j2 dest=/etc/nginx/nginx.conf
tags:ngxconf
notify:reload nginx service
– name:start nginx service
service:name=nginx state=started enabled=true
handlers:
-name:reload nginx service
shell :/usr/sbin/nginx -s reload
条件测试:
when语句:在task中定义
循环:迭代,需要重复执行的任务
对迭代项的引用,固定变量名为"item",使用with_item属性给定要迭代的元素;
元素:字符串,字典
基于列表给出元素示例:
基于字典列表给元素示例:
角色:roles
以特定的层级目录结构进行组织的tasks、variables、handlers、templates、file
role_name/
file/:存储由copy或script等模块调用的文件;
tasks/:此目录中至少应用一个名为main.yml的文件,用于定义各task;其它的文件需要由main.yml进行“包含”调用;
handlers/:此目录中至少应用一个名为main.yml的文件,用于定义各handlers;其它的文件需要由main.yml进行“包含”调用;
vars/:此目录中至少应用一个名为main.yml的文件,用于定义各variable;其它的文件需要由main.yml进行“包含”调用;
templates/:存储由template模块调用的模板文本;
meta/:此目录中至少应用一个名为main.yml的文件,用于定义当前角色的特殊设定及其依赖关系;其它的文件需要由main.yml进行“包含”调用;
default/:此目录中至少应该有一个名为main.yml的文件,用于设定默认变量。
mkdir ./{nginx,memcached,httpd,mysql}/{files,templates,vars,handlers,meta,default,tasks} -pv
原创文章,作者:178babyhanggege,如若转载,请注明出处:http://www.178linux.com/58594