ansible基础

安装

yum -y install epel-release
yum -y install ansible

配置文件

inventory = /etc/ansible/hosts   #这个参数表示资源清单inventory文件的位置
library = /usr/share/ansible     #指向存放Ansible模块的目录,支持多个目录方式,只要用冒号(:)隔开就可以
forks = 5                        #并发连接数,默认为5
sudo_user = root                 #设置默认执行命令的用户
remote_port = 22                 #指定连接被管节点的管理端口,默认为22端口,建议修改,能够更加安全
host_key_checking = False        #设置是否检查SSH主机的密钥,值为True/False。关闭后第一次连接不会提示配置实例
timeout = 60                     #设置SSH连接的超时时间,单位为秒
log_path = /var/log/ansible.log  #指定一个存储ansible日志的文件(默认不记录日志)

命令

/usr/bin/ansible  Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行
/usr/bin/ansible-doc   Ansible 模块功能查看工具
/usr/bin/ansible-galaxy  下载/上传优秀代码或Roles模块 的官网平台,基于网络的
/usr/bin/ansible-playbook  Ansible 定制自动化的任务集编排工具
ansible-doc -l #获取全部模块的信息
ansible-doc -s MOD_NAME #获取指定模块的使用帮助

例如:

ansible-doc -l |grep mysql
mysql_db Add or remove MySQL databases from a remote...
mysql_replication Manage MySQL replication
mysql_user Adds or removes a user from a MySQL databas...
mysql_variables Manage MySQL global variables
[root@server ~]# ansible-doc -s mysql_user
hosts
test01     ansible_host=x.x.x.x    ansible_user=ansible
主机别名       ip
#1.生成私钥
[root@server ~]# ssh-keygen
#2.向主机分发私钥
[root@server ~]# ssh-copy-id root@192.168.37.122
-bash: ssh-copy-id: command not found
少包
yum -y install openssh-clientsansible
authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥
    id_rsa : 生成的私钥文件
    id_rsa.pub : 生成的公钥文件
    know_hosts : 已知的主机公钥清单
    如果希望ssh公钥生效需满足至少下面两个条件:
      1) .ssh目录的权限必须是700
      2) .ssh/authorized_keys文件权限必须是600
ansible_host # 远程主机
ansible_port # 指定远程主机ssh端口
ansible_user # ssh连接远程主机的用户,默认root
ansible_ssh_pass # 连接远程主机使用的密码,在文件中明文,建议使用--ask-pass或者使用SSH keys
ansible_sudo_pass # sudo密码, 建议使用--ask-sudo-pass
ansible_connection # 指定连接类型: local, ssh, paramiko
ansible_ssh_private_key_file # ssh 连接使用的私钥
ansible_shell_type # 指定连接对端的shell类型, 默认sh,支持csh,fish
ansible_python_interpreter # 指定对端使用的python编译器的路径


ansible <host-pattern> [-f forks] [-m module_name] [-a args]
          机器分组     并发运行数     选择模块        参数
-a MODULE_ARGS   #模块参数
-C, --check  #检查语法
-f FORKS #并发
--list-hosts #列出主机列表
-m MODULE_NAME #模块名字
-b,--become:特权方式运行命令。等同于添加 ‘sudo:’ 或 ‘su:’ ,默认为sudo
-o 使用精简的输出
ansible-playbook --syntax-check  xxx.yml    检查语法错误
ansible-galaxy init  role名称     生成role

例子:
ansible webservers -m command -a "ss -ntlp"
ansible webservers -m  ping
# 匹配apache组中有,但是nginx组中没有的所有主机
[root@ansible ~]# ansible 'apache:!nginx' -m ping -o
# 匹配apache组和nginx组中都有的机器(交集)
[root@ansible ~]# ansible 'apache:&nginx' -m ping -o
# 匹配apache组nginx组两个组所有的机器(并集);等于ansible apache,nginx -m ping
[root@ansible ~]# ansible 'apache:nginx' -m ping -o

playbook

Ansible的与节点有关的重要术语包括控制节点,受管节点,清单和主机文件:

控制节点(Control node):指安装了Ansible的主机,也叫Ansible服务器端,管理机。 Ansible控制节点主要用于发布运行任务,执行控制命令。Ansible的程序都安装在控制节点上,控制节点需要安装Python和Ansible所需的各种依赖库。注意:目前Ansible还不能安装在Windows下。

受控节点(Managed nodes):也叫客户机,就是想用Ansible执行任务的客户服务器。

清单(Inventory):受控节点的列表,就是所有要管理的主机列表。

host文件:清单列表通常保存在一个名为host文件中。在host文件中,可以使用IP地址或者主机名来表示具体的管理主机和认证信息,并可以根据主机的用户进行分组。缺省文件:/etc/ansible/hosts,可以通过-i指定自定义的host文件。

模块(Modules):模块是Ansible执行特定任务的代码块。比如:添加用户,上传文件和对客户机执行ping操作等。Ansible现在默认自带450多个模块,Ansible Galaxy公共存储库则包含大约1600个模块。

任务(Task):是Ansible客户机上执行的操作。可以使用ad-hoc单行命令执行一个任务。

剧本(Playbook):是利用YAML标记语言编写的可重复执行的任务的列表,playbook实现任务的更便捷的读写和贡献。比如,在Github上有大量的Ansible playbooks共享。

角色(roles):角色是Ansible 1.2版本引入的新特性,用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。

playbooks的组成部分
Target section: 定义要运行playbook的远程主机组
hosts: hosts用于指定要执行指定任务的主机,其可以是一个或多个由冒号分隔主机组
user: 指定远程主机上的执行任务的用户,还可以指定sudo用户等
Variable section: 定义playbook运行时使用的变量
Task section: 定义要在远程主机上运行的任务列表
name: 每个任务都有name,建议描述任务执行步骤,未通过name会用执行结果作为name
'module:options': 调用的module和传入的参数args
Handler section: 定义task完成后需要调用的任务
notify: 在Task Section在每个play的最后触发,调用在hendler中定义的操作
handler: 也是task的列表

playbook执行不指定默认使用ansible/roles/下面的角色,可以编辑/etc/ansible/ansible.cfg配置文件,设置roles_path
如testrole,一般建以下目录
defaults files handlers meta tasks templates vars

变量,优先级按 调用playbook时使用"-e"选项传入参数>>>>> vars/main.yml >>> 指定 >>>>defaults/main.yml
ansible-playbook -e testvar=‘usethis’ test.yml
主机变量的优先级低于vars/main.yml
在默认情况下,角色中的变量是全局可访问的,可将变量变成角色私有的,设置/etc/ansible/ansible.cfg文件,将private_role_vars的值设置为yes

- hosts: test70
  roles:
  - role: testrole
    vars:
      testvar: "www.baidu.com"

默认情况下,playbook只会调用一次同一角色
要多次调用同一个角色,有两种方法,如下:
方法一:设置角色的allow_duplicates属性 ,让其支持重复的调用。
方法二:调用角色时,传入的参数值不同。

方法一需要为角色设置allow_duplicates属性,而此属性需要设置在meta/main.yml文件中,所以我们需要

在testrole中创建meta/main.yml文件,写入如下内容:
allow_duplicates: true

方法二

- hosts: test70
  roles:
  - role: testrole
    vars:
      testvar: "aaaaa"
  - role: testrole
    vars:
      testvar: "bbbbb"

templates

testrole中需要使用一个名为test.conf.j2的模板文件,那么我们就将test.conf.j2文件放置在testrole/templates/目录中,test.conf.j2文件内容如下,可以引用变量

something in template
woshigetemplate;
{{ template_var }}      ##配置文件可以引入变量增加灵活性

模板文件中使用到了 template_var变量,我们可以为 template_var变量定义一个默认变量

template_var: "template"

- name: test_handler
  debug:
    msg: "zhixingchenggong"

一个task

- debug:
    msg: "hello {{testvar}}!"
- template:
    src: test.conf.j2
    dest: /opt/test.conf         ###类似于复制
  changed_when: true            ##类似于判断机制,上面的执行成功则执行下面的notify
  notify: test_handler
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值