Anableによる自動化構成管理(22.04.15)

10857 ワード

へんすう


変数の定義と参照

template:
  src: foo.cfg.j2
  dest: '{{ remote_install_path }}/foo.cfg'
  name: '{{ abc }}'
  dest: '{{ abc }}/abc.com'
  dest: '{{ abc }}'/abc.com #문법 오류
- hosts: 192.168.100.11
  vars:
    msg: hello world
    
  tasks:
    - debug:
        var: msg
    - debug:
        msg: '{{ msg }} korea'
- hosts: 192.168.100.11
  vars:
    msg: hello world
    web:
      message: hello web
    fruits:
      - apple
      - banana

  tasks:
    - debug:
        msg: '{{ msg }} korea'
    - debug:
        msg: "{{ web['message'] }}"
        #msg: '{{ web["message"] }}' O
        #msg: '{{ web['message'] }}' X
    - debug:
        msg: '{{ fruits[0] }} {{ fruits[1] }}'

変数の登録


登録:変数の登録
- hosts: 192.168.100.11

  tasks:
    - yum:
        name: httpd
        state: installed
      register: yum_result #등록 변수

    - debug:
        var: yum_result
    - debug:
        var: yum_result["rc"]

変数定義の場所

  • ゲームマニュアル
  • 在庫
  • 外部参照ファイル
  • ロール
  • コマンド-eオプション
  • Playbookで変数を定義する


    vars

    - hosts: a
      vars:
        message: hello

    vars_prompt

    ---
    - hosts: 192.168.100.11
      vars_prompt:
        - name: username
          prompt: What is your username?
          private: no
    
        - name: password
          prompt: What is your password?
    
      tasks:
        - debug:
            msg: 'Logging in as {{ username }}, password is {{ password }}'
    リファレンス
    https://docs.ansible.com/ansible/latest/user_guide/playbooks_prompts.html#interactive-input-prompts

    vars_files

    - hosts: a
      vars_files:
        - vars.yaml
    
      tasks:
        - debug:
            var: msg
    vars.yaml
    msg: hello world

    在庫での変数の定義


    変数の範囲
    特定のホストまたはグループに影響
    [nodes]
    192.168.100.11 msg=seoul
    192.168.100.12 msg=busan
    
    [nodes:vars]
    message="hello world"
    - hosts: nodes
      tasks:
        - debug:
            var: msg
        - debug:
            var: message     

    コマンドで変数を定義する

    ansible-playbook test.yaml -e msg=korea

    変数の優先度


    https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#understanding-variable-precedence
    低い
  • 在庫変数
  • play vars
  • playvars prompt
  • playvars files
  • コマンド-e,--追加-vars
    高さ
  • 変数の範囲

  • グローバル:コマンド-e
  • 再生:vars、vars files、vars prompt
  • ホスト:在庫変数
  • フィルタ


    変数に必要なコンテンツのみ取得
    変数で値を変更する加工/フォーマット(transform)
    https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html
    {{ msg | filter }}
    - hosts: 192.168.100.11
      vars:
        pwd: P@ssw0rd
      tasks:
        - user:
            name: devops
            password: "{{ pwd | password_hash('sha512', 65534 | random(seed=inventory_hostname) | string) }}"
            state: present

    パラメータ

    setupモジュールが収集したホスト変数(ハードウェア、オペレーティングシステム)
    Playbookを実行するには、常に最初のタスクgathering factsに基づいて収集されます.
    - hosts: 192.168.100.11
      gather_facts: no
    

    とくしゅへんすう


    https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html
  • groups
  • hostvars
  • inventory_hostname
  • ...
  • かたわく


    jinjaテンプレート
    https://jinja.palletsprojects.com/en/2.10.x/
    - hosts: 192.168.100.11
      vars:
        message: korea
      tasks:
        - copy:
            src: origin.txt
            dest: /tmp/copy.txt
        - template:
            src: origin.txt
            dest: /tmp/template.txt
    origin.txt
    hello {{ message }} world
    jinja templetファイル拡張子.j2 , .jinja2

    Ubuntu構成

    Vagrant.configure("2") do |config|
    	# Define VM
    	config.vm.define "controller" do |centos|
    		centos.vm.box = "centos/7"
    		centos.vm.hostname = "controller"
    		centos.vm.network "private_network", ip: "192.168.100.10"
    		centos.vm.provider "virtualbox" do |vb|
    			vb.name = "controller"
    			vb.cpus = 2
    			vb.memory = 2048
    		end
    	end
    	# Define VM
    	config.vm.define "node1" do |centos|
    		centos.vm.box = "centos/7"
    		centos.vm.hostname = "node1"
    		centos.vm.network "private_network", ip: "192.168.100.11"
    		centos.vm.provider "virtualbox" do |vb|
    			vb.name = "node1"
    			vb.cpus = 2
    			vb.memory = 2048
    		end
    	end
    	# Define VM
    	config.vm.define "node2" do |centos|
    		centos.vm.box = "centos/7"
    		centos.vm.hostname = "node2"
    		centos.vm.network "private_network", ip: "192.168.100.12"
    		centos.vm.provider "virtualbox" do |vb|
    			vb.name = "node2"
    			vb.cpus = 2
    			vb.memory = 2048
    		end
    	end
    	# Define VM
    	config.vm.define "node3" do |ubuntu|
    		ubuntu.vm.box = "ubuntu/bionic64"
    		ubuntu.vm.hostname = "node3"
    		ubuntu.vm.network "private_network", ip: "192.168.100.13"
    		ubuntu.vm.provider "virtualbox" do |vb|
    			vb.name = "node3"
    			vb.cpus = 2
    			vb.memory = 2048
    		end
    	end
    end
  • yum --> apt
  • httpdパッケージ-->Apache 2
  • mariadb --> mysql
  • aptコマンドオプション

  • list - list packages based on package names
  • search - search in package descriptions
  • show - show package details
  • install - install packages
  • remove - remove packages
  • autoremove - Remove automatically all unused packages
  • 更新-利用可能なパッケージの更新リスト:更新パッケージリスト
  • アップグレード-パッケージのインストール/アップグレードによるアップグレードシステム:パッケージのアップグレード
  • ネットワーク管理


    Netplanツール
    NetworkManager X/etc/netplan/\*.yaml
    netplan apply

    その他


    保安
  • RHEL: SELinux
  • Debian: AppArmor
  • ファイアウォール
  • RHEL: FirewallD
  • Debian: UFW
  • Kernel(Netfilter) <-- iptables