一、部署文件到受管主机
红帽Ansible引擎本身内置附带了大型模块集合(模块库),Files 模块库包含的模块允许您完成与Linux文件管理相关的大多数任务,如创建、复制、编辑和修改文件的权限和其他属性,下表列出了常用的Files模块库中使用的模块。
file:设置权限、所有权、SELinux上下文以及常规文件、符号链接、硬链接和目录的时间戳等属性。此模块还可以创建或删除常规文件、符号链接、硬链接和目录。
sefcontext,设置持久selinux上下文。
lineinfile:确保特定行位于某个文件中,或使用反向引用正则表达式来替换现有行。
replace:查找文件中行,一次性替换成对应内容。
blockinfile:插入、更新或删除多行文本块。
stat:检索文件的状态信息,类似于Linux stat命令。
copy:将文件从本地或远程计算机复制到受管节点上的某个位置。
synchronize:围绕rsync命令的一个程序,可加快和简化常见任务。
fetch:用于从远程计算机获取文件到控制节点。
1.file 模块
#创建文件
vim touch.yaml
—
– hosts: node1
gather_facts: no
tasks:
– name: Touch a file and set permissions
file:
path: /tmp/testfile
owner: zhangzhe
group: wheel
mode: 0640
state: touch
…
#验证
ansible-playbook touch.yaml
#创建目录
vim mkdir.yaml
—
– hosts: node1
gather_facts: no
tasks:
– name: create directory
file:
path: /webdev
owner: zhangzhe
group: wheel
mode: 0755
state: directory
…
#验证
ansible-playbook mkdir.yaml
#删除文件
vim rm.yaml
—
– hosts: node1
gather_facts: no
tasks:
– name: delete file
file:
path: /tmp/testfile
state: absent
…
#验证
ansible-playbook rm.yaml
2.lineinfile模块
#在文件中插入行
vim lineinfile.yaml
—
– hosts: node1
gather_facts: no
tasks:
– name: add line
lineinfile:
path: /webdev/testfile
line: 'zhangzhe'
#insertbefore在目标前插入,insertafter在目标后插入
insertafter: 'hello world1'
state: present
…
#验证
ansible-playbook lineinfile.yaml
3.replace模块
#匹配内容全部替换
vim replace.yaml
—
– hosts: node1
gather_facts: no
tasks:
– name: replace multi line
replace:
path: /webdev/testfile
regexp: 'old line'
replace: 'new line'
…
#验证
ansible-playbook replace.yaml
4.copy模块
#将控制节点上的文件拷贝到受管理节点,类似于Linux中scp命令
vim copy.yaml
—
– hosts: node1
gather_facts: no
tasks:
– name: copy /home/zhangzhe/webapp/inventory to remote node
copy:
src: /home/zhangzhe/webapp/inventory
dest: /webdev
…
#验证
ansible-playbook copy.yaml
二、管理变量
ansible 利用变量来存储数据,以便在Ansible项目文件中重复引用,有利于简化项目的创建和维护,降低出错率。我们在playbook中可以针对如用户、软件包、服务、文件等进行变量定义。
变量范围和优先级
ansible项目文件中多个位置支持定义变量,主要包含三个基本范围:
Global scope:从命令行或 Ansible 配置设置的变量。
Play scope:在play和相关结构中设置的变量。
Host scope:由清单、事实(fact)收集或注册的任务,在主机组和个别主机上设置的变量。
优先级从高到低顺序:Global > Play > Host。
在多个级别上定义了相同名称的变量,则采用优先级别最高的变量。
1.Global scope
#通过选项 -e 传递给ansible或ansible-playbook命令
ansible node1 -m debug -a "msg={{ package }}" -e "package=httpd"
node1 | SUCCESS => {
"msg": "httpd"
}
ansible node1 -m yum -a "name={{ package }} state=present " -e "package=httpd"
node1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"msg": "",
"rc": 0,
"results": [
"httpd-2.4.6-99.el7.centos.1.x86_64 providing httpd is already installed"
]
}
2.Play scope
# vars 声明
vim vars.yaml
—
– name: test vars statement in play
hosts: node1
vars:
user: joe
home: /home/joe
tasks:
– name: add user {{ user }}
user:
#:后跟 {{ 变量 }} 需要带双引号“”
name: "{{ user }}"
home: "{{ home }}"
state: present
– name: debug user
debug:
msg: |
username is {{ user }}
home is {{ home }}
…
#验证
ansible-playbook vars.yaml
# vars_files 声明
#如果变量比较多,我么可以使用变量文件进行分类,然后分列别应用到playbook中。
vim user1.yaml
user: user1
home: /home/user1
vim vars_file.yaml
—
– name: test vars statement in play
hosts: webs
#vars_files:
# – /home/zhangzhe/webapp/user1.yaml
tasks:
– name: add user {{ user }}
user:
name: "{{ user }}"
#home: "{{ home }}"
state: present
– name: debug user
debug:
msg: >
username is {{ user }}
#home is {{ home }}
…
#验证
ansible-playbook vars_file.yaml
3.Host scope
主机变量应用于主机和主机组。主机变量优先级高于主机组变量。
#主机清单中定义
vim inventory
[webs]
node1 user=zhangsan
node2
[webs:vars]
user=lisi
#验证
ansible webs -m debug -a ' msg="hello,{{ user }}"'
4.目录分层结构定义
cat inventory
[controllers]
controller
[webs]
node1
node2
[dbs]
node3
node4
[nodes]
node[1:4]
mkdir host_vars group_vars
echo "user: laoma" > host_vars/node1.yml
echo "user: laowang" > group_vars/webs.yml
#验证
ansible nodes -m debug -a ' msg="hello,{{ user }}"'
5.数组变量
vim shuzu.yaml
—
– name: test vars statement in play
hosts: node1
vars:
users:
laoma:
user_name: laoma
home_path: /home/laoma
laowang:
user_name: laowang
home_path: /home/laowang
tasks:
– name: add user {{ users.laoma.user_name }}
user:
name: '{{ users.laoma.user_name }}'
home: "{{ users.laoma.home_path }}"
– name: debug laowang
debug:
msg: >
username is {{ users['laowang']['user_name'] }}
home_path is {{ users['laowang']['home_path'] }}
…
#验证
ansible-playbook shuzu.yaml
6.主机连接特殊变量
ansible_connection,与主机的连接类型,可以是 smart、ssh 或 paramiko。默认为smart。
ansible_host,要连接的主机的名称,默认值就是主机清单名称。
ansible_port,ssh 端口号,如果不是 22。
ansible_user,ssh 用户名。
ansible_ssh_pass,要使用的 ssh 密码。切勿以纯文本形式存储此变量,始终使用保管库。
ansible_ssh_private_key_file,ssh 使用的私钥文件。如果使用多个密钥并且您不想使用SSH 代理,这很有用。
ansible_ssh_common_args,此设置始终附加到 sftp、scp 和 ssh 的默认命令行。
ansible_sftp_extra_args,此设置始终附加到默认的 sftp 命令行。
ansible_scp_extra_args,此设置始终附加到默认的 scp 命令行。
ansible_ssh_extra_args,此设置始终附加到默认的 ssh 命令行。
ansible_become,等效于 ansible_sudo 或 ansible_su,允许强制提权。
ansible_become_method,允许设置权限提升方法。
ansible_become_user,等效于 ansible_sudo_user 或 ansible_su_user,允许设置您通过权限升级成为的用户。
ansible_become_pass,等效于 ansible_sudo_pass 或 ansible_su_pass,允许您设置权限提升密码(切勿以纯文本形式存储此变量;始终使用保管库。请参阅变量和保管库)。
7.MAGIC 变量
magic 变量由 Ansible 自动设置,可用于获取与特定受管主机相关的信息。
#最常用的四个Magic变量
ansible node1 -m debug -a 'var=inventory_hostname'
ansible node1 -m debug -a 'var=group_names'
ansible node1 -m debug -a 'var=groups'
ansible node1 -m debug -a 'var=hostvars'
网硕互联帮助中心







评论前必须登录!
注册