Browse Source

fix/workaround for setting container static IP

master
cinnaboot 5 years ago
parent
commit
c5ea15721f
  1. 115
      roles/lxd_host/tasks/container_install.yml
  2. 2
      roles/lxd_host/tasks/lxd_host.yml

115
roles/lxd_host/tasks/container_install.yml

@ -12,79 +12,68 @@
container_present: true container_present: true
when: command_return.rc == 0 when: command_return.rc == 0
# - when: not container_present
# TODO: static ip not working block:
# the eth0 device is added, and ipv4.address is set, but the device - name: "install container {{ container_name }}"
# is not attached to the bridge as per community.general.lxd_container:
# https://discuss.linuxcontainers.org/t/using-static-ips-with-lxd/1291/6 name: "{{ container_name }}"
# could add some more tasks to do it manually :( state: stopped
# profiles: default
- name: "install container {{ container_name }}" wait_for_ipv4_addresses: true
community.general.lxd_container: source:
name: "{{ container_name }}" type: image
state: started mode: pull
profiles: default server: "{{ img_server }}"
wait_for_ipv4_addresses: true protocol: simplestreams
source: alias: "{{ alp_img_alias }}"
type: image
mode: pull
server: "{{ img_server }}"
protocol: simplestreams
alias: "{{ alp_img_alias }}"
devices:
eth0:
type: nic
nictype: bridged
parent: "{{ lxd_bridge }}"
ipv4.address: "{{ container_ip }}"
when: not container_present
- name: update container packages - name: manually attach eth0 to lxd bridge interface
command: "{{ lxc_cmd }} exec {{ container_name }} -- apk upgrade -U" block:
when: not container_present - command: "{{ lxc_cmd }} network attach {{ lxd_bridge }} \
{{ container_name }} eth0 eth0"
- command: "{{ lxc_cmd }} config device set {{ container_name }} eth0 \
ipv4.address {{ container_ip }}"
- community.general.lxd_container:
name: "{{ container_name }}"
state: started
- name: install common packages in containers - name: install common packages in containers
command: "{{ lxc_cmd }} exec {{ container_name }} -- \ command: "{{ lxc_cmd }} exec {{ container_name }} -- apk upgrade -U"
apk add python3 openssh rsync shadow tar" - command: "{{ lxc_cmd }} exec {{ container_name }} -- \
when: not container_present apk add python3 openssh rsync shadow tar"
- name: "copy container sshd_config for {{ container_name }} to lxd host" - name: "copy container sshd_config for {{ container_name }} to lxd host"
template: template:
src: templates/sshd_config.j2 src: templates/sshd_config.j2
dest: "{{ tmp_sshd_config }}" dest: "{{ tmp_sshd_config }}"
when: not container_present
- name: use lxc file push to get sshd_config into container - name: use lxc file push to get sshd_config into container
command: "{{ lxc_cmd }} file push {{ tmp_sshd_config}} \ command: "{{ lxc_cmd }} file push {{ tmp_sshd_config}} \
{{ container_name }}/etc/ssh/sshd_config" {{ container_name }}/etc/ssh/sshd_config"
when: not container_present
- name: mkdir /root/.ssh in {{ container_name }} - name: mkdir /root/.ssh in {{ container_name }}
command: "{{ lxc_cmd }} exec {{ container_name }} -- mkdir -p /root/.ssh" command: "{{ lxc_cmd }} exec {{ container_name }} -- mkdir -p /root/.ssh"
when: not container_present
- name: add controller public key to {{ container_name }} authorized keys - name: add controller public key to {{ container_name }} authorized keys
command: "{{ lxc_cmd }} file push {{ tmp_pubkey }} \ command: "{{ lxc_cmd }} file push {{ tmp_pubkey }} \
{{ container_name }}/root/.ssh/authorized_keys \ {{ container_name }}/root/.ssh/authorized_keys \
--gid 0 --uid 0 --mode 600" --gid 0 --uid 0 --mode 600"
when: not container_present
- name: make hash of a random password - name: make hash of a random password
set_fact: set_fact:
root_pass: "{{ lookup('password', '/dev/null length=15 chars=ascii_letters') | password_hash('sha512') }}" root_pass: "{{ lookup('password',
when: not container_present '/dev/null length=15 chars=ascii_letters')
| password_hash('sha512') }}"
- name: "set password to unlock root account (NOTE: still using pubkey only)" - name: "set password to unlock root account (NOTE: still using pubkey only)"
shell: '{{ lxc_cmd }} exec {{ container_name }} -- usermod -p {{ root_pass }} root' shell: '{{ lxc_cmd }} exec {{ container_name }} -- \
when: not container_present usermod -p {{ root_pass }} root'
- name: ensure sshd service is enabled - name: ensure sshd service is enabled
command: "{{ lxc_cmd }} exec {{ container_name }} -- rc-update add sshd" command: "{{ lxc_cmd }} exec {{ container_name }} -- rc-update add sshd"
when: not container_present
- name: ensure sshd service is started - name: ensure sshd service is started
command: "{{ lxc_cmd }} exec {{ container_name }} -- rc-service sshd start" command: "{{ lxc_cmd }} exec {{ container_name }} -- rc-service sshd start"
when: not container_present
- set_fact: - set_fact:
container_present: false container_present: false

2
roles/lxd_host/tasks/lxd_host.yml

@ -7,7 +7,7 @@
# TODO: might make sense to add a cache redirect for alpine packages # TODO: might make sense to add a cache redirect for alpine packages
- include_tasks: tasks/container_install.yml - include_tasks: tasks/container_install.yml
tags: containers tags: container_install
vars: vars:
container_name: "{{ item }}" container_name: "{{ item }}"
container_sshd_port: "{{ hostvars[item]['ansible_port'] }}" container_sshd_port: "{{ hostvars[item]['ansible_port'] }}"

Loading…
Cancel
Save