云计算百科
云计算领域专业知识百科平台

20260113Linux学习笔记

一、部署文件到受管主机

红帽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'

赞(0)
未经允许不得转载:网硕互联帮助中心 » 20260113Linux学习笔记
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!